From 6b4db45f6395c5435ce709d99bb922a1fc7b7f87 Mon Sep 17 00:00:00 2001 From: ronknight Date: Wed, 10 Mar 2021 15:54:20 -0800 Subject: [PATCH] Revert "Migrate to CodeIgniter4" --- .gitignore | 132 +- .htaccess | 5 + .../application/controllers/._Attributes.php | Bin 0 -> 210 bytes __MACOSX/application/controllers/._Brands.php | Bin 0 -> 210 bytes .../application/controllers/._Category.php | Bin 0 -> 210 bytes .../application/controllers/._Company.php | Bin 0 -> 210 bytes __MACOSX/application/controllers/._Orders.php | Bin 0 -> 210 bytes .../application/controllers/._Products.php | Bin 0 -> 210 bytes .../application/controllers/._Reports.php | Bin 0 -> 210 bytes __MACOSX/application/controllers/._Stores.php | Bin 0 -> 210 bytes __MACOSX/application/models/._.DS_Store | Bin 0 -> 120 bytes .../application/models/._Model_attributes.php | Bin 0 -> 210 bytes .../application/models/._Model_brands.php | Bin 0 -> 210 bytes .../application/models/._Model_category.php | Bin 0 -> 210 bytes .../application/models/._Model_company.php | Bin 0 -> 210 bytes .../application/models/._Model_orders.php | Bin 0 -> 210 bytes .../application/models/._Model_products.php | Bin 0 -> 210 bytes .../application/models/._Model_reports.php | Bin 0 -> 210 bytes .../application/models/._Model_stores.php | Bin 0 -> 210 bytes .../views/attributes/._addvalue.php | Bin 0 -> 210 bytes .../application/views/attributes/._index.php | Bin 0 -> 210 bytes __MACOSX/application/views/brands/._index.php | Bin 0 -> 210 bytes .../application/views/category/._index.php | Bin 0 -> 210 bytes .../application/views/company/._index.php | Bin 0 -> 210 bytes .../application/views/orders/._create.php | Bin 0 -> 210 bytes __MACOSX/application/views/orders/._edit.php | Bin 0 -> 210 bytes __MACOSX/application/views/orders/._index.php | Bin 0 -> 210 bytes .../application/views/products/._create.php | Bin 0 -> 210 bytes .../application/views/products/._edit.php | Bin 0 -> 210 bytes .../application/views/products/._index.php | Bin 0 -> 210 bytes .../application/views/reports/._index.php | Bin 0 -> 210 bytes __MACOSX/application/views/stores/._index.php | Bin 0 -> 210 bytes .../plugins/fileinput/._fileinput.min.css | Bin 0 -> 210 bytes .../plugins/fileinput/._fileinput.min.js | Bin 0 -> 210 bytes app/Common.php | 15 - app/Config/App.php | 268 -- app/Config/Boot/development.php | 32 - app/Config/Boot/production.php | 22 - app/Config/Boot/testing.php | 33 - app/Config/Cache.php | 120 - app/Config/ContentSecurityPolicy.php | 48 - app/Config/Email.php | 171 - app/Config/Encryption.php | 36 - app/Config/Events.php | 52 - app/Config/Exceptions.php | 42 - app/Config/Filters.php | 38 - app/Config/ForeignCharacters.php | 6 - app/Config/Format.php | 85 - app/Config/Honeypot.php | 42 - app/Config/Images.php | 31 - app/Config/Kint.php | 62 - app/Config/Logger.php | 132 - app/Config/Migrations.php | 50 - app/Config/Modules.php | 45 - app/Config/Pager.php | 35 - app/Config/Paths.php | 73 - app/Config/Services.php | 30 - app/Config/Toolbar.php | 68 - app/Config/UserAgents.php | 218 - app/Config/Validation.php | 36 - app/Config/View.php | 34 - app/Controllers/Auth.php | 80 - app/Controllers/Company.php | 76 - app/Controllers/File.php | 26 - app/Controllers/Products.php | 345 -- app/Controllers/Users.php | 348 -- app/Database/Migrations/.gitkeep | 0 app/Database/Seeds/.gitkeep | 0 app/Filters/.gitkeep | 0 app/Filters/Auth.php | 20 - app/Helpers/.gitkeep | 0 app/Language/.gitkeep | 1 - app/Language/ar/CLI.php | 47 - app/Language/ar/Cache.php | 45 - app/Language/ar/Cast.php | 46 - app/Language/ar/Core.php | 44 - app/Language/ar/Database.php | 56 - app/Language/ar/Email.php | 59 - app/Language/ar/Encryption.php | 46 - app/Language/ar/Entity.php | 43 - app/Language/ar/Files.php | 43 - app/Language/ar/Filters.php | 42 - app/Language/ar/Format.php | 42 - app/Language/ar/HTTP.php | 100 - app/Language/ar/Images.php | 59 - app/Language/ar/Language.php | 41 - app/Language/ar/Log.php | 41 - app/Language/ar/Migrations.php | 79 - app/Language/ar/Number.php | 53 - app/Language/ar/Pager.php | 49 - app/Language/ar/RESTful.php | 41 - app/Language/ar/Redirect.php | 42 - app/Language/ar/Router.php | 42 - app/Language/ar/Session.php | 45 - app/Language/ar/Time.php | 58 - app/Language/ar/Validation.php | 95 - app/Language/ar/View.php | 45 - app/Language/cs/CLI.php | 47 - app/Language/cs/Cache.php | 45 - app/Language/cs/Cast.php | 46 - app/Language/cs/Core.php | 45 - app/Language/cs/Database.php | 56 - app/Language/cs/Email.php | 59 - app/Language/cs/Encryption.php | 46 - app/Language/cs/Entity.php | 43 - app/Language/cs/Files.php | 42 - app/Language/cs/Filters.php | 43 - app/Language/cs/Format.php | 43 - app/Language/cs/HTTP.php | 100 - app/Language/cs/Images.php | 59 - app/Language/cs/Language.php | 42 - app/Language/cs/Log.php | 42 - app/Language/cs/Migrations.php | 81 - app/Language/cs/Number.php | 53 - app/Language/cs/Pager.php | 50 - app/Language/cs/RESTful.php | 41 - app/Language/cs/Redirect.php | 42 - app/Language/cs/Router.php | 43 - app/Language/cs/Session.php | 46 - app/Language/cs/Time.php | 59 - app/Language/cs/Validation.php | 95 - app/Language/cs/View.php | 46 - app/Language/de/CLI.php | 47 - app/Language/de/Cache.php | 45 - app/Language/de/Cast.php | 47 - app/Language/de/Core.php | 45 - app/Language/de/Database.php | 56 - app/Language/de/Email.php | 59 - app/Language/de/Encryption.php | 46 - app/Language/de/Entity.php | 42 - app/Language/de/Files.php | 42 - app/Language/de/Filters.php | 43 - app/Language/de/Format.php | 43 - app/Language/de/HTTP.php | 100 - app/Language/de/Images.php | 60 - app/Language/de/Language.php | 42 - app/Language/de/Log.php | 42 - app/Language/de/Migrations.php | 81 - app/Language/de/Number.php | 53 - app/Language/de/Pager.php | 50 - app/Language/de/RESTful.php | 41 - app/Language/de/Redirect.php | 42 - app/Language/de/Router.php | 43 - app/Language/de/Session.php | 46 - app/Language/de/Time.php | 59 - app/Language/de/Validation.php | 98 - app/Language/de/View.php | 47 - app/Language/en/Main.php | 52 - app/Language/en/Validation.php | 4 - app/Language/es/CLI.php | 47 - app/Language/es/Cache.php | 45 - app/Language/es/Cast.php | 46 - app/Language/es/Core.php | 45 - app/Language/es/Database.php | 56 - app/Language/es/Email.php | 59 - app/Language/es/Encryption.php | 46 - app/Language/es/Entity.php | 43 - app/Language/es/Files.php | 42 - app/Language/es/Filters.php | 43 - app/Language/es/Format.php | 42 - app/Language/es/HTTP.php | 100 - app/Language/es/Images.php | 58 - app/Language/es/Language.php | 41 - app/Language/es/Log.php | 42 - app/Language/es/Migrations.php | 79 - app/Language/es/Number.php | 53 - app/Language/es/Pager.php | 49 - app/Language/es/RESTful.php | 41 - app/Language/es/Redirect.php | 42 - app/Language/es/Router.php | 42 - app/Language/es/Session.php | 45 - app/Language/es/Time.php | 58 - app/Language/es/Validation.php | 96 - app/Language/es/View.php | 45 - app/Language/fa/CLI.php | 47 - app/Language/fa/Cache.php | 43 - app/Language/fa/Cast.php | 45 - app/Language/fa/Core.php | 43 - app/Language/fa/Database.php | 55 - app/Language/fa/Email.php | 58 - app/Language/fa/Encryption.php | 46 - app/Language/fa/Entity.php | 43 - app/Language/fa/Files.php | 43 - app/Language/fa/Filters.php | 41 - app/Language/fa/Format.php | 41 - app/Language/fa/HTTP.php | 88 - app/Language/fa/Images.php | 58 - app/Language/fa/Language.php | 40 - app/Language/fa/Log.php | 40 - app/Language/fa/Migrations.php | 81 - app/Language/fa/Number.php | 53 - app/Language/fa/Pager.php | 50 - app/Language/fa/RESTful.php | 41 - app/Language/fa/Redirect.php | 42 - app/Language/fa/Router.php | 43 - app/Language/fa/Session.php | 46 - app/Language/fa/Time.php | 59 - app/Language/fa/Validation.php | 91 - app/Language/fa/View.php | 46 - app/Language/fr/CLI.php | 47 - app/Language/fr/Cache.php | 45 - app/Language/fr/Cast.php | 46 - app/Language/fr/Core.php | 45 - app/Language/fr/Database.php | 56 - app/Language/fr/Email.php | 60 - app/Language/fr/Encryption.php | 46 - app/Language/fr/Entity.php | 43 - app/Language/fr/Files.php | 43 - app/Language/fr/Filters.php | 43 - app/Language/fr/Format.php | 43 - app/Language/fr/HTTP.php | 100 - app/Language/fr/Images.php | 59 - app/Language/fr/Language.php | 42 - app/Language/fr/Log.php | 42 - app/Language/fr/Migrations.php | 81 - app/Language/fr/Number.php | 53 - app/Language/fr/Pager.php | 50 - app/Language/fr/RESTful.php | 41 - app/Language/fr/Redirect.php | 42 - app/Language/fr/Router.php | 43 - app/Language/fr/Session.php | 46 - app/Language/fr/Time.php | 59 - app/Language/fr/Validation.php | 96 - app/Language/fr/View.php | 46 - app/Language/id/CLI.php | 46 - app/Language/id/Cache.php | 44 - app/Language/id/Cast.php | 47 - app/Language/id/Core.php | 44 - app/Language/id/Database.php | 55 - app/Language/id/Email.php | 59 - app/Language/id/Encryption.php | 47 - app/Language/id/Entity.php | 43 - app/Language/id/Files.php | 43 - app/Language/id/Filters.php | 42 - app/Language/id/Format.php | 42 - app/Language/id/HTTP.php | 99 - app/Language/id/Images.php | 58 - app/Language/id/Language.php | 41 - app/Language/id/Log.php | 41 - app/Language/id/Migrations.php | 80 - app/Language/id/Number.php | 53 - app/Language/id/Pager.php | 49 - app/Language/id/RESTful.php | 42 - app/Language/id/Redirect.php | 42 - app/Language/id/Router.php | 42 - app/Language/id/Session.php | 45 - app/Language/id/Time.php | 58 - app/Language/id/Validation.php | 95 - app/Language/id/View.php | 45 - app/Language/it/CLI.php | 46 - app/Language/it/Cache.php | 44 - app/Language/it/Cast.php | 46 - app/Language/it/Core.php | 44 - app/Language/it/Database.php | 55 - app/Language/it/Datatables.php | 27 - app/Language/it/Email.php | 59 - app/Language/it/Encryption.php | 46 - app/Language/it/Entity.php | 43 - app/Language/it/Files.php | 43 - app/Language/it/Filters.php | 42 - app/Language/it/Format.php | 42 - app/Language/it/HTTP.php | 99 - app/Language/it/Images.php | 58 - app/Language/it/Language.php | 41 - app/Language/it/Log.php | 41 - app/Language/it/Main.php | 53 - app/Language/it/Migrations.php | 80 - app/Language/it/Number.php | 53 - app/Language/it/Pager.php | 49 - app/Language/it/RESTful.php | 41 - app/Language/it/Redirect.php | 42 - app/Language/it/Router.php | 42 - app/Language/it/Session.php | 45 - app/Language/it/Time.php | 58 - app/Language/it/Validation.php | 96 - app/Language/it/View.php | 45 - app/Language/ja/CLI.php | 46 - app/Language/ja/Cache.php | 44 - app/Language/ja/Cast.php | 46 - app/Language/ja/Core.php | 44 - app/Language/ja/Database.php | 55 - app/Language/ja/Email.php | 59 - app/Language/ja/Encryption.php | 46 - app/Language/ja/Entity.php | 42 - app/Language/ja/Files.php | 42 - app/Language/ja/Filters.php | 42 - app/Language/ja/Format.php | 42 - app/Language/ja/HTTP.php | 99 - app/Language/ja/Images.php | 59 - app/Language/ja/Language.php | 41 - app/Language/ja/Log.php | 41 - app/Language/ja/Migrations.php | 80 - app/Language/ja/Number.php | 55 - app/Language/ja/Pager.php | 49 - app/Language/ja/RESTful.php | 41 - app/Language/ja/Redirect.php | 41 - app/Language/ja/Router.php | 42 - app/Language/ja/Session.php | 45 - app/Language/ja/Time.php | 58 - app/Language/ja/Validation.php | 98 - app/Language/ja/View.php | 46 - app/Language/ko/CLI.php | 47 - app/Language/ko/Cache.php | 45 - app/Language/ko/Cast.php | 46 - app/Language/ko/Core.php | 46 - app/Language/ko/Database.php | 56 - app/Language/ko/Email.php | 59 - app/Language/ko/Encryption.php | 46 - app/Language/ko/Entity.php | 43 - app/Language/ko/Files.php | 42 - app/Language/ko/Filters.php | 43 - app/Language/ko/Format.php | 43 - app/Language/ko/HTTP.php | 100 - app/Language/ko/Images.php | 60 - app/Language/ko/Language.php | 42 - app/Language/ko/Log.php | 42 - app/Language/ko/Migrations.php | 79 - app/Language/ko/Number.php | 53 - app/Language/ko/Pager.php | 50 - app/Language/ko/RESTful.php | 41 - app/Language/ko/Redirect.php | 42 - app/Language/ko/Router.php | 43 - app/Language/ko/Session.php | 46 - app/Language/ko/Time.php | 59 - app/Language/ko/Validation.php | 97 - app/Language/ko/View.php | 46 - app/Language/lt/CLI.php | 47 - app/Language/lt/Cache.php | 45 - app/Language/lt/Cast.php | 46 - app/Language/lt/Core.php | 45 - app/Language/lt/Database.php | 56 - app/Language/lt/Email.php | 59 - app/Language/lt/Encryption.php | 46 - app/Language/lt/Entity.php | 43 - app/Language/lt/Files.php | 42 - app/Language/lt/Filters.php | 43 - app/Language/lt/Format.php | 43 - app/Language/lt/HTTP.php | 100 - app/Language/lt/Images.php | 59 - app/Language/lt/Language.php | 42 - app/Language/lt/Log.php | 42 - app/Language/lt/Migrations.php | 79 - app/Language/lt/Number.php | 53 - app/Language/lt/Pager.php | 50 - app/Language/lt/RESTful.php | 41 - app/Language/lt/Redirect.php | 42 - app/Language/lt/Router.php | 43 - app/Language/lt/Session.php | 46 - app/Language/lt/Time.php | 59 - app/Language/lt/Validation.php | 95 - app/Language/lt/View.php | 46 - app/Language/ml/CLI.php | 47 - app/Language/ml/Cache.php | 45 - app/Language/ml/Cast.php | 46 - app/Language/ml/Core.php | 45 - app/Language/ml/Database.php | 55 - app/Language/ml/Email.php | 59 - app/Language/ml/Encryption.php | 46 - app/Language/ml/Entity.php | 43 - app/Language/ml/Files.php | 43 - app/Language/ml/Filters.php | 43 - app/Language/ml/Format.php | 43 - app/Language/ml/HTTP.php | 100 - app/Language/ml/Images.php | 60 - app/Language/ml/Language.php | 42 - app/Language/ml/Log.php | 42 - app/Language/ml/Migrations.php | 81 - app/Language/ml/Number.php | 53 - app/Language/ml/Pager.php | 50 - app/Language/ml/RESTful.php | 41 - app/Language/ml/Redirect.php | 42 - app/Language/ml/Router.php | 43 - app/Language/ml/Session.php | 46 - app/Language/ml/Time.php | 59 - app/Language/ml/Validation.php | 98 - app/Language/ml/View.php | 46 - app/Language/nl/CLI.php | 47 - app/Language/nl/Cache.php | 45 - app/Language/nl/Cast.php | 48 - app/Language/nl/Core.php | 45 - app/Language/nl/Database.php | 56 - app/Language/nl/Email.php | 59 - app/Language/nl/Encryption.php | 46 - app/Language/nl/Entity.php | 43 - app/Language/nl/Files.php | 42 - app/Language/nl/Filters.php | 43 - app/Language/nl/Format.php | 43 - app/Language/nl/HTTP.php | 100 - app/Language/nl/Images.php | 60 - app/Language/nl/Language.php | 43 - app/Language/nl/Log.php | 42 - app/Language/nl/Migrations.php | 79 - app/Language/nl/Number.php | 53 - app/Language/nl/Pager.php | 50 - app/Language/nl/RESTful.php | 41 - app/Language/nl/Redirect.php | 42 - app/Language/nl/Router.php | 43 - app/Language/nl/Session.php | 46 - app/Language/nl/Time.php | 60 - app/Language/nl/Validation.php | 96 - app/Language/nl/View.php | 48 - app/Language/no/CLI.php | 47 - app/Language/no/Cache.php | 45 - app/Language/no/Cast.php | 47 - app/Language/no/Core.php | 45 - app/Language/no/Database.php | 56 - app/Language/no/Email.php | 59 - app/Language/no/Encryption.php | 46 - app/Language/no/Entity.php | 43 - app/Language/no/Files.php | 42 - app/Language/no/Filters.php | 43 - app/Language/no/Format.php | 43 - app/Language/no/HTTP.php | 101 - app/Language/no/Images.php | 59 - app/Language/no/Language.php | 42 - app/Language/no/Log.php | 42 - app/Language/no/Migrations.php | 81 - app/Language/no/Number.php | 53 - app/Language/no/Pager.php | 50 - app/Language/no/RESTful.php | 41 - app/Language/no/Redirect.php | 42 - app/Language/no/Router.php | 43 - app/Language/no/Session.php | 46 - app/Language/no/Time.php | 59 - app/Language/no/Validation.php | 94 - app/Language/no/View.php | 47 - app/Language/pl/CLI.php | 46 - app/Language/pl/Cache.php | 44 - app/Language/pl/Cast.php | 46 - app/Language/pl/Core.php | 44 - app/Language/pl/Database.php | 55 - app/Language/pl/Email.php | 59 - app/Language/pl/Encryption.php | 46 - app/Language/pl/Entity.php | 43 - app/Language/pl/Files.php | 43 - app/Language/pl/Filters.php | 42 - app/Language/pl/Format.php | 42 - app/Language/pl/HTTP.php | 98 - app/Language/pl/Images.php | 58 - app/Language/pl/Language.php | 41 - app/Language/pl/Log.php | 41 - app/Language/pl/Migrations.php | 80 - app/Language/pl/Number.php | 53 - app/Language/pl/Pager.php | 49 - app/Language/pl/RESTful.php | 41 - app/Language/pl/Redirect.php | 42 - app/Language/pl/Router.php | 42 - app/Language/pl/Session.php | 45 - app/Language/pl/Time.php | 58 - app/Language/pl/Validation.php | 96 - app/Language/pl/View.php | 45 - app/Language/pt-BR/CLI.php | 56 - app/Language/pt-BR/Cache.php | 44 - app/Language/pt-BR/Cast.php | 46 - app/Language/pt-BR/Core.php | 45 - app/Language/pt-BR/Database.php | 56 - app/Language/pt-BR/Email.php | 59 - app/Language/pt-BR/Encryption.php | 46 - app/Language/pt-BR/Entity.php | 42 - app/Language/pt-BR/Files.php | 42 - app/Language/pt-BR/Filters.php | 42 - app/Language/pt-BR/Format.php | 44 - app/Language/pt-BR/HTTP.php | 102 - app/Language/pt-BR/Images.php | 60 - app/Language/pt-BR/Language.php | 41 - app/Language/pt-BR/Log.php | 41 - app/Language/pt-BR/Migrations.php | 85 - app/Language/pt-BR/Number.php | 52 - app/Language/pt-BR/Pager.php | 49 - app/Language/pt-BR/RESTful.php | 41 - app/Language/pt-BR/Redirect.php | 42 - app/Language/pt-BR/Router.php | 42 - app/Language/pt-BR/Session.php | 46 - app/Language/pt-BR/Time.php | 58 - app/Language/pt-BR/Validation.php | 99 - app/Language/pt-BR/View.php | 46 - app/Language/pt/CLI.php | 46 - app/Language/pt/Cache.php | 44 - app/Language/pt/Cast.php | 46 - app/Language/pt/Core.php | 44 - app/Language/pt/Database.php | 55 - app/Language/pt/Email.php | 59 - app/Language/pt/Encryption.php | 46 - app/Language/pt/Entity.php | 43 - app/Language/pt/Files.php | 41 - app/Language/pt/Filters.php | 42 - app/Language/pt/Format.php | 42 - app/Language/pt/HTTP.php | 99 - app/Language/pt/Images.php | 58 - app/Language/pt/Language.php | 41 - app/Language/pt/Log.php | 41 - app/Language/pt/Migrations.php | 78 - app/Language/pt/Number.php | 53 - app/Language/pt/Pager.php | 49 - app/Language/pt/RESTful.php | 41 - app/Language/pt/Redirect.php | 42 - app/Language/pt/Router.php | 42 - app/Language/pt/Session.php | 45 - app/Language/pt/Time.php | 58 - app/Language/pt/Validation.php | 96 - app/Language/pt/View.php | 45 - app/Language/ru/CLI.php | 47 - app/Language/ru/Cache.php | 45 - app/Language/ru/Cast.php | 47 - app/Language/ru/Core.php | 46 - app/Language/ru/Database.php | 56 - app/Language/ru/Email.php | 60 - app/Language/ru/Encryption.php | 47 - app/Language/ru/Entity.php | 43 - app/Language/ru/Fabricator.php | 43 - app/Language/ru/Files.php | 43 - app/Language/ru/Filters.php | 43 - app/Language/ru/Format.php | 43 - app/Language/ru/HTTP.php | 100 - app/Language/ru/Images.php | 60 - app/Language/ru/Language.php | 42 - app/Language/ru/Log.php | 42 - app/Language/ru/Migrations.php | 81 - app/Language/ru/Number.php | 53 - app/Language/ru/Pager.php | 50 - app/Language/ru/RESTful.php | 42 - app/Language/ru/Redirect.php | 42 - app/Language/ru/Router.php | 43 - app/Language/ru/Session.php | 46 - app/Language/ru/Time.php | 59 - app/Language/ru/Validation.php | 98 - app/Language/ru/View.php | 47 - app/Language/sk/CLI.php | 47 - app/Language/sk/Cache.php | 45 - app/Language/sk/Cast.php | 46 - app/Language/sk/Core.php | 45 - app/Language/sk/Database.php | 56 - app/Language/sk/Email.php | 59 - app/Language/sk/Encryption.php | 46 - app/Language/sk/Entity.php | 43 - app/Language/sk/Files.php | 42 - app/Language/sk/Filters.php | 43 - app/Language/sk/Format.php | 43 - app/Language/sk/HTTP.php | 100 - app/Language/sk/Images.php | 59 - app/Language/sk/Language.php | 42 - app/Language/sk/Log.php | 42 - app/Language/sk/Migrations.php | 81 - app/Language/sk/Number.php | 53 - app/Language/sk/Pager.php | 50 - app/Language/sk/RESTful.php | 41 - app/Language/sk/Redirect.php | 42 - app/Language/sk/Router.php | 43 - app/Language/sk/Session.php | 46 - app/Language/sk/Time.php | 59 - app/Language/sk/Validation.php | 95 - app/Language/sk/View.php | 46 - app/Language/tr/CLI.php | 46 - app/Language/tr/Cache.php | 44 - app/Language/tr/Cast.php | 46 - app/Language/tr/Core.php | 44 - app/Language/tr/Database.php | 55 - app/Language/tr/Email.php | 59 - app/Language/tr/Encryption.php | 46 - app/Language/tr/Entity.php | 43 - app/Language/tr/Files.php | 43 - app/Language/tr/Filters.php | 42 - app/Language/tr/Format.php | 42 - app/Language/tr/HTTP.php | 99 - app/Language/tr/Images.php | 58 - app/Language/tr/Language.php | 41 - app/Language/tr/Log.php | 41 - app/Language/tr/Migrations.php | 80 - app/Language/tr/Number.php | 53 - app/Language/tr/Pager.php | 49 - app/Language/tr/RESTful.php | 41 - app/Language/tr/Redirect.php | 42 - app/Language/tr/Router.php | 42 - app/Language/tr/Session.php | 45 - app/Language/tr/Time.php | 58 - app/Language/tr/Validation.php | 95 - app/Language/tr/View.php | 45 - app/Language/uk/CLI.php | 47 - app/Language/uk/Cache.php | 45 - app/Language/uk/Cast.php | 47 - app/Language/uk/Core.php | 46 - app/Language/uk/Database.php | 56 - app/Language/uk/Email.php | 60 - app/Language/uk/Encryption.php | 47 - app/Language/uk/Entity.php | 43 - app/Language/uk/Fabricator.php | 43 - app/Language/uk/Files.php | 43 - app/Language/uk/Filters.php | 43 - app/Language/uk/Format.php | 43 - app/Language/uk/HTTP.php | 100 - app/Language/uk/Images.php | 60 - app/Language/uk/Language.php | 42 - app/Language/uk/Log.php | 42 - app/Language/uk/Migrations.php | 81 - app/Language/uk/Number.php | 53 - app/Language/uk/Pager.php | 50 - app/Language/uk/RESTful.php | 42 - app/Language/uk/Redirect.php | 42 - app/Language/uk/Router.php | 43 - app/Language/uk/Session.php | 46 - app/Language/uk/Time.php | 59 - app/Language/uk/Validation.php | 98 - app/Language/uk/View.php | 47 - app/Language/vi/CLI.php | 47 - app/Language/vi/Cache.php | 45 - app/Language/vi/Cast.php | 46 - app/Language/vi/Core.php | 45 - app/Language/vi/Database.php | 56 - app/Language/vi/Email.php | 59 - app/Language/vi/Encryption.php | 46 - app/Language/vi/Entity.php | 43 - app/Language/vi/Files.php | 42 - app/Language/vi/Filters.php | 43 - app/Language/vi/Format.php | 43 - app/Language/vi/HTTP.php | 100 - app/Language/vi/Images.php | 60 - app/Language/vi/Language.php | 42 - app/Language/vi/Log.php | 42 - app/Language/vi/Migrations.php | 81 - app/Language/vi/Number.php | 53 - app/Language/vi/Pager.php | 50 - app/Language/vi/RESTful.php | 41 - app/Language/vi/Redirect.php | 42 - app/Language/vi/Router.php | 43 - app/Language/vi/Session.php | 46 - app/Language/vi/Time.php | 59 - app/Language/vi/Validation.php | 97 - app/Language/vi/View.php | 46 - app/Language/zh-CN/CLI.php | 47 - app/Language/zh-CN/Cache.php | 44 - app/Language/zh-CN/Cast.php | 46 - app/Language/zh-CN/Core.php | 45 - app/Language/zh-CN/Database.php | 56 - app/Language/zh-CN/Email.php | 59 - app/Language/zh-CN/Encryption.php | 46 - app/Language/zh-CN/Entity.php | 43 - app/Language/zh-CN/Files.php | 42 - app/Language/zh-CN/Filters.php | 43 - app/Language/zh-CN/Format.php | 43 - app/Language/zh-CN/HTTP.php | 100 - app/Language/zh-CN/Images.php | 59 - app/Language/zh-CN/Language.php | 42 - app/Language/zh-CN/Log.php | 42 - app/Language/zh-CN/Migrations.php | 81 - app/Language/zh-CN/Number.php | 53 - app/Language/zh-CN/Pager.php | 50 - app/Language/zh-CN/RESTful.php | 41 - app/Language/zh-CN/Redirect.php | 42 - app/Language/zh-CN/Router.php | 43 - app/Language/zh-CN/Session.php | 46 - app/Language/zh-CN/Time.php | 59 - app/Language/zh-CN/Validation.php | 95 - app/Language/zh-CN/View.php | 46 - app/Language/zh-TW/CLI.php | 47 - app/Language/zh-TW/Cache.php | 45 - app/Language/zh-TW/Cast.php | 46 - app/Language/zh-TW/Core.php | 45 - app/Language/zh-TW/Database.php | 56 - app/Language/zh-TW/Email.php | 59 - app/Language/zh-TW/Encryption.php | 46 - app/Language/zh-TW/Entity.php | 43 - app/Language/zh-TW/Files.php | 42 - app/Language/zh-TW/Filters.php | 43 - app/Language/zh-TW/Format.php | 43 - app/Language/zh-TW/HTTP.php | 100 - app/Language/zh-TW/Images.php | 59 - app/Language/zh-TW/Language.php | 42 - app/Language/zh-TW/Log.php | 42 - app/Language/zh-TW/Migrations.php | 79 - app/Language/zh-TW/Number.php | 53 - app/Language/zh-TW/Pager.php | 50 - app/Language/zh-TW/RESTful.php | 41 - app/Language/zh-TW/Redirect.php | 42 - app/Language/zh-TW/Router.php | 43 - app/Language/zh-TW/Session.php | 46 - app/Language/zh-TW/Time.php | 59 - app/Language/zh-TW/Validation.php | 95 - app/Language/zh-TW/View.php | 46 - app/Libraries/.gitkeep | 0 app/Models/Model_attributes.php | 75 - app/Models/Model_brands.php | 63 - app/Models/Model_category.php | 23 - app/Models/Model_company.php | 17 - app/Models/Model_groups.php | 48 - app/Models/Model_orders.php | 191 - app/Models/Model_products.php | 30 - app/Models/Model_stores.php | 31 - app/Models/Model_users.php | 91 - app/ThirdParty/.gitkeep | 0 app/Views/errors/cli/error_404.php | 6 - app/Views/errors/cli/error_exception.php | 17 - app/Views/errors/cli/production.php | 5 - app/Views/errors/html/debug.css | 177 - app/Views/errors/html/debug.js | 127 - app/Views/errors/html/error_404.php | 84 - app/Views/errors/html/error_exception.php | 401 -- app/Views/errors/html/production.php | 25 - app/config/autoload.php | 66 - app/config/constants.php | 77 - app/config/database.php | 114 - app/config/doctypes.php | 33 - app/config/mimes.php | 530 --- app/config/routes.php | 52 - application/.DS_Store | Bin 0 -> 12292 bytes {app => application}/.htaccess | 2 +- {app/Models => application/cache}/index.html | 0 application/config/autoload.php | 135 + application/config/config.php | 523 +++ application/config/constants.php | 85 + application/config/database.php | 96 + application/config/doctypes.php | 24 + application/config/foreign_chars.php | 103 + application/config/hooks.php | 13 + .../cli => application/config}/index.html | 0 application/config/memcached.php | 19 + application/config/migration.php | 84 + application/config/mimes.php | 183 + application/config/profiler.php | 14 + application/config/routes.php | 54 + application/config/smileys.php | 64 + application/config/user_agents.php | 214 + .../controllers}/Attributes.php | 101 +- application/controllers/Auth.php | 72 + .../controllers}/Brands.php | 54 +- .../controllers}/Category.php | 61 +- application/controllers/Company.php | 75 + .../controllers}/Dashboard.php | 22 +- .../controllers}/Groups.php | 80 +- .../controllers}/Orders.php | 156 +- application/controllers/Products.php | 301 ++ .../controllers}/Reports.php | 15 +- .../controllers}/Stores.php | 62 +- application/controllers/Users.php | 331 ++ .../controllers}/index.html | 0 .../core/MY_Controller.php | 67 +- .../errors => application/core}/index.html | 0 {app/Views => application/helpers}/index.html | 0 {app => application/hooks}/index.html | 0 {writable/cache => application}/index.html | 0 .../language/english}/index.html | 0 .../language}/index.html | 0 .../libraries}/index.html | 0 application/logs/index.html | 11 + {app/Models => application/models}/.DS_Store | Bin application/models/Model_attributes.php | 109 + .../models}/Model_auth.php | 20 +- application/models/Model_brands.php | 58 + application/models/Model_category.php | 58 + application/models/Model_company.php | 30 + application/models/Model_groups.php | 61 + application/models/Model_orders.php | 185 + application/models/Model_products.php | 64 + .../models}/Model_reports.php | 19 +- application/models/Model_stores.php | 65 + application/models/Model_users.php | 87 + application/models/index.html | 11 + application/third_party/index.html | 11 + .../views}/attributes/addvalue.php | 41 +- .../views}/attributes/index.php | 45 +- .../views}/brands/index.php | 47 +- .../views}/category/index.php | 47 +- .../views}/company/index.php | 32 +- .../Views => application/views}/dashboard.php | 10 +- .../views/errors/cli/error_404.php | 0 .../views}/errors/cli/error_db.php | 0 .../views/errors/cli/error_exception.php | 21 + .../views/errors/cli/error_general.php | 8 + .../views}/errors/cli/error_php.php | 1 + application/views/errors/cli/index.html | 11 + application/views/errors/html/error_404.php | 64 + .../views}/errors/html/error_db.php | 4 +- .../views/errors/html/error_exception.php | 32 + .../views}/errors/html/error_general.php | 4 +- .../views}/errors/html/error_php.php | 4 + application/views/errors/html/index.html | 11 + application/views/errors/index.html | 11 + .../views}/groups/create.php | 56 +- .../views}/groups/delete.php | 16 +- .../views}/groups/edit.php | 56 +- .../views}/groups/index.php | 26 +- application/views/index.html | 11 + {app/Views => application/views}/login.php | 7 +- .../views}/orders/create.php | 34 +- .../views}/orders/edit.php | 97 +- .../views}/orders/index.php | 29 +- .../views}/products/create.php | 52 +- .../views}/products/edit.php | 74 +- .../views}/products/index.php | 45 +- .../views}/reports/index.php | 10 +- .../views}/stores/index.php | 47 +- .../views}/templates/footer.php | 2 +- .../views}/templates/header.php | 0 .../views}/templates/header_menu.php | 6 +- .../views}/templates/side_menubar.php | 46 +- .../views}/users/create.php | 26 +- .../views}/users/delete.php | 16 +- .../views}/users/edit.php | 40 +- .../views}/users/index.php | 30 +- .../views}/users/profile.php | 18 +- .../views}/users/setting.php | 34 +- application/views/welcome_message.php | 89 + {public/assets => assets}/.DS_Store | Bin .../bower_components/.DS_Store | Bin .../bower_components/Flot/.bower.json | 0 .../bower_components/Flot/.gitignore | 0 .../bower_components/Flot/.travis.yml | 0 .../bower_components/Flot/API.md | 0 .../bower_components/Flot/CONTRIBUTING.md | 0 .../bower_components/Flot/FAQ.md | 0 .../bower_components/Flot/LICENSE.txt | 0 .../bower_components/Flot/Makefile | 0 .../bower_components/Flot/NEWS.md | 0 .../bower_components/Flot/PLUGINS.md | 0 .../bower_components/Flot/README.md | 0 .../bower_components/Flot/component.json | 0 .../examples/ajax/data-eu-gdp-growth-1.json | 0 .../examples/ajax/data-eu-gdp-growth-2.json | 0 .../examples/ajax/data-eu-gdp-growth-3.json | 0 .../examples/ajax/data-eu-gdp-growth-4.json | 0 .../examples/ajax/data-eu-gdp-growth-5.json | 0 .../examples/ajax/data-eu-gdp-growth.json | 0 .../examples/ajax/data-japan-gdp-growth.json | 0 .../examples/ajax/data-usa-gdp-growth.json | 0 .../Flot/examples/ajax/index.html | 0 .../Flot/examples/annotating/index.html | 0 .../Flot/examples/axes-interacting/index.html | 0 .../Flot/examples/axes-multiple/index.html | 0 .../Flot/examples/axes-time-zones/date.js | 0 .../Flot/examples/axes-time-zones/index.html | 0 .../Flot/examples/axes-time-zones/tz/africa | 0 .../examples/axes-time-zones/tz/antarctica | 0 .../Flot/examples/axes-time-zones/tz/asia | 0 .../examples/axes-time-zones/tz/australasia | 0 .../Flot/examples/axes-time-zones/tz/backward | 0 .../Flot/examples/axes-time-zones/tz/etcetera | 0 .../Flot/examples/axes-time-zones/tz/europe | 0 .../Flot/examples/axes-time-zones/tz/factory | 0 .../examples/axes-time-zones/tz/iso3166.tab | 0 .../examples/axes-time-zones/tz/leapseconds | 0 .../examples/axes-time-zones/tz/northamerica | 0 .../examples/axes-time-zones/tz/pacificnew | 0 .../Flot/examples/axes-time-zones/tz/solar87 | 0 .../Flot/examples/axes-time-zones/tz/solar88 | 0 .../Flot/examples/axes-time-zones/tz/solar89 | 0 .../examples/axes-time-zones/tz/southamerica | 0 .../Flot/examples/axes-time-zones/tz/systemv | 0 .../examples/axes-time-zones/tz/yearistype.sh | 0 .../Flot/examples/axes-time-zones/tz/zone.tab | 0 .../Flot/examples/axes-time/index.html | 0 .../Flot/examples/background.png | Bin .../Flot/examples/basic-options/index.html | 0 .../Flot/examples/basic-usage/index.html | 0 .../Flot/examples/canvas/index.html | 0 .../Flot/examples/categories/index.html | 0 .../Flot/examples/examples.css | 0 .../examples/image/hs-2004-27-a-large-web.jpg | Bin .../Flot/examples/image/index.html | 0 .../bower_components/Flot/examples/index.html | 0 .../Flot/examples/interacting/index.html | 0 .../Flot/examples/navigate/arrow-down.gif | Bin .../Flot/examples/navigate/arrow-left.gif | Bin .../Flot/examples/navigate/arrow-right.gif | Bin .../Flot/examples/navigate/arrow-up.gif | Bin .../Flot/examples/navigate/index.html | 0 .../Flot/examples/percentiles/index.html | 0 .../Flot/examples/realtime/index.html | 0 .../Flot/examples/resize/index.html | 0 .../Flot/examples/selection/index.html | 0 .../Flot/examples/series-errorbars/index.html | 0 .../Flot/examples/series-pie/index.html | 0 .../Flot/examples/series-toggle/index.html | 0 .../Flot/examples/series-types/index.html | 0 .../shared/jquery-ui/jquery-ui.min.css | 0 .../Flot/examples/stacking/index.html | 0 .../Flot/examples/symbols/index.html | 0 .../Flot/examples/threshold/index.html | 0 .../Flot/examples/tracking/index.html | 0 .../Flot/examples/visitors/index.html | 0 .../Flot/examples/zooming/index.html | 0 .../bower_components/Flot/excanvas.js | 0 .../bower_components/Flot/excanvas.min.js | 0 .../bower_components/Flot/flot.jquery.json | 0 .../Flot/jquery.colorhelpers.js | 0 .../Flot/jquery.flot.canvas.js | 0 .../Flot/jquery.flot.categories.js | 0 .../Flot/jquery.flot.crosshair.js | 0 .../Flot/jquery.flot.errorbars.js | 0 .../Flot/jquery.flot.fillbetween.js | 0 .../Flot/jquery.flot.image.js | 0 .../bower_components/Flot/jquery.flot.js | 0 .../Flot/jquery.flot.navigate.js | 0 .../bower_components/Flot/jquery.flot.pie.js | 0 .../Flot/jquery.flot.resize.js | 0 .../Flot/jquery.flot.selection.js | 0 .../Flot/jquery.flot.stack.js | 0 .../Flot/jquery.flot.symbol.js | 0 .../Flot/jquery.flot.threshold.js | 0 .../bower_components/Flot/jquery.flot.time.js | 0 .../bower_components/Flot/jquery.js | 0 .../bower_components/Flot/package.json | 0 .../bower_components/Ionicons/.bower.json | 0 .../bower_components/Ionicons/LICENSE | 0 .../bower_components/Ionicons/bower.json | 0 .../bower_components/Ionicons/cheatsheet.html | 0 .../bower_components/Ionicons/component.json | 0 .../bower_components/Ionicons/composer.json | 0 .../Ionicons/css/ionicons.css | 0 .../Ionicons/css/ionicons.min.css | 0 .../Ionicons/fonts/ionicons.eot | Bin .../Ionicons/fonts/ionicons.svg | 0 .../Ionicons/fonts/ionicons.ttf | Bin .../Ionicons/fonts/ionicons.woff | Bin .../Ionicons/less/_ionicons-font.less | 0 .../Ionicons/less/_ionicons-icons.less | 0 .../Ionicons/less/_ionicons-variables.less | 0 .../Ionicons/less/ionicons.less | 0 .../Ionicons/png/512/alert-circled.png | Bin .../Ionicons/png/512/alert.png | Bin .../Ionicons/png/512/android-add-contact.png | Bin .../Ionicons/png/512/android-add.png | Bin .../Ionicons/png/512/android-alarm.png | Bin .../Ionicons/png/512/android-archive.png | Bin .../Ionicons/png/512/android-arrow-back.png | Bin .../png/512/android-arrow-down-left.png | Bin .../png/512/android-arrow-down-right.png | Bin .../png/512/android-arrow-forward.png | Bin .../png/512/android-arrow-up-left.png | Bin .../png/512/android-arrow-up-right.png | Bin .../Ionicons/png/512/android-battery.png | Bin .../Ionicons/png/512/android-book.png | Bin .../Ionicons/png/512/android-calendar.png | Bin .../Ionicons/png/512/android-call.png | Bin .../Ionicons/png/512/android-camera.png | Bin .../Ionicons/png/512/android-chat.png | Bin .../Ionicons/png/512/android-checkmark.png | Bin .../Ionicons/png/512/android-clock.png | Bin .../Ionicons/png/512/android-close.png | Bin .../Ionicons/png/512/android-contact.png | Bin .../Ionicons/png/512/android-contacts.png | Bin .../Ionicons/png/512/android-data.png | Bin .../Ionicons/png/512/android-developer.png | Bin .../Ionicons/png/512/android-display.png | Bin .../Ionicons/png/512/android-download.png | Bin .../Ionicons/png/512/android-drawer.png | Bin .../Ionicons/png/512/android-dropdown.png | Bin .../Ionicons/png/512/android-earth.png | Bin .../Ionicons/png/512/android-folder.png | Bin .../Ionicons/png/512/android-forums.png | Bin .../Ionicons/png/512/android-friends.png | Bin .../Ionicons/png/512/android-hand.png | Bin .../Ionicons/png/512/android-image.png | Bin .../Ionicons/png/512/android-inbox.png | Bin .../Ionicons/png/512/android-information.png | Bin .../Ionicons/png/512/android-keypad.png | Bin .../Ionicons/png/512/android-lightbulb.png | Bin .../Ionicons/png/512/android-locate.png | Bin .../Ionicons/png/512/android-location.png | Bin .../Ionicons/png/512/android-mail.png | Bin .../Ionicons/png/512/android-microphone.png | Bin .../Ionicons/png/512/android-mixer.png | Bin .../Ionicons/png/512/android-more.png | Bin .../Ionicons/png/512/android-note.png | Bin .../Ionicons/png/512/android-playstore.png | Bin .../Ionicons/png/512/android-printer.png | Bin .../Ionicons/png/512/android-promotion.png | Bin .../Ionicons/png/512/android-reminder.png | Bin .../Ionicons/png/512/android-remove.png | Bin .../Ionicons/png/512/android-search.png | Bin .../Ionicons/png/512/android-send.png | Bin .../Ionicons/png/512/android-settings.png | Bin .../Ionicons/png/512/android-share.png | Bin .../Ionicons/png/512/android-social-user.png | Bin .../Ionicons/png/512/android-social.png | Bin .../Ionicons/png/512/android-sort.png | Bin .../Ionicons/png/512/android-stair-drawer.png | Bin .../Ionicons/png/512/android-star.png | Bin .../Ionicons/png/512/android-stopwatch.png | Bin .../Ionicons/png/512/android-storage.png | Bin .../Ionicons/png/512/android-system-back.png | Bin .../Ionicons/png/512/android-system-home.png | Bin .../png/512/android-system-windows.png | Bin .../Ionicons/png/512/android-timer.png | Bin .../Ionicons/png/512/android-trash.png | Bin .../Ionicons/png/512/android-user-menu.png | Bin .../Ionicons/png/512/android-volume.png | Bin .../Ionicons/png/512/android-wifi.png | Bin .../Ionicons/png/512/aperture.png | Bin .../Ionicons/png/512/archive.png | Bin .../Ionicons/png/512/arrow-down-a.png | Bin .../Ionicons/png/512/arrow-down-b.png | Bin .../Ionicons/png/512/arrow-down-c.png | Bin .../Ionicons/png/512/arrow-expand.png | Bin .../png/512/arrow-graph-down-left.png | Bin .../png/512/arrow-graph-down-right.png | Bin .../Ionicons/png/512/arrow-graph-up-left.png | Bin .../Ionicons/png/512/arrow-graph-up-right.png | Bin .../Ionicons/png/512/arrow-left-a.png | Bin .../Ionicons/png/512/arrow-left-b.png | Bin .../Ionicons/png/512/arrow-left-c.png | Bin .../Ionicons/png/512/arrow-move.png | Bin .../Ionicons/png/512/arrow-resize.png | Bin .../Ionicons/png/512/arrow-return-left.png | Bin .../Ionicons/png/512/arrow-return-right.png | Bin .../Ionicons/png/512/arrow-right-a.png | Bin .../Ionicons/png/512/arrow-right-b.png | Bin .../Ionicons/png/512/arrow-right-c.png | Bin .../Ionicons/png/512/arrow-shrink.png | Bin .../Ionicons/png/512/arrow-swap.png | Bin .../Ionicons/png/512/arrow-up-a.png | Bin .../Ionicons/png/512/arrow-up-b.png | Bin .../Ionicons/png/512/arrow-up-c.png | Bin .../Ionicons/png/512/asterisk.png | Bin .../bower_components/Ionicons/png/512/at.png | Bin .../bower_components/Ionicons/png/512/bag.png | Bin .../Ionicons/png/512/battery-charging.png | Bin .../Ionicons/png/512/battery-empty.png | Bin .../Ionicons/png/512/battery-full.png | Bin .../Ionicons/png/512/battery-half.png | Bin .../Ionicons/png/512/battery-low.png | Bin .../Ionicons/png/512/beaker.png | Bin .../Ionicons/png/512/beer.png | Bin .../Ionicons/png/512/bluetooth.png | Bin .../Ionicons/png/512/bonfire.png | Bin .../Ionicons/png/512/bookmark.png | Bin .../Ionicons/png/512/briefcase.png | Bin .../bower_components/Ionicons/png/512/bug.png | Bin .../Ionicons/png/512/calculator.png | Bin .../Ionicons/png/512/calendar.png | Bin .../Ionicons/png/512/camera.png | Bin .../Ionicons/png/512/card.png | Bin .../Ionicons/png/512/cash.png | Bin .../Ionicons/png/512/chatbox-working.png | Bin .../Ionicons/png/512/chatbox.png | Bin .../Ionicons/png/512/chatboxes.png | Bin .../Ionicons/png/512/chatbubble-working.png | Bin .../Ionicons/png/512/chatbubble.png | Bin .../Ionicons/png/512/chatbubbles.png | Bin .../Ionicons/png/512/checkmark-circled.png | Bin .../Ionicons/png/512/checkmark-round.png | Bin .../Ionicons/png/512/checkmark.png | Bin .../Ionicons/png/512/chevron-down.png | Bin .../Ionicons/png/512/chevron-left.png | Bin .../Ionicons/png/512/chevron-right.png | Bin .../Ionicons/png/512/chevron-up.png | Bin .../Ionicons/png/512/clipboard.png | Bin .../Ionicons/png/512/clock.png | Bin .../Ionicons/png/512/close-circled.png | Bin .../Ionicons/png/512/close-round.png | Bin .../Ionicons/png/512/close.png | Bin .../Ionicons/png/512/closed-captioning.png | Bin .../Ionicons/png/512/cloud.png | Bin .../Ionicons/png/512/code-download.png | Bin .../Ionicons/png/512/code-working.png | Bin .../Ionicons/png/512/code.png | Bin .../Ionicons/png/512/coffee.png | Bin .../Ionicons/png/512/compass.png | Bin .../Ionicons/png/512/compose.png | Bin .../Ionicons/png/512/connection-bars.png | Bin .../Ionicons/png/512/contrast.png | Bin .../Ionicons/png/512/cube.png | Bin .../Ionicons/png/512/disc.png | Bin .../Ionicons/png/512/document-text.png | Bin .../Ionicons/png/512/document.png | Bin .../Ionicons/png/512/drag.png | Bin .../Ionicons/png/512/earth.png | Bin .../Ionicons/png/512/edit.png | Bin .../bower_components/Ionicons/png/512/egg.png | Bin .../Ionicons/png/512/eject.png | Bin .../Ionicons/png/512/email.png | Bin .../Ionicons/png/512/eye-disabled.png | Bin .../bower_components/Ionicons/png/512/eye.png | Bin .../Ionicons/png/512/female.png | Bin .../Ionicons/png/512/filing.png | Bin .../Ionicons/png/512/film-marker.png | Bin .../Ionicons/png/512/fireball.png | Bin .../Ionicons/png/512/flag.png | Bin .../Ionicons/png/512/flame.png | Bin .../Ionicons/png/512/flash-off.png | Bin .../Ionicons/png/512/flash.png | Bin .../Ionicons/png/512/flask.png | Bin .../Ionicons/png/512/folder.png | Bin .../Ionicons/png/512/fork-repo.png | Bin .../Ionicons/png/512/fork.png | Bin .../Ionicons/png/512/forward.png | Bin .../Ionicons/png/512/funnel.png | Bin .../Ionicons/png/512/game-controller-a.png | Bin .../Ionicons/png/512/game-controller-b.png | Bin .../Ionicons/png/512/gear-a.png | Bin .../Ionicons/png/512/gear-b.png | Bin .../Ionicons/png/512/grid.png | Bin .../Ionicons/png/512/hammer.png | Bin .../Ionicons/png/512/happy.png | Bin .../Ionicons/png/512/headphone.png | Bin .../Ionicons/png/512/heart-broken.png | Bin .../Ionicons/png/512/heart.png | Bin .../Ionicons/png/512/help-buoy.png | Bin .../Ionicons/png/512/help-circled.png | Bin .../Ionicons/png/512/help.png | Bin .../Ionicons/png/512/home.png | Bin .../Ionicons/png/512/icecream.png | Bin .../512/icon-social-google-plus-outline.png | Bin .../png/512/icon-social-google-plus.png | Bin .../Ionicons/png/512/image.png | Bin .../Ionicons/png/512/images.png | Bin .../Ionicons/png/512/information-circled.png | Bin .../Ionicons/png/512/information.png | Bin .../Ionicons/png/512/ionic.png | Bin .../Ionicons/png/512/ios7-alarm-outline.png | Bin .../Ionicons/png/512/ios7-alarm.png | Bin .../Ionicons/png/512/ios7-albums-outline.png | Bin .../Ionicons/png/512/ios7-albums.png | Bin .../png/512/ios7-americanfootball-outline.png | Bin .../png/512/ios7-americanfootball.png | Bin .../png/512/ios7-analytics-outline.png | Bin .../Ionicons/png/512/ios7-analytics.png | Bin .../Ionicons/png/512/ios7-arrow-back.png | Bin .../Ionicons/png/512/ios7-arrow-down.png | Bin .../Ionicons/png/512/ios7-arrow-forward.png | Bin .../Ionicons/png/512/ios7-arrow-left.png | Bin .../Ionicons/png/512/ios7-arrow-right.png | Bin .../Ionicons/png/512/ios7-arrow-thin-down.png | Bin .../Ionicons/png/512/ios7-arrow-thin-left.png | Bin .../png/512/ios7-arrow-thin-right.png | Bin .../Ionicons/png/512/ios7-arrow-thin-up.png | Bin .../Ionicons/png/512/ios7-arrow-up.png | Bin .../Ionicons/png/512/ios7-at-outline.png | Bin .../Ionicons/png/512/ios7-at.png | Bin .../Ionicons/png/512/ios7-barcode-outline.png | Bin .../Ionicons/png/512/ios7-barcode.png | Bin .../png/512/ios7-baseball-outline.png | Bin .../Ionicons/png/512/ios7-baseball.png | Bin .../png/512/ios7-basketball-outline.png | Bin .../Ionicons/png/512/ios7-basketball.png | Bin .../Ionicons/png/512/ios7-bell-outline.png | Bin .../Ionicons/png/512/ios7-bell.png | Bin .../Ionicons/png/512/ios7-bolt-outline.png | Bin .../Ionicons/png/512/ios7-bolt.png | Bin .../png/512/ios7-bookmarks-outline.png | Bin .../Ionicons/png/512/ios7-bookmarks.png | Bin .../Ionicons/png/512/ios7-box-outline.png | Bin .../Ionicons/png/512/ios7-box.png | Bin .../png/512/ios7-briefcase-outline.png | Bin .../Ionicons/png/512/ios7-briefcase.png | Bin .../png/512/ios7-browsers-outline.png | Bin .../Ionicons/png/512/ios7-browsers.png | Bin .../png/512/ios7-calculator-outline.png | Bin .../Ionicons/png/512/ios7-calculator.png | Bin .../png/512/ios7-calendar-outline.png | Bin .../Ionicons/png/512/ios7-calendar.png | Bin .../Ionicons/png/512/ios7-camera-outline.png | Bin .../Ionicons/png/512/ios7-camera.png | Bin .../Ionicons/png/512/ios7-cart-outline.png | Bin .../Ionicons/png/512/ios7-cart.png | Bin .../png/512/ios7-chatboxes-outline.png | Bin .../Ionicons/png/512/ios7-chatboxes.png | Bin .../png/512/ios7-chatbubble-outline.png | Bin .../Ionicons/png/512/ios7-chatbubble.png | Bin .../Ionicons/png/512/ios7-checkmark-empty.png | Bin .../png/512/ios7-checkmark-outline.png | Bin .../Ionicons/png/512/ios7-checkmark.png | Bin .../Ionicons/png/512/ios7-circle-filled.png | Bin .../Ionicons/png/512/ios7-circle-outline.png | Bin .../Ionicons/png/512/ios7-clock-outline.png | Bin .../Ionicons/png/512/ios7-clock.png | Bin .../Ionicons/png/512/ios7-close-empty.png | Bin .../Ionicons/png/512/ios7-close-outline.png | Bin .../Ionicons/png/512/ios7-close.png | Bin .../png/512/ios7-cloud-download-outline.png | Bin .../Ionicons/png/512/ios7-cloud-download.png | Bin .../Ionicons/png/512/ios7-cloud-outline.png | Bin .../png/512/ios7-cloud-upload-outline.png | Bin .../Ionicons/png/512/ios7-cloud-upload.png | Bin .../Ionicons/png/512/ios7-cloud.png | Bin .../png/512/ios7-cloudy-night-outline.png | Bin .../Ionicons/png/512/ios7-cloudy-night.png | Bin .../Ionicons/png/512/ios7-cloudy-outline.png | Bin .../Ionicons/png/512/ios7-cloudy.png | Bin .../Ionicons/png/512/ios7-cog-outline.png | Bin .../Ionicons/png/512/ios7-cog.png | Bin .../Ionicons/png/512/ios7-compose-outline.png | Bin .../Ionicons/png/512/ios7-compose.png | Bin .../Ionicons/png/512/ios7-contact-outline.png | Bin .../Ionicons/png/512/ios7-contact.png | Bin .../Ionicons/png/512/ios7-copy-outline.png | Bin .../Ionicons/png/512/ios7-copy.png | Bin .../png/512/ios7-download-outline.png | Bin .../Ionicons/png/512/ios7-download.png | Bin .../Ionicons/png/512/ios7-drag.png | Bin .../Ionicons/png/512/ios7-email-outline.png | Bin .../Ionicons/png/512/ios7-email.png | Bin .../Ionicons/png/512/ios7-expand.png | Bin .../Ionicons/png/512/ios7-eye-outline.png | Bin .../Ionicons/png/512/ios7-eye.png | Bin .../png/512/ios7-fastforward-outline.png | Bin .../Ionicons/png/512/ios7-fastforward.png | Bin .../Ionicons/png/512/ios7-filing-outline.png | Bin .../Ionicons/png/512/ios7-filing.png | Bin .../Ionicons/png/512/ios7-film-outline.png | Bin .../Ionicons/png/512/ios7-film.png | Bin .../Ionicons/png/512/ios7-flag-outline.png | Bin .../Ionicons/png/512/ios7-flag.png | Bin .../Ionicons/png/512/ios7-folder-outline.png | Bin .../Ionicons/png/512/ios7-folder.png | Bin .../png/512/ios7-football-outline.png | Bin .../Ionicons/png/512/ios7-football.png | Bin .../Ionicons/png/512/ios7-gear-outline.png | Bin .../Ionicons/png/512/ios7-gear.png | Bin .../Ionicons/png/512/ios7-glasses-outline.png | Bin .../Ionicons/png/512/ios7-glasses.png | Bin .../Ionicons/png/512/ios7-heart-outline.png | Bin .../Ionicons/png/512/ios7-heart.png | Bin .../Ionicons/png/512/ios7-help-empty.png | Bin .../Ionicons/png/512/ios7-help-outline.png | Bin .../Ionicons/png/512/ios7-help.png | Bin .../Ionicons/png/512/ios7-home-outline.png | Bin .../Ionicons/png/512/ios7-home.png | Bin .../png/512/ios7-infinite-outline.png | Bin .../Ionicons/png/512/ios7-infinite.png | Bin .../png/512/ios7-information-empty.png | Bin .../png/512/ios7-information-outline.png | Bin .../Ionicons/png/512/ios7-information.png | Bin .../Ionicons/png/512/ios7-ionic-outline.png | Bin .../Ionicons/png/512/ios7-keypad-outline.png | Bin .../Ionicons/png/512/ios7-keypad.png | Bin .../png/512/ios7-lightbulb-outline.png | Bin .../Ionicons/png/512/ios7-lightbulb.png | Bin .../png/512/ios7-location-outline.png | Bin .../Ionicons/png/512/ios7-location.png | Bin .../Ionicons/png/512/ios7-locked-outline.png | Bin .../Ionicons/png/512/ios7-locked.png | Bin .../Ionicons/png/512/ios7-loop-strong.png | Bin .../Ionicons/png/512/ios7-loop.png | Bin .../Ionicons/png/512/ios7-medkit-outline.png | Bin .../Ionicons/png/512/ios7-medkit.png | Bin .../Ionicons/png/512/ios7-mic-off.png | Bin .../Ionicons/png/512/ios7-mic-outline.png | Bin .../Ionicons/png/512/ios7-mic.png | Bin .../Ionicons/png/512/ios7-minus-empty.png | Bin .../Ionicons/png/512/ios7-minus-outline.png | Bin .../Ionicons/png/512/ios7-minus.png | Bin .../Ionicons/png/512/ios7-monitor-outline.png | Bin .../Ionicons/png/512/ios7-monitor.png | Bin .../Ionicons/png/512/ios7-moon-outline.png | Bin .../Ionicons/png/512/ios7-moon.png | Bin .../Ionicons/png/512/ios7-more-outline.png | Bin .../Ionicons/png/512/ios7-more.png | Bin .../Ionicons/png/512/ios7-musical-note.png | Bin .../Ionicons/png/512/ios7-musical-notes.png | Bin .../png/512/ios7-navigate-outline.png | Bin .../Ionicons/png/512/ios7-navigate.png | Bin .../Ionicons/png/512/ios7-paper-outline.png | Bin .../Ionicons/png/512/ios7-paper.png | Bin .../png/512/ios7-paperplane-outline.png | Bin .../Ionicons/png/512/ios7-paperplane.png | Bin .../png/512/ios7-partlysunny-outline.png | Bin .../Ionicons/png/512/ios7-partlysunny.png | Bin .../Ionicons/png/512/ios7-pause-outline.png | Bin .../Ionicons/png/512/ios7-pause.png | Bin .../Ionicons/png/512/ios7-paw-outline.png | Bin .../Ionicons/png/512/ios7-paw.png | Bin .../Ionicons/png/512/ios7-people-outline.png | Bin .../Ionicons/png/512/ios7-people.png | Bin .../Ionicons/png/512/ios7-person-outline.png | Bin .../Ionicons/png/512/ios7-person.png | Bin .../png/512/ios7-personadd-outline.png | Bin .../Ionicons/png/512/ios7-personadd.png | Bin .../Ionicons/png/512/ios7-photos-outline.png | Bin .../Ionicons/png/512/ios7-photos.png | Bin .../Ionicons/png/512/ios7-pie-outline.png | Bin .../Ionicons/png/512/ios7-pie.png | Bin .../Ionicons/png/512/ios7-play-outline.png | Bin .../Ionicons/png/512/ios7-play.png | Bin .../Ionicons/png/512/ios7-plus-empty.png | Bin .../Ionicons/png/512/ios7-plus-outline.png | Bin .../Ionicons/png/512/ios7-plus.png | Bin .../png/512/ios7-pricetag-outline.png | Bin .../Ionicons/png/512/ios7-pricetag.png | Bin .../png/512/ios7-pricetags-outline.png | Bin .../Ionicons/png/512/ios7-pricetags.png | Bin .../Ionicons/png/512/ios7-printer-outline.png | Bin .../Ionicons/png/512/ios7-printer.png | Bin .../Ionicons/png/512/ios7-pulse-strong.png | Bin .../Ionicons/png/512/ios7-pulse.png | Bin .../Ionicons/png/512/ios7-rainy-outline.png | Bin .../Ionicons/png/512/ios7-rainy.png | Bin .../png/512/ios7-recording-outline.png | Bin .../Ionicons/png/512/ios7-recording.png | Bin .../Ionicons/png/512/ios7-redo-outline.png | Bin .../Ionicons/png/512/ios7-redo.png | Bin .../Ionicons/png/512/ios7-refresh-empty.png | Bin .../Ionicons/png/512/ios7-refresh-outline.png | Bin .../Ionicons/png/512/ios7-refresh.png | Bin .../Ionicons/png/512/ios7-reload.png | Bin .../png/512/ios7-reverse-camera-outline.png | Bin .../Ionicons/png/512/ios7-reverse-camera.png | Bin .../Ionicons/png/512/ios7-rewind-outline.png | Bin .../Ionicons/png/512/ios7-rewind.png | Bin .../Ionicons/png/512/ios7-search-strong.png | Bin .../Ionicons/png/512/ios7-search.png | Bin .../Ionicons/png/512/ios7-settings-strong.png | Bin .../Ionicons/png/512/ios7-settings.png | Bin .../Ionicons/png/512/ios7-shrink.png | Bin .../png/512/ios7-skipbackward-outline.png | Bin .../Ionicons/png/512/ios7-skipbackward.png | Bin .../png/512/ios7-skipforward-outline.png | Bin .../Ionicons/png/512/ios7-skipforward.png | Bin .../Ionicons/png/512/ios7-snowy.png | Bin .../png/512/ios7-speedometer-outline.png | Bin .../Ionicons/png/512/ios7-speedometer.png | Bin .../Ionicons/png/512/ios7-star-half.png | Bin .../Ionicons/png/512/ios7-star-outline.png | Bin .../Ionicons/png/512/ios7-star.png | Bin .../png/512/ios7-stopwatch-outline.png | Bin .../Ionicons/png/512/ios7-stopwatch.png | Bin .../Ionicons/png/512/ios7-sunny-outline.png | Bin .../Ionicons/png/512/ios7-sunny.png | Bin .../png/512/ios7-telephone-outline.png | Bin .../Ionicons/png/512/ios7-telephone.png | Bin .../png/512/ios7-tennisball-outline.png | Bin .../Ionicons/png/512/ios7-tennisball.png | Bin .../png/512/ios7-thunderstorm-outline.png | Bin .../Ionicons/png/512/ios7-thunderstorm.png | Bin .../Ionicons/png/512/ios7-time-outline.png | Bin .../Ionicons/png/512/ios7-time.png | Bin .../Ionicons/png/512/ios7-timer-outline.png | Bin .../Ionicons/png/512/ios7-timer.png | Bin .../Ionicons/png/512/ios7-toggle-outline.png | Bin .../Ionicons/png/512/ios7-toggle.png | Bin .../Ionicons/png/512/ios7-trash-outline.png | Bin .../Ionicons/png/512/ios7-trash.png | Bin .../Ionicons/png/512/ios7-undo-outline.png | Bin .../Ionicons/png/512/ios7-undo.png | Bin .../png/512/ios7-unlocked-outline.png | Bin .../Ionicons/png/512/ios7-unlocked.png | Bin .../Ionicons/png/512/ios7-upload-outline.png | Bin .../Ionicons/png/512/ios7-upload.png | Bin .../png/512/ios7-videocam-outline.png | Bin .../Ionicons/png/512/ios7-videocam.png | Bin .../Ionicons/png/512/ios7-volume-high.png | Bin .../Ionicons/png/512/ios7-volume-low.png | Bin .../png/512/ios7-wineglass-outline.png | Bin .../Ionicons/png/512/ios7-wineglass.png | Bin .../Ionicons/png/512/ios7-world-outline.png | Bin .../Ionicons/png/512/ios7-world.png | Bin .../Ionicons/png/512/ipad.png | Bin .../Ionicons/png/512/iphone.png | Bin .../Ionicons/png/512/ipod.png | Bin .../bower_components/Ionicons/png/512/jet.png | Bin .../bower_components/Ionicons/png/512/key.png | Bin .../Ionicons/png/512/knife.png | Bin .../Ionicons/png/512/laptop.png | Bin .../Ionicons/png/512/leaf.png | Bin .../Ionicons/png/512/levels.png | Bin .../Ionicons/png/512/lightbulb.png | Bin .../Ionicons/png/512/link.png | Bin .../Ionicons/png/512/load-a.png | Bin .../Ionicons/png/512/load-b.png | Bin .../Ionicons/png/512/load-c.png | Bin .../Ionicons/png/512/load-d.png | Bin .../Ionicons/png/512/location.png | Bin .../Ionicons/png/512/locked.png | Bin .../Ionicons/png/512/log-in.png | Bin .../Ionicons/png/512/log-out.png | Bin .../Ionicons/png/512/loop.png | Bin .../Ionicons/png/512/magnet.png | Bin .../Ionicons/png/512/male.png | Bin .../bower_components/Ionicons/png/512/man.png | Bin .../bower_components/Ionicons/png/512/map.png | Bin .../Ionicons/png/512/medkit.png | Bin .../Ionicons/png/512/merge.png | Bin .../Ionicons/png/512/mic-a.png | Bin .../Ionicons/png/512/mic-b.png | Bin .../Ionicons/png/512/mic-c.png | Bin .../Ionicons/png/512/minus-circled.png | Bin .../Ionicons/png/512/minus-round.png | Bin .../Ionicons/png/512/minus.png | Bin .../Ionicons/png/512/model-s.png | Bin .../Ionicons/png/512/monitor.png | Bin .../Ionicons/png/512/more.png | Bin .../Ionicons/png/512/mouse.png | Bin .../Ionicons/png/512/music-note.png | Bin .../Ionicons/png/512/navicon-round.png | Bin .../Ionicons/png/512/navicon.png | Bin .../Ionicons/png/512/navigate.png | Bin .../Ionicons/png/512/network.png | Bin .../Ionicons/png/512/no-smoking.png | Bin .../Ionicons/png/512/nuclear.png | Bin .../Ionicons/png/512/outlet.png | Bin .../Ionicons/png/512/paper-airplane.png | Bin .../Ionicons/png/512/paperclip.png | Bin .../Ionicons/png/512/pause.png | Bin .../Ionicons/png/512/person-add.png | Bin .../Ionicons/png/512/person-stalker.png | Bin .../Ionicons/png/512/person.png | Bin .../Ionicons/png/512/pie-graph.png | Bin .../bower_components/Ionicons/png/512/pin.png | Bin .../Ionicons/png/512/pinpoint.png | Bin .../Ionicons/png/512/pizza.png | Bin .../Ionicons/png/512/plane.png | Bin .../Ionicons/png/512/planet.png | Bin .../Ionicons/png/512/play.png | Bin .../Ionicons/png/512/playstation.png | Bin .../Ionicons/png/512/plus-circled.png | Bin .../Ionicons/png/512/plus-round.png | Bin .../Ionicons/png/512/plus.png | Bin .../Ionicons/png/512/podium.png | Bin .../Ionicons/png/512/pound.png | Bin .../Ionicons/png/512/power.png | Bin .../Ionicons/png/512/pricetag.png | Bin .../Ionicons/png/512/pricetags.png | Bin .../Ionicons/png/512/printer.png | Bin .../Ionicons/png/512/pull-request.png | Bin .../Ionicons/png/512/qr-scanner.png | Bin .../Ionicons/png/512/quote.png | Bin .../Ionicons/png/512/radio-waves.png | Bin .../Ionicons/png/512/record.png | Bin .../Ionicons/png/512/refresh.png | Bin .../Ionicons/png/512/reply-all.png | Bin .../Ionicons/png/512/reply.png | Bin .../Ionicons/png/512/ribbon-a.png | Bin .../Ionicons/png/512/ribbon-b.png | Bin .../bower_components/Ionicons/png/512/sad.png | Bin .../Ionicons/png/512/scissors.png | Bin .../Ionicons/png/512/search.png | Bin .../Ionicons/png/512/settings.png | Bin .../Ionicons/png/512/share.png | Bin .../Ionicons/png/512/shuffle.png | Bin .../Ionicons/png/512/skip-backward.png | Bin .../Ionicons/png/512/skip-forward.png | Bin .../png/512/social-android-outline.png | Bin .../Ionicons/png/512/social-android.png | Bin .../Ionicons/png/512/social-apple-outline.png | Bin .../Ionicons/png/512/social-apple.png | Bin .../png/512/social-bitcoin-outline.png | Bin .../Ionicons/png/512/social-bitcoin.png | Bin .../png/512/social-buffer-outline.png | Bin .../Ionicons/png/512/social-buffer.png | Bin .../png/512/social-designernews-outline.png | Bin .../Ionicons/png/512/social-designernews.png | Bin .../png/512/social-dribbble-outline.png | Bin .../Ionicons/png/512/social-dribbble.png | Bin .../png/512/social-dropbox-outline.png | Bin .../Ionicons/png/512/social-dropbox.png | Bin .../png/512/social-facebook-outline.png | Bin .../Ionicons/png/512/social-facebook.png | Bin .../png/512/social-foursquare-outline.png | Bin .../Ionicons/png/512/social-foursquare.png | Bin .../Ionicons/png/512/social-freebsd-devil.png | Bin .../png/512/social-github-outline.png | Bin .../Ionicons/png/512/social-github.png | Bin .../png/512/social-google-outline.png | Bin .../Ionicons/png/512/social-google.png | Bin .../png/512/social-googleplus-outline.png | Bin .../Ionicons/png/512/social-googleplus.png | Bin .../png/512/social-hackernews-outline.png | Bin .../Ionicons/png/512/social-hackernews.png | Bin .../png/512/social-instagram-outline.png | Bin .../Ionicons/png/512/social-instagram.png | Bin .../png/512/social-linkedin-outline.png | Bin .../Ionicons/png/512/social-linkedin.png | Bin .../png/512/social-pinterest-outline.png | Bin .../Ionicons/png/512/social-pinterest.png | Bin .../png/512/social-reddit-outline.png | Bin .../Ionicons/png/512/social-reddit.png | Bin .../Ionicons/png/512/social-rss-outline.png | Bin .../Ionicons/png/512/social-rss.png | Bin .../Ionicons/png/512/social-skype-outline.png | Bin .../Ionicons/png/512/social-skype.png | Bin .../png/512/social-tumblr-outline.png | Bin .../Ionicons/png/512/social-tumblr.png | Bin .../Ionicons/png/512/social-tux.png | Bin .../png/512/social-twitter-outline.png | Bin .../Ionicons/png/512/social-twitter.png | Bin .../Ionicons/png/512/social-usd-outline.png | Bin .../Ionicons/png/512/social-usd.png | Bin .../Ionicons/png/512/social-vimeo-outline.png | Bin .../Ionicons/png/512/social-vimeo.png | Bin .../png/512/social-windows-outline.png | Bin .../Ionicons/png/512/social-windows.png | Bin .../png/512/social-wordpress-outline.png | Bin .../Ionicons/png/512/social-wordpress.png | Bin .../Ionicons/png/512/social-yahoo-outline.png | Bin .../Ionicons/png/512/social-yahoo.png | Bin .../png/512/social-youtube-outline.png | Bin .../Ionicons/png/512/social-youtube.png | Bin .../Ionicons/png/512/speakerphone.png | Bin .../Ionicons/png/512/speedometer.png | Bin .../Ionicons/png/512/spoon.png | Bin .../Ionicons/png/512/star.png | Bin .../Ionicons/png/512/stats-bars.png | Bin .../Ionicons/png/512/steam.png | Bin .../Ionicons/png/512/stop.png | Bin .../Ionicons/png/512/thermometer.png | Bin .../Ionicons/png/512/thumbsdown.png | Bin .../Ionicons/png/512/thumbsup.png | Bin .../Ionicons/png/512/toggle-filled.png | Bin .../Ionicons/png/512/toggle.png | Bin .../Ionicons/png/512/trash-a.png | Bin .../Ionicons/png/512/trash-b.png | Bin .../Ionicons/png/512/trophy.png | Bin .../Ionicons/png/512/umbrella.png | Bin .../Ionicons/png/512/university.png | Bin .../Ionicons/png/512/unlocked.png | Bin .../Ionicons/png/512/upload.png | Bin .../bower_components/Ionicons/png/512/usb.png | Bin .../Ionicons/png/512/videocamera.png | Bin .../Ionicons/png/512/volume-high.png | Bin .../Ionicons/png/512/volume-low.png | Bin .../Ionicons/png/512/volume-medium.png | Bin .../Ionicons/png/512/volume-mute.png | Bin .../Ionicons/png/512/wand.png | Bin .../Ionicons/png/512/waterdrop.png | Bin .../Ionicons/png/512/wifi.png | Bin .../Ionicons/png/512/wineglass.png | Bin .../Ionicons/png/512/woman.png | Bin .../Ionicons/png/512/wrench.png | Bin .../Ionicons/png/512/xbox.png | Bin .../bower_components/Ionicons/readme.md | 0 .../Ionicons/scss/_ionicons-font.scss | 0 .../Ionicons/scss/_ionicons-icons.scss | 0 .../Ionicons/scss/_ionicons-variables.scss | 0 .../Ionicons/scss/ionicons.scss | 0 .../Ionicons/src/alert-circled.svg | 0 .../bower_components/Ionicons/src/alert.svg | 0 .../Ionicons/src/android-add-circle.svg | 0 .../Ionicons/src/android-add.svg | 0 .../Ionicons/src/android-alarm-clock.svg | 0 .../Ionicons/src/android-alert.svg | 0 .../Ionicons/src/android-apps.svg | 0 .../Ionicons/src/android-archive.svg | 0 .../Ionicons/src/android-arrow-back.svg | 0 .../Ionicons/src/android-arrow-down.svg | 0 .../src/android-arrow-dropdown-circle.svg | 0 .../Ionicons/src/android-arrow-dropdown.svg | 0 .../src/android-arrow-dropleft-circle.svg | 0 .../Ionicons/src/android-arrow-dropleft.svg | 0 .../src/android-arrow-dropright-circle.svg | 0 .../Ionicons/src/android-arrow-dropright.svg | 0 .../src/android-arrow-dropup-circle.svg | 0 .../Ionicons/src/android-arrow-dropup.svg | 0 .../Ionicons/src/android-arrow-forward.svg | 0 .../Ionicons/src/android-arrow-up.svg | 0 .../Ionicons/src/android-attach.svg | 0 .../Ionicons/src/android-bar.svg | 0 .../Ionicons/src/android-bicycle.svg | 0 .../Ionicons/src/android-boat.svg | 0 .../Ionicons/src/android-bookmark.svg | 0 .../Ionicons/src/android-bulb.svg | 0 .../Ionicons/src/android-bus.svg | 0 .../Ionicons/src/android-calendar.svg | 0 .../Ionicons/src/android-call.svg | 0 .../Ionicons/src/android-camera.svg | 0 .../Ionicons/src/android-cancel.svg | 0 .../Ionicons/src/android-car.svg | 0 .../Ionicons/src/android-cart.svg | 0 .../Ionicons/src/android-chat.svg | 0 .../Ionicons/src/android-checkbox-blank.svg | 0 .../src/android-checkbox-outline-blank.svg | 0 .../Ionicons/src/android-checkbox-outline.svg | 0 .../Ionicons/src/android-checkbox.svg | 0 .../Ionicons/src/android-checkmark-circle.svg | 0 .../Ionicons/src/android-clipboard.svg | 0 .../Ionicons/src/android-close.svg | 0 .../Ionicons/src/android-cloud-circle.svg | 0 .../Ionicons/src/android-cloud-done.svg | 0 .../Ionicons/src/android-cloud-outline.svg | 0 .../Ionicons/src/android-cloud.svg | 0 .../Ionicons/src/android-color-palette.svg | 0 .../Ionicons/src/android-compass.svg | 0 .../Ionicons/src/android-contact.svg | 0 .../Ionicons/src/android-contacts.svg | 0 .../Ionicons/src/android-contract.svg | 0 .../Ionicons/src/android-create.svg | 0 .../Ionicons/src/android-delete.svg | 0 .../Ionicons/src/android-desktop.svg | 0 .../Ionicons/src/android-document.svg | 0 .../Ionicons/src/android-done-all.svg | 0 .../Ionicons/src/android-done.svg | 0 .../Ionicons/src/android-download.svg | 0 .../Ionicons/src/android-drafts.svg | 0 .../Ionicons/src/android-exit.svg | 0 .../Ionicons/src/android-expand.svg | 0 .../Ionicons/src/android-favorite-outline.svg | 0 .../Ionicons/src/android-favorite.svg | 0 .../Ionicons/src/android-film.svg | 0 .../Ionicons/src/android-folder-open.svg | 0 .../Ionicons/src/android-folder.svg | 0 .../Ionicons/src/android-funnel.svg | 0 .../Ionicons/src/android-globe.svg | 0 .../Ionicons/src/android-hand.svg | 0 .../Ionicons/src/android-hangout.svg | 0 .../Ionicons/src/android-happy.svg | 0 .../Ionicons/src/android-home.svg | 0 .../Ionicons/src/android-image.svg | 0 .../Ionicons/src/android-laptop.svg | 0 .../Ionicons/src/android-list.svg | 0 .../Ionicons/src/android-locate.svg | 0 .../Ionicons/src/android-lock.svg | 0 .../Ionicons/src/android-mail.svg | 0 .../Ionicons/src/android-map.svg | 0 .../Ionicons/src/android-menu.svg | 0 .../Ionicons/src/android-microphone-off.svg | 0 .../Ionicons/src/android-microphone.svg | 0 .../Ionicons/src/android-more-horizontal.svg | 0 .../Ionicons/src/android-more-vertical.svg | 0 .../Ionicons/src/android-navigate.svg | 0 .../src/android-notifications-none.svg | 0 .../src/android-notifications-off.svg | 0 .../Ionicons/src/android-notifications.svg | 0 .../Ionicons/src/android-open.svg | 0 .../Ionicons/src/android-options.svg | 0 .../Ionicons/src/android-people.svg | 0 .../Ionicons/src/android-person-add.svg | 0 .../Ionicons/src/android-person.svg | 0 .../Ionicons/src/android-phone-landscape.svg | 0 .../Ionicons/src/android-phone-portrait.svg | 0 .../Ionicons/src/android-pin.svg | 0 .../Ionicons/src/android-plane.svg | 0 .../Ionicons/src/android-playstore.svg | 0 .../Ionicons/src/android-print.svg | 0 .../Ionicons/src/android-radio-button-off.svg | 0 .../Ionicons/src/android-radio-button-on.svg | 0 .../Ionicons/src/android-refresh.svg | 0 .../Ionicons/src/android-remove-circle.svg | 0 .../Ionicons/src/android-remove.svg | 0 .../Ionicons/src/android-restaurant.svg | 0 .../Ionicons/src/android-sad.svg | 0 .../Ionicons/src/android-search.svg | 0 .../Ionicons/src/android-send.svg | 0 .../Ionicons/src/android-settings.svg | 0 .../Ionicons/src/android-share-alt.svg | 0 .../Ionicons/src/android-share.svg | 0 .../Ionicons/src/android-star-half.svg | 0 .../Ionicons/src/android-star-outline.svg | 0 .../Ionicons/src/android-star.svg | 0 .../Ionicons/src/android-stopwatch.svg | 0 .../Ionicons/src/android-subway.svg | 0 .../Ionicons/src/android-sunny.svg | 0 .../Ionicons/src/android-sync.svg | 0 .../Ionicons/src/android-textsms.svg | 0 .../Ionicons/src/android-time.svg | 0 .../Ionicons/src/android-train.svg | 0 .../Ionicons/src/android-unlock.svg | 0 .../Ionicons/src/android-upload.svg | 0 .../Ionicons/src/android-volume-down.svg | 0 .../Ionicons/src/android-volume-mute.svg | 0 .../Ionicons/src/android-volume-off.svg | 0 .../Ionicons/src/android-volume-up.svg | 0 .../Ionicons/src/android-walk.svg | 0 .../Ionicons/src/android-warning.svg | 0 .../Ionicons/src/android-watch.svg | 0 .../Ionicons/src/android-wifi.svg | 0 .../Ionicons/src/aperture.svg | 0 .../bower_components/Ionicons/src/archive.svg | 0 .../Ionicons/src/arrow-down-a.svg | 0 .../Ionicons/src/arrow-down-b.svg | 0 .../Ionicons/src/arrow-down-c.svg | 0 .../Ionicons/src/arrow-expand.svg | 0 .../Ionicons/src/arrow-graph-down-left.svg | 0 .../Ionicons/src/arrow-graph-down-right.svg | 0 .../Ionicons/src/arrow-graph-up-left.svg | 0 .../Ionicons/src/arrow-graph-up-right.svg | 0 .../Ionicons/src/arrow-left-a.svg | 0 .../Ionicons/src/arrow-left-b.svg | 0 .../Ionicons/src/arrow-left-c.svg | 0 .../Ionicons/src/arrow-move.svg | 0 .../Ionicons/src/arrow-resize.svg | 0 .../Ionicons/src/arrow-return-left.svg | 0 .../Ionicons/src/arrow-return-right.svg | 0 .../Ionicons/src/arrow-right-a.svg | 0 .../Ionicons/src/arrow-right-b.svg | 0 .../Ionicons/src/arrow-right-c.svg | 0 .../Ionicons/src/arrow-shrink.svg | 0 .../Ionicons/src/arrow-swap.svg | 0 .../Ionicons/src/arrow-up-a.svg | 0 .../Ionicons/src/arrow-up-b.svg | 0 .../Ionicons/src/arrow-up-c.svg | 0 .../Ionicons/src/asterisk.svg | 0 .../bower_components/Ionicons/src/at.svg | 0 .../Ionicons/src/backspace-outline.svg | 0 .../Ionicons/src/backspace.svg | 0 .../bower_components/Ionicons/src/bag.svg | 0 .../Ionicons/src/battery-charging.svg | 0 .../Ionicons/src/battery-empty.svg | 0 .../Ionicons/src/battery-full.svg | 0 .../Ionicons/src/battery-half.svg | 0 .../Ionicons/src/battery-low.svg | 0 .../bower_components/Ionicons/src/beaker.svg | 0 .../bower_components/Ionicons/src/beer.svg | 0 .../Ionicons/src/bluetooth.svg | 0 .../bower_components/Ionicons/src/bonfire.svg | 0 .../Ionicons/src/bookmark.svg | 0 .../bower_components/Ionicons/src/bowtie.svg | 0 .../Ionicons/src/briefcase.svg | 0 .../bower_components/Ionicons/src/bug.svg | 0 .../Ionicons/src/calculator.svg | 0 .../Ionicons/src/calendar.svg | 0 .../bower_components/Ionicons/src/camera.svg | 0 .../bower_components/Ionicons/src/card.svg | 0 .../bower_components/Ionicons/src/cash.svg | 0 .../Ionicons/src/chatbox-working.svg | 0 .../bower_components/Ionicons/src/chatbox.svg | 0 .../Ionicons/src/chatboxes.svg | 0 .../Ionicons/src/chatbubble-working.svg | 0 .../Ionicons/src/chatbubble.svg | 0 .../Ionicons/src/chatbubbles.svg | 0 .../Ionicons/src/checkmark-circled.svg | 0 .../Ionicons/src/checkmark-round.svg | 0 .../Ionicons/src/checkmark.svg | 0 .../Ionicons/src/chevron-down.svg | 0 .../Ionicons/src/chevron-left.svg | 0 .../Ionicons/src/chevron-right.svg | 0 .../Ionicons/src/chevron-up.svg | 0 .../Ionicons/src/clipboard.svg | 0 .../bower_components/Ionicons/src/clock.svg | 0 .../Ionicons/src/close-circled.svg | 0 .../Ionicons/src/close-round.svg | 0 .../bower_components/Ionicons/src/close.svg | 0 .../Ionicons/src/closed-captioning.svg | 0 .../bower_components/Ionicons/src/cloud.svg | 0 .../Ionicons/src/code-download.svg | 0 .../Ionicons/src/code-working.svg | 0 .../bower_components/Ionicons/src/code.svg | 0 .../bower_components/Ionicons/src/coffee.svg | 0 .../bower_components/Ionicons/src/compass.svg | 0 .../bower_components/Ionicons/src/compose.svg | 0 .../Ionicons/src/connection-bars.svg | 0 .../Ionicons/src/contrast.svg | 0 .../bower_components/Ionicons/src/crop.svg | 0 .../bower_components/Ionicons/src/cube.svg | 0 .../bower_components/Ionicons/src/disc.svg | 0 .../Ionicons/src/document-text.svg | 0 .../Ionicons/src/document.svg | 0 .../bower_components/Ionicons/src/drag.svg | 0 .../bower_components/Ionicons/src/earth.svg | 0 .../bower_components/Ionicons/src/easel.svg | 0 .../bower_components/Ionicons/src/edit.svg | 0 .../bower_components/Ionicons/src/egg.svg | 0 .../bower_components/Ionicons/src/eject.svg | 0 .../Ionicons/src/email-unread.svg | 0 .../bower_components/Ionicons/src/email.svg | 0 .../Ionicons/src/erlenmeyer-flask-bubbles.svg | 0 .../Ionicons/src/erlenmeyer-flask.svg | 0 .../Ionicons/src/eye-disabled.svg | 0 .../bower_components/Ionicons/src/eye.svg | 0 .../bower_components/Ionicons/src/female.svg | 0 .../bower_components/Ionicons/src/filing.svg | 0 .../Ionicons/src/film-marker.svg | 0 .../Ionicons/src/fireball.svg | 0 .../bower_components/Ionicons/src/flag.svg | 0 .../bower_components/Ionicons/src/flame.svg | 0 .../Ionicons/src/flash-off.svg | 0 .../bower_components/Ionicons/src/flash.svg | 0 .../bower_components/Ionicons/src/folder.svg | 0 .../Ionicons/src/fork-repo.svg | 0 .../bower_components/Ionicons/src/fork.svg | 0 .../bower_components/Ionicons/src/forward.svg | 0 .../bower_components/Ionicons/src/funnel.svg | 0 .../bower_components/Ionicons/src/gear-a.svg | 0 .../bower_components/Ionicons/src/gear-b.svg | 0 .../bower_components/Ionicons/src/grid.svg | 0 .../bower_components/Ionicons/src/hammer.svg | 0 .../Ionicons/src/happy-outline.svg | 0 .../bower_components/Ionicons/src/happy.svg | 0 .../Ionicons/src/headphone.svg | 0 .../Ionicons/src/heart-broken.svg | 0 .../bower_components/Ionicons/src/heart.svg | 0 .../Ionicons/src/help-buoy.svg | 0 .../Ionicons/src/help-circled.svg | 0 .../bower_components/Ionicons/src/help.svg | 0 .../bower_components/Ionicons/src/home.svg | 0 .../Ionicons/src/icecream.svg | 0 .../bower_components/Ionicons/src/image.svg | 0 .../bower_components/Ionicons/src/images.svg | 0 .../Ionicons/src/information-circled.svg | 0 .../Ionicons/src/information.svg | 0 .../bower_components/Ionicons/src/ionic.svg | 0 .../Ionicons/src/ios-alarm-outline.svg | 0 .../Ionicons/src/ios-alarm.svg | 0 .../Ionicons/src/ios-albums-outline.svg | 0 .../Ionicons/src/ios-albums.svg | 0 .../src/ios-americanfootball-outline.svg | 0 .../Ionicons/src/ios-americanfootball.svg | 0 .../Ionicons/src/ios-analytics-outline.svg | 0 .../Ionicons/src/ios-analytics.svg | 0 .../Ionicons/src/ios-arrow-back.svg | 0 .../Ionicons/src/ios-arrow-down.svg | 0 .../Ionicons/src/ios-arrow-forward.svg | 0 .../Ionicons/src/ios-arrow-left.svg | 0 .../Ionicons/src/ios-arrow-right.svg | 0 .../Ionicons/src/ios-arrow-thin-down.svg | 0 .../Ionicons/src/ios-arrow-thin-left.svg | 0 .../Ionicons/src/ios-arrow-thin-right.svg | 0 .../Ionicons/src/ios-arrow-thin-up.svg | 0 .../Ionicons/src/ios-arrow-up.svg | 0 .../Ionicons/src/ios-at-outline.svg | 0 .../bower_components/Ionicons/src/ios-at.svg | 0 .../Ionicons/src/ios-barcode-outline.svg | 0 .../Ionicons/src/ios-barcode.svg | 0 .../Ionicons/src/ios-baseball-outline.svg | 0 .../Ionicons/src/ios-baseball.svg | 0 .../Ionicons/src/ios-basketball-outline.svg | 0 .../Ionicons/src/ios-basketball.svg | 0 .../Ionicons/src/ios-bell-outline.svg | 0 .../Ionicons/src/ios-bell.svg | 0 .../Ionicons/src/ios-body-outline.svg | 0 .../Ionicons/src/ios-body.svg | 0 .../Ionicons/src/ios-bolt-outline.svg | 0 .../Ionicons/src/ios-bolt.svg | 0 .../Ionicons/src/ios-book-outline.svg | 0 .../Ionicons/src/ios-book.svg | 0 .../Ionicons/src/ios-bookmarks-outline.svg | 0 .../Ionicons/src/ios-bookmarks.svg | 0 .../Ionicons/src/ios-box-outline.svg | 0 .../bower_components/Ionicons/src/ios-box.svg | 0 .../Ionicons/src/ios-briefcase-outline.svg | 0 .../Ionicons/src/ios-briefcase.svg | 0 .../Ionicons/src/ios-browsers-outline.svg | 0 .../Ionicons/src/ios-browsers.svg | 0 .../Ionicons/src/ios-calculator-outline.svg | 0 .../Ionicons/src/ios-calculator.svg | 0 .../Ionicons/src/ios-calendar-outline.svg | 0 .../Ionicons/src/ios-calendar.svg | 0 .../Ionicons/src/ios-camera-outline.svg | 0 .../Ionicons/src/ios-camera.svg | 0 .../Ionicons/src/ios-cart-outline.svg | 0 .../Ionicons/src/ios-cart.svg | 0 .../Ionicons/src/ios-chatboxes-outline.svg | 0 .../Ionicons/src/ios-chatboxes.svg | 0 .../Ionicons/src/ios-chatbubble-outline.svg | 0 .../Ionicons/src/ios-chatbubble.svg | 0 .../Ionicons/src/ios-checkmark-empty.svg | 0 .../Ionicons/src/ios-checkmark-outline.svg | 0 .../Ionicons/src/ios-checkmark.svg | 0 .../Ionicons/src/ios-circle-filled.svg | 0 .../Ionicons/src/ios-circle-outline.svg | 0 .../Ionicons/src/ios-clock-outline.svg | 0 .../Ionicons/src/ios-clock.svg | 0 .../Ionicons/src/ios-close-empty.svg | 0 .../Ionicons/src/ios-close-outline.svg | 0 .../Ionicons/src/ios-close.svg | 0 .../src/ios-cloud-download-outline.svg | 0 .../Ionicons/src/ios-cloud-download.svg | 0 .../Ionicons/src/ios-cloud-outline.svg | 0 .../Ionicons/src/ios-cloud-upload-outline.svg | 0 .../Ionicons/src/ios-cloud-upload.svg | 0 .../Ionicons/src/ios-cloud.svg | 0 .../Ionicons/src/ios-cloudy-night-outline.svg | 0 .../Ionicons/src/ios-cloudy-night.svg | 0 .../Ionicons/src/ios-cloudy-outline.svg | 0 .../Ionicons/src/ios-cloudy.svg | 0 .../Ionicons/src/ios-cog-outline.svg | 0 .../bower_components/Ionicons/src/ios-cog.svg | 0 .../Ionicons/src/ios-color-filter-outline.svg | 0 .../Ionicons/src/ios-color-filter.svg | 0 .../Ionicons/src/ios-color-wand-outline.svg | 0 .../Ionicons/src/ios-color-wand.svg | 0 .../Ionicons/src/ios-compose-outline.svg | 0 .../Ionicons/src/ios-compose.svg | 0 .../Ionicons/src/ios-contact-outline.svg | 0 .../Ionicons/src/ios-contact.svg | 0 .../Ionicons/src/ios-copy-outline.svg | 0 .../Ionicons/src/ios-copy.svg | 0 .../Ionicons/src/ios-crop-strong.svg | 0 .../Ionicons/src/ios-crop.svg | 0 .../Ionicons/src/ios-download-outline.svg | 0 .../Ionicons/src/ios-download.svg | 0 .../Ionicons/src/ios-drag.svg | 0 .../Ionicons/src/ios-email-outline.svg | 0 .../Ionicons/src/ios-email.svg | 0 .../Ionicons/src/ios-eye-outline.svg | 0 .../bower_components/Ionicons/src/ios-eye.svg | 0 .../Ionicons/src/ios-fastforward-outline.svg | 0 .../Ionicons/src/ios-fastforward.svg | 0 .../Ionicons/src/ios-filing-outline.svg | 0 .../Ionicons/src/ios-filing.svg | 0 .../Ionicons/src/ios-film-outline.svg | 0 .../Ionicons/src/ios-film.svg | 0 .../Ionicons/src/ios-flag-outline.svg | 0 .../Ionicons/src/ios-flag.svg | 0 .../Ionicons/src/ios-flame-outline.svg | 0 .../Ionicons/src/ios-flame.svg | 0 .../Ionicons/src/ios-flask-outline.svg | 0 .../Ionicons/src/ios-flask.svg | 0 .../Ionicons/src/ios-flower-outline.svg | 0 .../Ionicons/src/ios-flower.svg | 0 .../Ionicons/src/ios-folder-outline.svg | 0 .../Ionicons/src/ios-folder.svg | 0 .../Ionicons/src/ios-football-outline.svg | 0 .../Ionicons/src/ios-football.svg | 0 .../src/ios-game-controller-a-outline.svg | 0 .../Ionicons/src/ios-game-controller-a.svg | 0 .../src/ios-game-controller-b-outline.svg | 0 .../Ionicons/src/ios-game-controller-b.svg | 0 .../Ionicons/src/ios-gear-outline.svg | 0 .../Ionicons/src/ios-gear.svg | 0 .../Ionicons/src/ios-glasses-outline.svg | 0 .../Ionicons/src/ios-glasses.svg | 0 .../Ionicons/src/ios-grid-view-outline.svg | 0 .../Ionicons/src/ios-grid-view.svg | 0 .../Ionicons/src/ios-heart-outline.svg | 0 .../Ionicons/src/ios-heart.svg | 0 .../Ionicons/src/ios-help-empty.svg | 0 .../Ionicons/src/ios-help-outline.svg | 0 .../Ionicons/src/ios-help.svg | 0 .../Ionicons/src/ios-home-outline.svg | 0 .../Ionicons/src/ios-home.svg | 0 .../Ionicons/src/ios-infinite-outline.svg | 0 .../Ionicons/src/ios-infinite.svg | 0 .../Ionicons/src/ios-information-empty.svg | 0 .../Ionicons/src/ios-information-outline.svg | 0 .../Ionicons/src/ios-information.svg | 0 .../Ionicons/src/ios-ionic-outline.svg | 0 .../Ionicons/src/ios-keypad-outline.svg | 0 .../Ionicons/src/ios-keypad.svg | 0 .../Ionicons/src/ios-lightbulb-outline.svg | 0 .../Ionicons/src/ios-lightbulb.svg | 0 .../Ionicons/src/ios-list-outline.svg | 0 .../Ionicons/src/ios-list.svg | 0 .../Ionicons/src/ios-location-outline.svg | 0 .../Ionicons/src/ios-location.svg | 0 .../Ionicons/src/ios-locked-outline.svg | 0 .../Ionicons/src/ios-locked.svg | 0 .../Ionicons/src/ios-loop-strong.svg | 0 .../Ionicons/src/ios-loop.svg | 0 .../Ionicons/src/ios-medical-outline.svg | 0 .../Ionicons/src/ios-medical.svg | 0 .../Ionicons/src/ios-medkit-outline.svg | 0 .../Ionicons/src/ios-medkit.svg | 0 .../Ionicons/src/ios-mic-off.svg | 0 .../Ionicons/src/ios-mic-outline.svg | 0 .../bower_components/Ionicons/src/ios-mic.svg | 0 .../Ionicons/src/ios-minus-empty.svg | 0 .../Ionicons/src/ios-minus-outline.svg | 0 .../Ionicons/src/ios-minus.svg | 0 .../Ionicons/src/ios-monitor-outline.svg | 0 .../Ionicons/src/ios-monitor.svg | 0 .../Ionicons/src/ios-moon-outline.svg | 0 .../Ionicons/src/ios-moon.svg | 0 .../Ionicons/src/ios-more-outline.svg | 0 .../Ionicons/src/ios-more.svg | 0 .../Ionicons/src/ios-musical-note.svg | 0 .../Ionicons/src/ios-musical-notes.svg | 0 .../Ionicons/src/ios-navigate-outline.svg | 0 .../Ionicons/src/ios-navigate.svg | 0 .../Ionicons/src/ios-nutrition-outline.svg | 0 .../Ionicons/src/ios-nutrition.svg | 0 .../Ionicons/src/ios-paper-outline.svg | 0 .../Ionicons/src/ios-paper.svg | 0 .../Ionicons/src/ios-paperplane-outline.svg | 0 .../Ionicons/src/ios-paperplane.svg | 0 .../Ionicons/src/ios-partlysunny-outline.svg | 0 .../Ionicons/src/ios-partlysunny.svg | 0 .../Ionicons/src/ios-pause-outline.svg | 0 .../Ionicons/src/ios-pause.svg | 0 .../Ionicons/src/ios-paw-outline.svg | 0 .../bower_components/Ionicons/src/ios-paw.svg | 0 .../Ionicons/src/ios-people-outline.svg | 0 .../Ionicons/src/ios-people.svg | 0 .../Ionicons/src/ios-person-outline.svg | 0 .../Ionicons/src/ios-person.svg | 0 .../Ionicons/src/ios-personadd-outline.svg | 0 .../Ionicons/src/ios-personadd.svg | 0 .../Ionicons/src/ios-photos-outline.svg | 0 .../Ionicons/src/ios-photos.svg | 0 .../Ionicons/src/ios-pie-outline.svg | 0 .../bower_components/Ionicons/src/ios-pie.svg | 0 .../Ionicons/src/ios-pint-outline.svg | 0 .../Ionicons/src/ios-pint.svg | 0 .../Ionicons/src/ios-play-outline.svg | 0 .../Ionicons/src/ios-play.svg | 0 .../Ionicons/src/ios-plus-empty.svg | 0 .../Ionicons/src/ios-plus-outline.svg | 0 .../Ionicons/src/ios-plus.svg | 0 .../Ionicons/src/ios-pricetag-outline.svg | 0 .../Ionicons/src/ios-pricetag.svg | 0 .../Ionicons/src/ios-pricetags-outline.svg | 0 .../Ionicons/src/ios-pricetags.svg | 0 .../Ionicons/src/ios-printer-outline.svg | 0 .../Ionicons/src/ios-printer.svg | 0 .../Ionicons/src/ios-pulse-strong.svg | 0 .../Ionicons/src/ios-pulse.svg | 0 .../Ionicons/src/ios-rainy-outline.svg | 0 .../Ionicons/src/ios-rainy.svg | 0 .../Ionicons/src/ios-recording-outline.svg | 0 .../Ionicons/src/ios-recording.svg | 0 .../Ionicons/src/ios-redo-outline.svg | 0 .../Ionicons/src/ios-redo.svg | 0 .../Ionicons/src/ios-refresh-empty.svg | 0 .../Ionicons/src/ios-refresh-outline.svg | 0 .../Ionicons/src/ios-refresh.svg | 0 .../Ionicons/src/ios-reload.svg | 0 .../src/ios-reverse-camera-outline.svg | 0 .../Ionicons/src/ios-reverse-camera.svg | 0 .../Ionicons/src/ios-rewind-outline.svg | 0 .../Ionicons/src/ios-rewind.svg | 0 .../Ionicons/src/ios-rose-outline.svg | 0 .../Ionicons/src/ios-rose.svg | 0 .../Ionicons/src/ios-search-strong.svg | 0 .../Ionicons/src/ios-search.svg | 0 .../Ionicons/src/ios-settings-strong.svg | 0 .../Ionicons/src/ios-settings.svg | 0 .../Ionicons/src/ios-shuffle-strong.svg | 0 .../Ionicons/src/ios-shuffle.svg | 0 .../Ionicons/src/ios-skipbackward-outline.svg | 0 .../Ionicons/src/ios-skipbackward.svg | 0 .../Ionicons/src/ios-skipforward-outline.svg | 0 .../Ionicons/src/ios-skipforward.svg | 0 .../Ionicons/src/ios-snowy.svg | 0 .../Ionicons/src/ios-speedometer-outline.svg | 0 .../Ionicons/src/ios-speedometer.svg | 0 .../Ionicons/src/ios-star-half.svg | 0 .../Ionicons/src/ios-star-outline.svg | 0 .../Ionicons/src/ios-star.svg | 0 .../Ionicons/src/ios-stopwatch-outline.svg | 0 .../Ionicons/src/ios-stopwatch.svg | 0 .../Ionicons/src/ios-sunny-outline.svg | 0 .../Ionicons/src/ios-sunny.svg | 0 .../Ionicons/src/ios-telephone-outline.svg | 0 .../Ionicons/src/ios-telephone.svg | 0 .../Ionicons/src/ios-tennisball-outline.svg | 0 .../Ionicons/src/ios-tennisball.svg | 0 .../Ionicons/src/ios-thunderstorm-outline.svg | 0 .../Ionicons/src/ios-thunderstorm.svg | 0 .../Ionicons/src/ios-time-outline.svg | 0 .../Ionicons/src/ios-time.svg | 0 .../Ionicons/src/ios-timer-outline.svg | 0 .../Ionicons/src/ios-timer.svg | 0 .../Ionicons/src/ios-toggle-outline.svg | 0 .../Ionicons/src/ios-toggle.svg | 0 .../Ionicons/src/ios-trash-outline.svg | 0 .../Ionicons/src/ios-trash.svg | 0 .../Ionicons/src/ios-undo-outline.svg | 0 .../Ionicons/src/ios-undo.svg | 0 .../Ionicons/src/ios-unlocked-outline.svg | 0 .../Ionicons/src/ios-unlocked.svg | 0 .../Ionicons/src/ios-upload-outline.svg | 0 .../Ionicons/src/ios-upload.svg | 0 .../Ionicons/src/ios-videocam-outline.svg | 0 .../Ionicons/src/ios-videocam.svg | 0 .../Ionicons/src/ios-volume-high.svg | 0 .../Ionicons/src/ios-volume-low.svg | 0 .../Ionicons/src/ios-wineglass-outline.svg | 0 .../Ionicons/src/ios-wineglass.svg | 0 .../Ionicons/src/ios-world-outline.svg | 0 .../Ionicons/src/ios-world.svg | 0 .../bower_components/Ionicons/src/ipad.svg | 0 .../bower_components/Ionicons/src/iphone.svg | 0 .../bower_components/Ionicons/src/ipod.svg | 0 .../bower_components/Ionicons/src/jet.svg | 0 .../bower_components/Ionicons/src/key.svg | 0 .../bower_components/Ionicons/src/knife.svg | 0 .../bower_components/Ionicons/src/laptop.svg | 0 .../bower_components/Ionicons/src/leaf.svg | 0 .../bower_components/Ionicons/src/levels.svg | 0 .../Ionicons/src/lightbulb.svg | 0 .../bower_components/Ionicons/src/link.svg | 0 .../bower_components/Ionicons/src/load-a.svg | 0 .../bower_components/Ionicons/src/load-b.svg | 0 .../bower_components/Ionicons/src/load-c.svg | 0 .../bower_components/Ionicons/src/load-d.svg | 0 .../Ionicons/src/location.svg | 0 .../Ionicons/src/lock-combination.svg | 0 .../bower_components/Ionicons/src/locked.svg | 0 .../bower_components/Ionicons/src/log-in.svg | 0 .../bower_components/Ionicons/src/log-out.svg | 0 .../bower_components/Ionicons/src/loop.svg | 0 .../bower_components/Ionicons/src/magnet.svg | 0 .../bower_components/Ionicons/src/male.svg | 0 .../bower_components/Ionicons/src/man.svg | 0 .../bower_components/Ionicons/src/map.svg | 0 .../bower_components/Ionicons/src/medkit.svg | 0 .../bower_components/Ionicons/src/merge.svg | 0 .../bower_components/Ionicons/src/mic-a.svg | 0 .../bower_components/Ionicons/src/mic-b.svg | 0 .../bower_components/Ionicons/src/mic-c.svg | 0 .../Ionicons/src/minus-circled.svg | 0 .../Ionicons/src/minus-round.svg | 0 .../bower_components/Ionicons/src/minus.svg | 0 .../bower_components/Ionicons/src/model-s.svg | 0 .../bower_components/Ionicons/src/monitor.svg | 0 .../bower_components/Ionicons/src/more.svg | 0 .../bower_components/Ionicons/src/mouse.svg | 0 .../Ionicons/src/music-note.svg | 0 .../Ionicons/src/navicon-round.svg | 0 .../bower_components/Ionicons/src/navicon.svg | 0 .../Ionicons/src/navigate.svg | 0 .../bower_components/Ionicons/src/network.svg | 0 .../Ionicons/src/no-smoking.svg | 0 .../bower_components/Ionicons/src/nuclear.svg | 0 .../bower_components/Ionicons/src/outlet.svg | 0 .../Ionicons/src/paintbrush.svg | 0 .../Ionicons/src/paintbucket.svg | 0 .../Ionicons/src/paper-airplane.svg | 0 .../Ionicons/src/paperclip.svg | 0 .../bower_components/Ionicons/src/pause.svg | 0 .../Ionicons/src/person-add.svg | 0 .../Ionicons/src/person-stalker.svg | 0 .../bower_components/Ionicons/src/person.svg | 0 .../Ionicons/src/pie-graph.svg | 0 .../bower_components/Ionicons/src/pin.svg | 0 .../Ionicons/src/pinpoint.svg | 0 .../bower_components/Ionicons/src/pizza.svg | 0 .../bower_components/Ionicons/src/plane.svg | 0 .../bower_components/Ionicons/src/planet.svg | 0 .../bower_components/Ionicons/src/play.svg | 0 .../Ionicons/src/playstation.svg | 0 .../Ionicons/src/plus-circled.svg | 0 .../Ionicons/src/plus-round.svg | 0 .../bower_components/Ionicons/src/plus.svg | 0 .../bower_components/Ionicons/src/podium.svg | 0 .../bower_components/Ionicons/src/pound.svg | 0 .../bower_components/Ionicons/src/power.svg | 0 .../Ionicons/src/pricetag.svg | 0 .../Ionicons/src/pricetags.svg | 0 .../bower_components/Ionicons/src/printer.svg | 0 .../Ionicons/src/pull-request.svg | 0 .../Ionicons/src/qr-scanner.svg | 0 .../bower_components/Ionicons/src/quote.svg | 0 .../Ionicons/src/radio-waves.svg | 0 .../bower_components/Ionicons/src/record.svg | 0 .../bower_components/Ionicons/src/refresh.svg | 0 .../Ionicons/src/reply-all.svg | 0 .../bower_components/Ionicons/src/reply.svg | 0 .../Ionicons/src/ribbon-a.svg | 0 .../Ionicons/src/ribbon-b.svg | 0 .../Ionicons/src/sad-outline.svg | 0 .../bower_components/Ionicons/src/sad.svg | 0 .../Ionicons/src/scissors.svg | 0 .../bower_components/Ionicons/src/search.svg | 0 .../Ionicons/src/settings.svg | 0 .../bower_components/Ionicons/src/share.svg | 0 .../bower_components/Ionicons/src/shuffle.svg | 0 .../Ionicons/src/skip-backward.svg | 0 .../Ionicons/src/skip-forward.svg | 0 .../Ionicons/src/social-android-outline.svg | 0 .../Ionicons/src/social-android.svg | 0 .../Ionicons/src/social-angular-outline.svg | 0 .../Ionicons/src/social-angular.svg | 0 .../Ionicons/src/social-apple-outline.svg | 0 .../Ionicons/src/social-apple.svg | 0 .../Ionicons/src/social-bitcoin-outline.svg | 0 .../Ionicons/src/social-bitcoin.svg | 0 .../Ionicons/src/social-buffer-outline.svg | 0 .../Ionicons/src/social-buffer.svg | 0 .../Ionicons/src/social-chrome-outline.svg | 0 .../Ionicons/src/social-chrome.svg | 0 .../Ionicons/src/social-codepen-outline.svg | 0 .../Ionicons/src/social-codepen.svg | 0 .../Ionicons/src/social-css3-outline.svg | 0 .../Ionicons/src/social-css3.svg | 0 .../src/social-designernews-outline.svg | 0 .../Ionicons/src/social-designernews.svg | 0 .../Ionicons/src/social-dribbble-outline.svg | 0 .../Ionicons/src/social-dribbble.svg | 0 .../Ionicons/src/social-dropbox-outline.svg | 0 .../Ionicons/src/social-dropbox.svg | 0 .../Ionicons/src/social-euro-outline.svg | 0 .../Ionicons/src/social-euro.svg | 0 .../Ionicons/src/social-facebook-outline.svg | 0 .../Ionicons/src/social-facebook.svg | 0 .../src/social-foursquare-outline.svg | 0 .../Ionicons/src/social-foursquare.svg | 0 .../Ionicons/src/social-freebsd-devil.svg | 0 .../Ionicons/src/social-github-outline.svg | 0 .../Ionicons/src/social-github.svg | 0 .../Ionicons/src/social-google-outline.svg | 0 .../Ionicons/src/social-google.svg | 0 .../src/social-googleplus-outline.svg | 0 .../Ionicons/src/social-googleplus.svg | 0 .../src/social-hackernews-outline.svg | 0 .../Ionicons/src/social-hackernews.svg | 0 .../Ionicons/src/social-html5-outline.svg | 0 .../Ionicons/src/social-html5.svg | 0 .../Ionicons/src/social-instagram-outline.svg | 0 .../Ionicons/src/social-instagram.svg | 0 .../src/social-javascript-outline.svg | 0 .../Ionicons/src/social-javascript.svg | 0 .../Ionicons/src/social-linkedin-outline.svg | 0 .../Ionicons/src/social-linkedin.svg | 0 .../Ionicons/src/social-markdown.svg | 0 .../Ionicons/src/social-nodejs.svg | 0 .../Ionicons/src/social-octocat.svg | 0 .../Ionicons/src/social-pinterest-outline.svg | 0 .../Ionicons/src/social-pinterest.svg | 0 .../Ionicons/src/social-python.svg | 0 .../Ionicons/src/social-reddit-outline.svg | 0 .../Ionicons/src/social-reddit.svg | 0 .../Ionicons/src/social-rss-outline.svg | 0 .../Ionicons/src/social-rss.svg | 0 .../Ionicons/src/social-sass.svg | 0 .../Ionicons/src/social-skype-outline.svg | 0 .../Ionicons/src/social-skype.svg | 0 .../Ionicons/src/social-snapchat-outline.svg | 0 .../Ionicons/src/social-snapchat.svg | 0 .../Ionicons/src/social-tumblr-outline.svg | 0 .../Ionicons/src/social-tumblr.svg | 0 .../Ionicons/src/social-tux.svg | 0 .../Ionicons/src/social-twitch-outline.svg | 0 .../Ionicons/src/social-twitch.svg | 0 .../Ionicons/src/social-twitter-outline.svg | 0 .../Ionicons/src/social-twitter.svg | 0 .../Ionicons/src/social-usd-outline.svg | 0 .../Ionicons/src/social-usd.svg | 0 .../Ionicons/src/social-vimeo-outline.svg | 0 .../Ionicons/src/social-vimeo.svg | 0 .../Ionicons/src/social-whatsapp-outline.svg | 0 .../Ionicons/src/social-whatsapp.svg | 0 .../Ionicons/src/social-windows-outline.svg | 0 .../Ionicons/src/social-windows.svg | 0 .../Ionicons/src/social-wordpress-outline.svg | 0 .../Ionicons/src/social-wordpress.svg | 0 .../Ionicons/src/social-yahoo-outline.svg | 0 .../Ionicons/src/social-yahoo.svg | 0 .../Ionicons/src/social-yen-outline.svg | 0 .../Ionicons/src/social-yen.svg | 0 .../Ionicons/src/social-youtube-outline.svg | 0 .../Ionicons/src/social-youtube.svg | 0 .../Ionicons/src/soup-can-outline.svg | 0 .../Ionicons/src/soup-can.svg | 0 .../Ionicons/src/speakerphone.svg | 0 .../Ionicons/src/speedometer.svg | 0 .../bower_components/Ionicons/src/spoon.svg | 0 .../bower_components/Ionicons/src/star.svg | 0 .../Ionicons/src/stats-bars.svg | 0 .../bower_components/Ionicons/src/steam.svg | 0 .../bower_components/Ionicons/src/stop.svg | 0 .../Ionicons/src/thermometer.svg | 0 .../Ionicons/src/thumbsdown.svg | 0 .../Ionicons/src/thumbsup.svg | 0 .../Ionicons/src/toggle-filled.svg | 0 .../bower_components/Ionicons/src/toggle.svg | 0 .../Ionicons/src/transgender.svg | 0 .../bower_components/Ionicons/src/trash-a.svg | 0 .../bower_components/Ionicons/src/trash-b.svg | 0 .../bower_components/Ionicons/src/trophy.svg | 0 .../Ionicons/src/tshirt-outline.svg | 0 .../bower_components/Ionicons/src/tshirt.svg | 0 .../Ionicons/src/umbrella.svg | 0 .../Ionicons/src/university.svg | 0 .../Ionicons/src/unlocked.svg | 0 .../bower_components/Ionicons/src/upload.svg | 0 .../bower_components/Ionicons/src/usb.svg | 0 .../Ionicons/src/videocamera.svg | 0 .../Ionicons/src/volume-high.svg | 0 .../Ionicons/src/volume-low.svg | 0 .../Ionicons/src/volume-medium.svg | 0 .../Ionicons/src/volume-mute.svg | 0 .../bower_components/Ionicons/src/wand.svg | 0 .../Ionicons/src/waterdrop.svg | 0 .../bower_components/Ionicons/src/wifi.svg | 0 .../Ionicons/src/wineglass.svg | 0 .../bower_components/Ionicons/src/woman.svg | 0 .../bower_components/Ionicons/src/wrench.svg | 0 .../bower_components/Ionicons/src/xbox.svg | 0 .../bower_components/PACE/.bower.json | 0 .../bower_components/PACE/LICENSE | 0 .../bower_components/PACE/README.md | 0 .../bower_components/PACE/bower.json | 0 .../bower_components/PACE/install.json | 0 .../bower_components/PACE/pace.coffee | 0 .../bower_components/PACE/pace.js | 0 .../bower_components/PACE/pace.min.js | 0 .../themes/black/pace-theme-barber-shop.css | 0 .../themes/black/pace-theme-big-counter.css | 0 .../PACE/themes/black/pace-theme-bounce.css | 0 .../themes/black/pace-theme-center-atom.css | 0 .../themes/black/pace-theme-center-circle.css | 0 .../themes/black/pace-theme-center-radar.css | 0 .../themes/black/pace-theme-center-simple.css | 0 .../black/pace-theme-corner-indicator.css | 0 .../themes/black/pace-theme-fill-left.css | 0 .../PACE/themes/black/pace-theme-flash.css | 0 .../PACE/themes/black/pace-theme-flat-top.css | 0 .../themes/black/pace-theme-loading-bar.css | 0 .../PACE/themes/black/pace-theme-mac-osx.css | 0 .../PACE/themes/black/pace-theme-minimal.css | 0 .../themes/blue/pace-theme-barber-shop.css | 0 .../themes/blue/pace-theme-big-counter.css | 0 .../PACE/themes/blue/pace-theme-bounce.css | 0 .../themes/blue/pace-theme-center-atom.css | 0 .../themes/blue/pace-theme-center-circle.css | 0 .../themes/blue/pace-theme-center-radar.css | 0 .../themes/blue/pace-theme-center-simple.css | 0 .../blue/pace-theme-corner-indicator.css | 0 .../PACE/themes/blue/pace-theme-fill-left.css | 0 .../PACE/themes/blue/pace-theme-flash.css | 0 .../PACE/themes/blue/pace-theme-flat-top.css | 0 .../themes/blue/pace-theme-loading-bar.css | 0 .../PACE/themes/blue/pace-theme-mac-osx.css | 0 .../PACE/themes/blue/pace-theme-minimal.css | 0 .../themes/green/pace-theme-barber-shop.css | 0 .../themes/green/pace-theme-big-counter.css | 0 .../PACE/themes/green/pace-theme-bounce.css | 0 .../themes/green/pace-theme-center-atom.css | 0 .../themes/green/pace-theme-center-circle.css | 0 .../themes/green/pace-theme-center-radar.css | 0 .../themes/green/pace-theme-center-simple.css | 0 .../green/pace-theme-corner-indicator.css | 0 .../themes/green/pace-theme-fill-left.css | 0 .../PACE/themes/green/pace-theme-flash.css | 0 .../PACE/themes/green/pace-theme-flat-top.css | 0 .../themes/green/pace-theme-loading-bar.css | 0 .../PACE/themes/green/pace-theme-mac-osx.css | 0 .../PACE/themes/green/pace-theme-minimal.css | 0 .../themes/orange/pace-theme-barber-shop.css | 0 .../themes/orange/pace-theme-big-counter.css | 0 .../PACE/themes/orange/pace-theme-bounce.css | 0 .../themes/orange/pace-theme-center-atom.css | 0 .../orange/pace-theme-center-circle.css | 0 .../themes/orange/pace-theme-center-radar.css | 0 .../orange/pace-theme-center-simple.css | 0 .../orange/pace-theme-corner-indicator.css | 0 .../themes/orange/pace-theme-fill-left.css | 0 .../PACE/themes/orange/pace-theme-flash.css | 0 .../themes/orange/pace-theme-flat-top.css | 0 .../themes/orange/pace-theme-loading-bar.css | 0 .../PACE/themes/orange/pace-theme-mac-osx.css | 0 .../PACE/themes/orange/pace-theme-minimal.css | 0 .../themes/pink/pace-theme-barber-shop.css | 0 .../themes/pink/pace-theme-big-counter.css | 0 .../PACE/themes/pink/pace-theme-bounce.css | 0 .../themes/pink/pace-theme-center-atom.css | 0 .../themes/pink/pace-theme-center-circle.css | 0 .../themes/pink/pace-theme-center-radar.css | 0 .../themes/pink/pace-theme-center-simple.css | 0 .../pink/pace-theme-corner-indicator.css | 0 .../PACE/themes/pink/pace-theme-fill-left.css | 0 .../PACE/themes/pink/pace-theme-flash.css | 0 .../PACE/themes/pink/pace-theme-flat-top.css | 0 .../themes/pink/pace-theme-loading-bar.css | 0 .../PACE/themes/pink/pace-theme-mac-osx.css | 0 .../PACE/themes/pink/pace-theme-minimal.css | 0 .../themes/purple/pace-theme-barber-shop.css | 0 .../themes/purple/pace-theme-big-counter.css | 0 .../PACE/themes/purple/pace-theme-bounce.css | 0 .../themes/purple/pace-theme-center-atom.css | 0 .../purple/pace-theme-center-circle.css | 0 .../themes/purple/pace-theme-center-radar.css | 0 .../purple/pace-theme-center-simple.css | 0 .../purple/pace-theme-corner-indicator.css | 0 .../themes/purple/pace-theme-fill-left.css | 0 .../PACE/themes/purple/pace-theme-flash.css | 0 .../themes/purple/pace-theme-flat-top.css | 0 .../themes/purple/pace-theme-loading-bar.css | 0 .../PACE/themes/purple/pace-theme-mac-osx.css | 0 .../PACE/themes/purple/pace-theme-minimal.css | 0 .../themes/red/pace-theme-barber-shop.css | 0 .../themes/red/pace-theme-big-counter.css | 0 .../PACE/themes/red/pace-theme-bounce.css | 0 .../themes/red/pace-theme-center-atom.css | 0 .../themes/red/pace-theme-center-circle.css | 0 .../themes/red/pace-theme-center-radar.css | 0 .../themes/red/pace-theme-center-simple.css | 0 .../red/pace-theme-corner-indicator.css | 0 .../PACE/themes/red/pace-theme-fill-left.css | 0 .../PACE/themes/red/pace-theme-flash.css | 0 .../PACE/themes/red/pace-theme-flat-top.css | 0 .../themes/red/pace-theme-loading-bar.css | 0 .../PACE/themes/red/pace-theme-mac-osx.css | 0 .../PACE/themes/red/pace-theme-minimal.css | 0 .../themes/silver/pace-theme-barber-shop.css | 0 .../themes/silver/pace-theme-big-counter.css | 0 .../PACE/themes/silver/pace-theme-bounce.css | 0 .../themes/silver/pace-theme-center-atom.css | 0 .../silver/pace-theme-center-circle.css | 0 .../themes/silver/pace-theme-center-radar.css | 0 .../silver/pace-theme-center-simple.css | 0 .../silver/pace-theme-corner-indicator.css | 0 .../themes/silver/pace-theme-fill-left.css | 0 .../PACE/themes/silver/pace-theme-flash.css | 0 .../themes/silver/pace-theme-flat-top.css | 0 .../themes/silver/pace-theme-loading-bar.css | 0 .../PACE/themes/silver/pace-theme-mac-osx.css | 0 .../PACE/themes/silver/pace-theme-minimal.css | 0 .../themes/white/pace-theme-barber-shop.css | 0 .../themes/white/pace-theme-big-counter.css | 0 .../PACE/themes/white/pace-theme-bounce.css | 0 .../themes/white/pace-theme-center-atom.css | 0 .../themes/white/pace-theme-center-circle.css | 0 .../themes/white/pace-theme-center-radar.css | 0 .../themes/white/pace-theme-center-simple.css | 0 .../white/pace-theme-corner-indicator.css | 0 .../themes/white/pace-theme-fill-left.css | 0 .../PACE/themes/white/pace-theme-flash.css | 0 .../PACE/themes/white/pace-theme-flat-top.css | 0 .../themes/white/pace-theme-loading-bar.css | 0 .../PACE/themes/white/pace-theme-mac-osx.css | 0 .../PACE/themes/white/pace-theme-minimal.css | 0 .../themes/yellow/pace-theme-barber-shop.css | 0 .../themes/yellow/pace-theme-big-counter.css | 0 .../PACE/themes/yellow/pace-theme-bounce.css | 0 .../themes/yellow/pace-theme-center-atom.css | 0 .../yellow/pace-theme-center-circle.css | 0 .../themes/yellow/pace-theme-center-radar.css | 0 .../yellow/pace-theme-center-simple.css | 0 .../yellow/pace-theme-corner-indicator.css | 0 .../themes/yellow/pace-theme-fill-left.css | 0 .../PACE/themes/yellow/pace-theme-flash.css | 0 .../themes/yellow/pace-theme-flat-top.css | 0 .../themes/yellow/pace-theme-loading-bar.css | 0 .../PACE/themes/yellow/pace-theme-mac-osx.css | 0 .../PACE/themes/yellow/pace-theme-minimal.css | 0 .../bootstrap-colorpicker/.bower.json | 0 .../bootstrap-colorpicker/CONTRIBUTING.md | 0 .../bootstrap-colorpicker/LICENSE | 0 .../bootstrap-colorpicker/README.md | 0 .../bootstrap-colorpicker/bower.json | 0 .../dist/css/bootstrap-colorpicker.css | 0 .../dist/css/bootstrap-colorpicker.css.map | 0 .../dist/css/bootstrap-colorpicker.min.css | 0 .../css/bootstrap-colorpicker.min.css.map | 0 .../alpha-horizontal.png | Bin .../dist/img/bootstrap-colorpicker/alpha.png | Bin .../bootstrap-colorpicker/hue-horizontal.png | Bin .../dist/img/bootstrap-colorpicker/hue.png | Bin .../img/bootstrap-colorpicker/saturation.png | Bin .../dist/js/bootstrap-colorpicker.js | 0 .../dist/js/bootstrap-colorpicker.min.js | 0 .../docs/assets/main.css | 0 .../docs/helpers/code/index.js | 0 .../docs/includes/api.hbs | 0 .../docs/includes/example.hbs | 0 .../docs/includes/examples.hbs | 0 .../docs/includes/examples/01_basic.hbs | 0 .../docs/includes/examples/02_component.hbs | 0 .../examples/03_component_options.hbs | 0 .../docs/includes/examples/04_events.hbs | 0 .../docs/includes/examples/05_transparent.hbs | 0 .../docs/includes/examples/06_horizontal.hbs | 0 .../docs/includes/examples/07_inline.hbs | 0 .../docs/includes/examples/08_palette.hbs | 0 .../docs/includes/examples/09_size.hbs | 0 .../docs/includes/examples/10_disabled.hbs | 0 .../docs/includes/examples/11_modal.hbs | 0 .../docs/includes/social.hbs | 0 .../bootstrap-colorpicker/docs/layout.hbs | 0 .../docs/pages/index.hbs | 0 .../bootstrap-colorpicker/serve.js | 0 .../src/js/colorpicker-color.js | 0 .../src/js/colorpicker-component.js | 0 .../src/js/colorpicker-defaults.js | 0 .../src/js/colorpicker-plugin-wrapper.js | 0 .../src/less/colorpicker.less | 0 .../src/sass/_colorpicker.scss | 0 .../bootstrap-datepicker/.bower.json | 0 .../bootstrap-datepicker/.editorconfig | 0 .../.github/ISSUE_TEMPLATE.md | 0 .../.github/PULL_REQUEST_TEMPLATE.md | 0 .../bootstrap-datepicker/.gitignore | 0 .../bootstrap-datepicker/.travis.yml | 0 .../bootstrap-datepicker/CHANGELOG.md | 0 .../bootstrap-datepicker/CODE_OF_CONDUCT.md | 0 .../bootstrap-datepicker/CONTRIBUTING.md | 0 .../bootstrap-datepicker/Gruntfile.js | 0 .../bootstrap-datepicker/LICENSE | 0 .../bootstrap-datepicker/README.md | 0 .../bootstrap-datepicker/bower.json | 0 .../bootstrap-datepicker/build/build.less | 0 .../bootstrap-datepicker/build/build3.less | 0 .../build/build_standalone.less | 0 .../build/build_standalone3.less | 0 .../bootstrap-datepicker/composer.json | 0 .../dist/css/bootstrap-datepicker.css | 0 .../dist/css/bootstrap-datepicker.css.map | 0 .../dist/css/bootstrap-datepicker.min.css | 0 .../css/bootstrap-datepicker.standalone.css | 0 .../bootstrap-datepicker.standalone.css.map | 0 .../bootstrap-datepicker.standalone.min.css | 0 .../dist/css/bootstrap-datepicker3.css | 0 .../dist/css/bootstrap-datepicker3.css.map | 0 .../dist/css/bootstrap-datepicker3.min.css | 0 .../css/bootstrap-datepicker3.standalone.css | 0 .../bootstrap-datepicker3.standalone.css.map | 0 .../bootstrap-datepicker3.standalone.min.css | 0 .../dist/js/bootstrap-datepicker.js | 0 .../dist/js/bootstrap-datepicker.min.js | 0 .../locales/bootstrap-datepicker-en-CA.min.js | 0 .../locales/bootstrap-datepicker.ar-tn.min.js | 0 .../locales/bootstrap-datepicker.ar.min.js | 0 .../locales/bootstrap-datepicker.az.min.js | 0 .../locales/bootstrap-datepicker.bg.min.js | 0 .../locales/bootstrap-datepicker.bn.min.js | 0 .../locales/bootstrap-datepicker.br.min.js | 0 .../locales/bootstrap-datepicker.bs.min.js | 0 .../locales/bootstrap-datepicker.ca.min.js | 0 .../locales/bootstrap-datepicker.cs.min.js | 0 .../locales/bootstrap-datepicker.cy.min.js | 0 .../locales/bootstrap-datepicker.da.min.js | 0 .../locales/bootstrap-datepicker.de.min.js | 0 .../locales/bootstrap-datepicker.el.min.js | 0 .../locales/bootstrap-datepicker.en-AU.min.js | 0 .../locales/bootstrap-datepicker.en-GB.min.js | 0 .../locales/bootstrap-datepicker.en-IE.min.js | 0 .../locales/bootstrap-datepicker.en-NZ.min.js | 0 .../locales/bootstrap-datepicker.en-ZA.min.js | 0 .../locales/bootstrap-datepicker.eo.min.js | 0 .../locales/bootstrap-datepicker.es.min.js | 0 .../locales/bootstrap-datepicker.et.min.js | 0 .../locales/bootstrap-datepicker.eu.min.js | 0 .../locales/bootstrap-datepicker.fa.min.js | 0 .../locales/bootstrap-datepicker.fi.min.js | 0 .../locales/bootstrap-datepicker.fo.min.js | 0 .../locales/bootstrap-datepicker.fr-CH.min.js | 0 .../locales/bootstrap-datepicker.fr.min.js | 0 .../locales/bootstrap-datepicker.gl.min.js | 0 .../locales/bootstrap-datepicker.he.min.js | 0 .../locales/bootstrap-datepicker.hi.min.js | 0 .../locales/bootstrap-datepicker.hr.min.js | 0 .../locales/bootstrap-datepicker.hu.min.js | 0 .../locales/bootstrap-datepicker.hy.min.js | 0 .../locales/bootstrap-datepicker.id.min.js | 0 .../locales/bootstrap-datepicker.is.min.js | 0 .../locales/bootstrap-datepicker.it-CH.min.js | 0 .../locales/bootstrap-datepicker.it.min.js | 0 .../locales/bootstrap-datepicker.ja.min.js | 0 .../locales/bootstrap-datepicker.ka.min.js | 0 .../locales/bootstrap-datepicker.kh.min.js | 0 .../locales/bootstrap-datepicker.kk.min.js | 0 .../locales/bootstrap-datepicker.km.min.js | 0 .../locales/bootstrap-datepicker.ko.min.js | 0 .../locales/bootstrap-datepicker.kr.min.js | 0 .../locales/bootstrap-datepicker.lt.min.js | 0 .../locales/bootstrap-datepicker.lv.min.js | 0 .../locales/bootstrap-datepicker.me.min.js | 0 .../locales/bootstrap-datepicker.mk.min.js | 0 .../locales/bootstrap-datepicker.mn.min.js | 0 .../locales/bootstrap-datepicker.ms.min.js | 0 .../locales/bootstrap-datepicker.nb.min.js | 0 .../locales/bootstrap-datepicker.nl-BE.min.js | 0 .../locales/bootstrap-datepicker.nl.min.js | 0 .../locales/bootstrap-datepicker.no.min.js | 0 .../locales/bootstrap-datepicker.oc.min.js | 0 .../locales/bootstrap-datepicker.pl.min.js | 0 .../locales/bootstrap-datepicker.pt-BR.min.js | 0 .../locales/bootstrap-datepicker.pt.min.js | 0 .../locales/bootstrap-datepicker.ro.min.js | 0 .../bootstrap-datepicker.rs-latin.min.js | 0 .../locales/bootstrap-datepicker.rs.min.js | 0 .../locales/bootstrap-datepicker.ru.min.js | 0 .../locales/bootstrap-datepicker.si.min.js | 0 .../locales/bootstrap-datepicker.sk.min.js | 0 .../locales/bootstrap-datepicker.sl.min.js | 0 .../locales/bootstrap-datepicker.sq.min.js | 0 .../bootstrap-datepicker.sr-latin.min.js | 0 .../locales/bootstrap-datepicker.sr.min.js | 0 .../locales/bootstrap-datepicker.sv.min.js | 0 .../locales/bootstrap-datepicker.sw.min.js | 0 .../locales/bootstrap-datepicker.ta.min.js | 0 .../locales/bootstrap-datepicker.tg.min.js | 0 .../locales/bootstrap-datepicker.th.min.js | 0 .../locales/bootstrap-datepicker.tr.min.js | 0 .../locales/bootstrap-datepicker.uk.min.js | 0 .../bootstrap-datepicker.uz-cyrl.min.js | 0 .../bootstrap-datepicker.uz-latn.min.js | 0 .../locales/bootstrap-datepicker.vi.min.js | 0 .../locales/bootstrap-datepicker.zh-CN.min.js | 0 .../locales/bootstrap-datepicker.zh-TW.min.js | 0 .../bootstrap-datepicker/docs/Makefile | 0 .../bootstrap-datepicker/docs/README.md | 0 .../docs/_screenshots/demo_head.html | 0 .../docs/_screenshots/markup_component.html | 0 .../docs/_screenshots/markup_daterange.html | 0 .../docs/_screenshots/markup_inline.html | 0 .../docs/_screenshots/markup_input.html | 0 .../_screenshots/option_calendarweeks.html | 0 .../docs/_screenshots/option_clearbtn.html | 0 .../option_daysofweekdisabled.html | 0 .../docs/_screenshots/option_enddate.html | 0 .../docs/_screenshots/option_language.html | 0 .../docs/_screenshots/option_multidate.html | 0 .../docs/_screenshots/option_startdate.html | 0 .../docs/_screenshots/option_todaybtn.html | 0 .../_screenshots/option_todayhighlight.html | 0 .../docs/_screenshots/option_weekstart.html | 0 .../docs/_screenshots/script/common.css | 0 .../docs/_screenshots/script/common.js | 0 .../docs/_screenshots/script/debug.js | 0 .../_screenshots/script/html-imports.min.js | 0 .../docs/_screenshots/script/screenshot.js | 0 .../docs/_static/screenshots/demo_head.png | Bin .../_static/screenshots/markup_component.png | Bin .../_static/screenshots/markup_daterange.png | Bin .../_static/screenshots/markup_inline.png | Bin .../docs/_static/screenshots/markup_input.png | Bin .../screenshots/option_calendarweeks.png | Bin .../_static/screenshots/option_clearbtn.png | Bin .../screenshots/option_daysofweekdisabled.png | Bin .../_static/screenshots/option_enddate.png | Bin .../_static/screenshots/option_language.png | Bin .../_static/screenshots/option_multidate.png | Bin .../_static/screenshots/option_startdate.png | Bin .../_static/screenshots/option_todaybtn.png | Bin .../screenshots/option_todayhighlight.png | Bin .../_static/screenshots/option_weekstart.png | Bin .../bootstrap-datepicker/docs/conf.py | 0 .../bootstrap-datepicker/docs/events.rst | 0 .../bootstrap-datepicker/docs/i18n.rst | 0 .../bootstrap-datepicker/docs/index.rst | 0 .../bootstrap-datepicker/docs/keyboard.rst | 0 .../bootstrap-datepicker/docs/make.bat | 0 .../bootstrap-datepicker/docs/markup.rst | 0 .../bootstrap-datepicker/docs/methods.rst | 0 .../bootstrap-datepicker/docs/options.rst | 0 .../docs/requirements.txt | 0 .../bootstrap-datepicker/grunt/.jshintrc | 0 .../bootstrap-datepicker/js/.jscsrc | 0 .../bootstrap-datepicker/js/.jshintrc | 0 .../js/bootstrap-datepicker.js | 0 .../js/locales/bootstrap-datepicker-en-CA.js | 0 .../js/locales/bootstrap-datepicker.ar-tn.js | 0 .../js/locales/bootstrap-datepicker.ar.js | 0 .../js/locales/bootstrap-datepicker.az.js | 0 .../js/locales/bootstrap-datepicker.bg.js | 0 .../js/locales/bootstrap-datepicker.bn.js | 0 .../js/locales/bootstrap-datepicker.br.js | 0 .../js/locales/bootstrap-datepicker.bs.js | 0 .../js/locales/bootstrap-datepicker.ca.js | 0 .../js/locales/bootstrap-datepicker.cs.js | 0 .../js/locales/bootstrap-datepicker.cy.js | 0 .../js/locales/bootstrap-datepicker.da.js | 0 .../js/locales/bootstrap-datepicker.de.js | 0 .../js/locales/bootstrap-datepicker.el.js | 0 .../js/locales/bootstrap-datepicker.en-AU.js | 0 .../js/locales/bootstrap-datepicker.en-GB.js | 0 .../js/locales/bootstrap-datepicker.en-IE.js | 0 .../js/locales/bootstrap-datepicker.en-NZ.js | 0 .../js/locales/bootstrap-datepicker.en-ZA.js | 0 .../js/locales/bootstrap-datepicker.eo.js | 0 .../js/locales/bootstrap-datepicker.es.js | 0 .../js/locales/bootstrap-datepicker.et.js | 0 .../js/locales/bootstrap-datepicker.eu.js | 0 .../js/locales/bootstrap-datepicker.fa.js | 0 .../js/locales/bootstrap-datepicker.fi.js | 0 .../js/locales/bootstrap-datepicker.fo.js | 0 .../js/locales/bootstrap-datepicker.fr-CH.js | 0 .../js/locales/bootstrap-datepicker.fr.js | 0 .../js/locales/bootstrap-datepicker.gl.js | 0 .../js/locales/bootstrap-datepicker.he.js | 0 .../js/locales/bootstrap-datepicker.hi.js | 0 .../js/locales/bootstrap-datepicker.hr.js | 0 .../js/locales/bootstrap-datepicker.hu.js | 0 .../js/locales/bootstrap-datepicker.hy.js | 0 .../js/locales/bootstrap-datepicker.id.js | 0 .../js/locales/bootstrap-datepicker.is.js | 0 .../js/locales/bootstrap-datepicker.it-CH.js | 0 .../js/locales/bootstrap-datepicker.it.js | 0 .../js/locales/bootstrap-datepicker.ja.js | 0 .../js/locales/bootstrap-datepicker.ka.js | 0 .../js/locales/bootstrap-datepicker.kh.js | 0 .../js/locales/bootstrap-datepicker.kk.js | 0 .../js/locales/bootstrap-datepicker.km.js | 0 .../js/locales/bootstrap-datepicker.ko.js | 0 .../js/locales/bootstrap-datepicker.kr.js | 0 .../js/locales/bootstrap-datepicker.lt.js | 0 .../js/locales/bootstrap-datepicker.lv.js | 0 .../js/locales/bootstrap-datepicker.me.js | 0 .../js/locales/bootstrap-datepicker.mk.js | 0 .../js/locales/bootstrap-datepicker.mn.js | 0 .../js/locales/bootstrap-datepicker.ms.js | 0 .../js/locales/bootstrap-datepicker.nb.js | 0 .../js/locales/bootstrap-datepicker.nl-BE.js | 0 .../js/locales/bootstrap-datepicker.nl.js | 0 .../js/locales/bootstrap-datepicker.no.js | 0 .../js/locales/bootstrap-datepicker.oc.js | 0 .../js/locales/bootstrap-datepicker.pl.js | 0 .../js/locales/bootstrap-datepicker.pt-BR.js | 0 .../js/locales/bootstrap-datepicker.pt.js | 0 .../js/locales/bootstrap-datepicker.ro.js | 0 .../locales/bootstrap-datepicker.rs-latin.js | 0 .../js/locales/bootstrap-datepicker.rs.js | 0 .../js/locales/bootstrap-datepicker.ru.js | 0 .../js/locales/bootstrap-datepicker.si.js | 0 .../js/locales/bootstrap-datepicker.sk.js | 0 .../js/locales/bootstrap-datepicker.sl.js | 0 .../js/locales/bootstrap-datepicker.sq.js | 0 .../locales/bootstrap-datepicker.sr-latin.js | 0 .../js/locales/bootstrap-datepicker.sr.js | 0 .../js/locales/bootstrap-datepicker.sv.js | 0 .../js/locales/bootstrap-datepicker.sw.js | 0 .../js/locales/bootstrap-datepicker.ta.js | 0 .../js/locales/bootstrap-datepicker.tg.js | 0 .../js/locales/bootstrap-datepicker.th.js | 0 .../js/locales/bootstrap-datepicker.tr.js | 0 .../js/locales/bootstrap-datepicker.uk.js | 0 .../locales/bootstrap-datepicker.uz-cyrl.js | 0 .../locales/bootstrap-datepicker.uz-latn.js | 0 .../js/locales/bootstrap-datepicker.vi.js | 0 .../js/locales/bootstrap-datepicker.zh-CN.js | 0 .../js/locales/bootstrap-datepicker.zh-TW.js | 0 .../bootstrap-datepicker/less/.csslintrc | 0 .../bootstrap-datepicker/less/datepicker.less | 0 .../less/datepicker3.less | 0 .../bootstrap-datepicker/package.json | 0 .../bootstrap-datepicker/tests/README.md | 0 .../tests/assets/coverage.js | 0 .../tests/assets/jquery-1.7.1.min.js | 0 .../bootstrap-datepicker/tests/assets/mock.js | 0 .../tests/assets/qunit-logging.js | 0 .../tests/assets/qunit.css | 0 .../tests/assets/qunit.js | 0 .../tests/assets/utils.js | 0 .../tests/suites/calendar-weeks.js | 0 .../tests/suites/component.js | 0 .../tests/suites/data-api.js | 0 .../tests/suites/events.js | 0 .../tests/suites/formats.js | 0 .../tests/suites/inline.js | 0 .../tests/suites/keyboard_navigation/2011.js | 0 .../tests/suites/keyboard_navigation/2012.js | 0 .../tests/suites/keyboard_navigation/all.js | 0 .../tests/suites/methods.js | 0 .../tests/suites/methods_jquery.js | 0 .../tests/suites/mouse_navigation/2011.js | 0 .../tests/suites/mouse_navigation/2012.js | 0 .../tests/suites/mouse_navigation/all.js | 0 .../tests/suites/noconflict.js | 0 .../tests/suites/options.js | 0 .../tests/suites/timezone.js | 0 .../tests/suites/touch_navigation/all.js | 0 .../bootstrap-datepicker/tests/tests.html | 0 .../bootstrap-datepicker/tests/timezone.html | 0 .../bootstrap-datepicker/yarn.lock | 0 .../bootstrap-daterangepicker/.bower.json | 0 .../bootstrap-daterangepicker/README.md | 0 .../bootstrap-daterangepicker/bower.json | 0 .../daterangepicker.css | 0 .../daterangepicker.js | 0 .../daterangepicker.scss | 0 .../bootstrap-daterangepicker/demo.html | 0 .../bootstrap-daterangepicker/drp.png | Bin .../example/amd/index.html | 0 .../example/amd/main.js | 0 .../example/amd/require.js | 0 .../example/browserify/README.md | 0 .../example/browserify/bundle.js | 0 .../example/browserify/index.html | 0 .../example/browserify/main.js | 0 .../bootstrap-daterangepicker/package.js | 0 .../bootstrap-daterangepicker/package.json | 0 .../website/index.html | 0 .../website/website.css | 0 .../website/website.js | 0 .../bootstrap-slider/.bower.json | 0 .../bootstrap-slider/README.md | 0 .../bootstrap-slider/bootstrap-slider.js | 0 .../bootstrap-slider/bower.json | 0 .../bootstrap-slider/locks.png | Bin .../bootstrap-slider/slider.css | 0 .../bootstrap-timepicker/.bower.json | 0 .../bootstrap-timepicker/CHANGELOG.md | 0 .../bootstrap-timepicker/LICENSE | 0 .../bootstrap-timepicker/README.md | 0 .../bootstrap-timepicker/bower.json | 0 .../bootstrap-timepicker/css/timepicker.less | 0 .../js/bootstrap-timepicker.js | 0 .../bower_components/bootstrap/.DS_Store | Bin .../bower_components/bootstrap/.bower.json | 0 .../bower_components/bootstrap/CHANGELOG.md | 0 .../bower_components/bootstrap/Gemfile | 0 .../bower_components/bootstrap/Gemfile.lock | 0 .../bower_components/bootstrap/Gruntfile.js | 0 .../bootstrap/ISSUE_TEMPLATE.md | 0 .../bower_components/bootstrap/LICENSE | 0 .../bower_components/bootstrap/README.md | 0 .../bower_components/bootstrap/bower.json | 0 .../bootstrap/dist/css/bootstrap-theme.css | 0 .../dist/css/bootstrap-theme.css.map | 0 .../dist/css/bootstrap-theme.min.css | 0 .../dist/css/bootstrap-theme.min.css.map | 0 .../bootstrap/dist/css/bootstrap.css | 0 .../bootstrap/dist/css/bootstrap.css.map | 0 .../bootstrap/dist/css/bootstrap.min.css | 0 .../bootstrap/dist/css/bootstrap.min.css.map | 0 .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../bootstrap/dist/js/bootstrap.js | 0 .../bootstrap/dist/js/bootstrap.min.js | 0 .../bower_components/bootstrap/dist/js/npm.js | 0 .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../bootstrap/grunt/.jshintrc | 0 .../bootstrap/grunt/bs-commonjs-generator.js | 0 .../grunt/bs-glyphicons-data-generator.js | 0 .../bootstrap/grunt/bs-lessdoc-parser.js | 0 .../bootstrap/grunt/bs-raw-files-generator.js | 0 .../bootstrap/grunt/change-version.js | 0 .../bootstrap/grunt/configBridge.json | 0 .../bootstrap/grunt/npm-shrinkwrap.json | 0 .../bootstrap/grunt/sauce_browsers.yml | 0 .../bower_components/bootstrap/js/.jscsrc | 0 .../bower_components/bootstrap/js/.jshintrc | 0 .../bower_components/bootstrap/js/affix.js | 0 .../bower_components/bootstrap/js/alert.js | 0 .../bower_components/bootstrap/js/button.js | 0 .../bower_components/bootstrap/js/carousel.js | 0 .../bower_components/bootstrap/js/collapse.js | 0 .../bower_components/bootstrap/js/dropdown.js | 0 .../bower_components/bootstrap/js/modal.js | 0 .../bower_components/bootstrap/js/popover.js | 0 .../bootstrap/js/scrollspy.js | 0 .../bower_components/bootstrap/js/tab.js | 0 .../bower_components/bootstrap/js/tooltip.js | 0 .../bootstrap/js/transition.js | 0 .../bootstrap/less/.csscomb.json | 0 .../bootstrap/less/.csslintrc | 0 .../bootstrap/less/alerts.less | 0 .../bootstrap/less/badges.less | 0 .../bootstrap/less/bootstrap.less | 0 .../bootstrap/less/breadcrumbs.less | 0 .../bootstrap/less/button-groups.less | 0 .../bootstrap/less/buttons.less | 0 .../bootstrap/less/carousel.less | 0 .../bootstrap/less/close.less | 0 .../bower_components/bootstrap/less/code.less | 0 .../bootstrap/less/component-animations.less | 0 .../bootstrap/less/dropdowns.less | 0 .../bootstrap/less/forms.less | 0 .../bootstrap/less/glyphicons.less | 0 .../bower_components/bootstrap/less/grid.less | 0 .../bootstrap/less/input-groups.less | 0 .../bootstrap/less/jumbotron.less | 0 .../bootstrap/less/labels.less | 0 .../bootstrap/less/list-group.less | 0 .../bootstrap/less/media.less | 0 .../bootstrap/less/mixins.less | 0 .../bootstrap/less/mixins/alerts.less | 0 .../less/mixins/background-variant.less | 0 .../bootstrap/less/mixins/border-radius.less | 0 .../bootstrap/less/mixins/buttons.less | 0 .../bootstrap/less/mixins/center-block.less | 0 .../bootstrap/less/mixins/clearfix.less | 0 .../bootstrap/less/mixins/forms.less | 0 .../bootstrap/less/mixins/gradients.less | 0 .../bootstrap/less/mixins/grid-framework.less | 0 .../bootstrap/less/mixins/grid.less | 0 .../bootstrap/less/mixins/hide-text.less | 0 .../bootstrap/less/mixins/image.less | 0 .../bootstrap/less/mixins/labels.less | 0 .../bootstrap/less/mixins/list-group.less | 0 .../bootstrap/less/mixins/nav-divider.less | 0 .../less/mixins/nav-vertical-align.less | 0 .../bootstrap/less/mixins/opacity.less | 0 .../bootstrap/less/mixins/pagination.less | 0 .../bootstrap/less/mixins/panels.less | 0 .../bootstrap/less/mixins/progress-bar.less | 0 .../bootstrap/less/mixins/reset-filter.less | 0 .../bootstrap/less/mixins/reset-text.less | 0 .../bootstrap/less/mixins/resize.less | 0 .../less/mixins/responsive-visibility.less | 0 .../bootstrap/less/mixins/size.less | 0 .../bootstrap/less/mixins/tab-focus.less | 0 .../bootstrap/less/mixins/table-row.less | 0 .../bootstrap/less/mixins/text-emphasis.less | 0 .../bootstrap/less/mixins/text-overflow.less | 0 .../less/mixins/vendor-prefixes.less | 0 .../bootstrap/less/modals.less | 0 .../bootstrap/less/navbar.less | 0 .../bower_components/bootstrap/less/navs.less | 0 .../bootstrap/less/normalize.less | 0 .../bootstrap/less/pager.less | 0 .../bootstrap/less/pagination.less | 0 .../bootstrap/less/panels.less | 0 .../bootstrap/less/popovers.less | 0 .../bootstrap/less/print.less | 0 .../bootstrap/less/progress-bars.less | 0 .../bootstrap/less/responsive-embed.less | 0 .../bootstrap/less/responsive-utilities.less | 0 .../bootstrap/less/scaffolding.less | 0 .../bootstrap/less/tables.less | 0 .../bootstrap/less/theme.less | 0 .../bootstrap/less/thumbnails.less | 0 .../bootstrap/less/tooltip.less | 0 .../bower_components/bootstrap/less/type.less | 0 .../bootstrap/less/utilities.less | 0 .../bootstrap/less/variables.less | 0 .../bootstrap/less/wells.less | 0 .../bootstrap/nuget/MyGet.ps1 | 0 .../bootstrap/nuget/bootstrap.less.nuspec | 0 .../bootstrap/nuget/bootstrap.nuspec | 0 .../bower_components/bootstrap/package.js | 0 .../bower_components/bootstrap/package.json | 0 .../bower_components/chart.js/.bower.json | 0 .../bower_components/chart.js/.gitignore | 0 .../bower_components/chart.js/.travis.yml | 0 .../bower_components/chart.js/CONTRIBUTING.md | 0 .../bower_components/chart.js/Chart.js | 0 .../bower_components/chart.js/Chart.min.js | 0 .../bower_components/chart.js/LICENSE.md | 0 .../bower_components/chart.js/README.md | 0 .../bower_components/chart.js/bower.json | 0 .../chart.js/docs/00-Getting-Started.md | 0 .../chart.js/docs/01-Line-Chart.md | 0 .../chart.js/docs/02-Bar-Chart.md | 0 .../chart.js/docs/03-Radar-Chart.md | 0 .../chart.js/docs/04-Polar-Area-Chart.md | 0 .../chart.js/docs/05-Pie-Doughnut-Chart.md | 0 .../chart.js/docs/06-Advanced.md | 0 .../chart.js/docs/07-Notes.md | 0 .../bower_components/chart.js/gulpfile.js | 0 .../bower_components/chart.js/package.json | 0 .../chart.js/samples/bar.html | 0 .../chart.js/samples/doughnut.html | 0 .../chart.js/samples/line-customTooltips.html | 0 .../chart.js/samples/line.html | 0 .../chart.js/samples/pie-customTooltips.html | 0 .../chart.js/samples/pie.html | 0 .../chart.js/samples/polar-area.html | 0 .../chart.js/samples/radar.html | 0 .../chart.js/src/Chart.Bar.js | 0 .../chart.js/src/Chart.Core.js | 0 .../chart.js/src/Chart.Doughnut.js | 0 .../chart.js/src/Chart.Line.js | 0 .../chart.js/src/Chart.PolarArea.js | 0 .../chart.js/src/Chart.Radar.js | 0 .../bower_components/ckeditor/.bower.json | 0 .../ckeditor/.github/ISSUE_TEMPLATE | 0 .../bower_components/ckeditor/CHANGES.md | 0 .../bower_components/ckeditor/LICENSE.md | 0 .../bower_components/ckeditor/README.md | 0 .../ckeditor/adapters/jquery.js | 0 .../bower_components/ckeditor/bower.json | 0 .../bower_components/ckeditor/ckeditor.js | 0 .../bower_components/ckeditor/composer.json | 0 .../bower_components/ckeditor/config.js | 0 .../bower_components/ckeditor/contents.css | 0 .../ckeditor/lang/_translationstatus.txt | 0 .../bower_components/ckeditor/lang/af.js | 0 .../bower_components/ckeditor/lang/ar.js | 0 .../bower_components/ckeditor/lang/az.js | 0 .../bower_components/ckeditor/lang/bg.js | 0 .../bower_components/ckeditor/lang/bn.js | 0 .../bower_components/ckeditor/lang/bs.js | 0 .../bower_components/ckeditor/lang/ca.js | 0 .../bower_components/ckeditor/lang/cs.js | 0 .../bower_components/ckeditor/lang/cy.js | 0 .../bower_components/ckeditor/lang/da.js | 0 .../bower_components/ckeditor/lang/de-ch.js | 0 .../bower_components/ckeditor/lang/de.js | 0 .../bower_components/ckeditor/lang/el.js | 0 .../bower_components/ckeditor/lang/en-au.js | 0 .../bower_components/ckeditor/lang/en-ca.js | 0 .../bower_components/ckeditor/lang/en-gb.js | 0 .../bower_components/ckeditor/lang/en.js | 0 .../bower_components/ckeditor/lang/eo.js | 0 .../bower_components/ckeditor/lang/es-mx.js | 0 .../bower_components/ckeditor/lang/es.js | 0 .../bower_components/ckeditor/lang/et.js | 0 .../bower_components/ckeditor/lang/eu.js | 0 .../bower_components/ckeditor/lang/fa.js | 0 .../bower_components/ckeditor/lang/fi.js | 0 .../bower_components/ckeditor/lang/fo.js | 0 .../bower_components/ckeditor/lang/fr-ca.js | 0 .../bower_components/ckeditor/lang/fr.js | 0 .../bower_components/ckeditor/lang/gl.js | 0 .../bower_components/ckeditor/lang/gu.js | 0 .../bower_components/ckeditor/lang/he.js | 0 .../bower_components/ckeditor/lang/hi.js | 0 .../bower_components/ckeditor/lang/hr.js | 0 .../bower_components/ckeditor/lang/hu.js | 0 .../bower_components/ckeditor/lang/id.js | 0 .../bower_components/ckeditor/lang/is.js | 0 .../bower_components/ckeditor/lang/it.js | 0 .../bower_components/ckeditor/lang/ja.js | 0 .../bower_components/ckeditor/lang/ka.js | 0 .../bower_components/ckeditor/lang/km.js | 0 .../bower_components/ckeditor/lang/ko.js | 0 .../bower_components/ckeditor/lang/ku.js | 0 .../bower_components/ckeditor/lang/lt.js | 0 .../bower_components/ckeditor/lang/lv.js | 0 .../bower_components/ckeditor/lang/mk.js | 0 .../bower_components/ckeditor/lang/mn.js | 0 .../bower_components/ckeditor/lang/ms.js | 0 .../bower_components/ckeditor/lang/nb.js | 0 .../bower_components/ckeditor/lang/nl.js | 0 .../bower_components/ckeditor/lang/no.js | 0 .../bower_components/ckeditor/lang/oc.js | 0 .../bower_components/ckeditor/lang/pl.js | 0 .../bower_components/ckeditor/lang/pt-br.js | 0 .../bower_components/ckeditor/lang/pt.js | 0 .../bower_components/ckeditor/lang/ro.js | 0 .../bower_components/ckeditor/lang/ru.js | 0 .../bower_components/ckeditor/lang/si.js | 0 .../bower_components/ckeditor/lang/sk.js | 0 .../bower_components/ckeditor/lang/sl.js | 0 .../bower_components/ckeditor/lang/sq.js | 0 .../bower_components/ckeditor/lang/sr-latn.js | 0 .../bower_components/ckeditor/lang/sr.js | 0 .../bower_components/ckeditor/lang/sv.js | 0 .../bower_components/ckeditor/lang/th.js | 0 .../bower_components/ckeditor/lang/tr.js | 0 .../bower_components/ckeditor/lang/tt.js | 0 .../bower_components/ckeditor/lang/ug.js | 0 .../bower_components/ckeditor/lang/uk.js | 0 .../bower_components/ckeditor/lang/vi.js | 0 .../bower_components/ckeditor/lang/zh-cn.js | 0 .../bower_components/ckeditor/lang/zh.js | 0 .../bower_components/ckeditor/package.json | 0 .../plugins/a11yhelp/dialogs/a11yhelp.js | 0 .../dialogs/lang/_translationstatus.txt | 0 .../plugins/a11yhelp/dialogs/lang/af.js | 0 .../plugins/a11yhelp/dialogs/lang/ar.js | 0 .../plugins/a11yhelp/dialogs/lang/az.js | 0 .../plugins/a11yhelp/dialogs/lang/bg.js | 0 .../plugins/a11yhelp/dialogs/lang/ca.js | 0 .../plugins/a11yhelp/dialogs/lang/cs.js | 0 .../plugins/a11yhelp/dialogs/lang/cy.js | 0 .../plugins/a11yhelp/dialogs/lang/da.js | 0 .../plugins/a11yhelp/dialogs/lang/de-ch.js | 0 .../plugins/a11yhelp/dialogs/lang/de.js | 0 .../plugins/a11yhelp/dialogs/lang/el.js | 0 .../plugins/a11yhelp/dialogs/lang/en-gb.js | 0 .../plugins/a11yhelp/dialogs/lang/en.js | 0 .../plugins/a11yhelp/dialogs/lang/eo.js | 0 .../plugins/a11yhelp/dialogs/lang/es-mx.js | 0 .../plugins/a11yhelp/dialogs/lang/es.js | 0 .../plugins/a11yhelp/dialogs/lang/et.js | 0 .../plugins/a11yhelp/dialogs/lang/eu.js | 0 .../plugins/a11yhelp/dialogs/lang/fa.js | 0 .../plugins/a11yhelp/dialogs/lang/fi.js | 0 .../plugins/a11yhelp/dialogs/lang/fo.js | 0 .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 0 .../plugins/a11yhelp/dialogs/lang/fr.js | 0 .../plugins/a11yhelp/dialogs/lang/gl.js | 0 .../plugins/a11yhelp/dialogs/lang/gu.js | 0 .../plugins/a11yhelp/dialogs/lang/he.js | 0 .../plugins/a11yhelp/dialogs/lang/hi.js | 0 .../plugins/a11yhelp/dialogs/lang/hr.js | 0 .../plugins/a11yhelp/dialogs/lang/hu.js | 0 .../plugins/a11yhelp/dialogs/lang/id.js | 0 .../plugins/a11yhelp/dialogs/lang/it.js | 0 .../plugins/a11yhelp/dialogs/lang/ja.js | 0 .../plugins/a11yhelp/dialogs/lang/km.js | 0 .../plugins/a11yhelp/dialogs/lang/ko.js | 0 .../plugins/a11yhelp/dialogs/lang/ku.js | 0 .../plugins/a11yhelp/dialogs/lang/lt.js | 0 .../plugins/a11yhelp/dialogs/lang/lv.js | 0 .../plugins/a11yhelp/dialogs/lang/mk.js | 0 .../plugins/a11yhelp/dialogs/lang/mn.js | 0 .../plugins/a11yhelp/dialogs/lang/nb.js | 0 .../plugins/a11yhelp/dialogs/lang/nl.js | 0 .../plugins/a11yhelp/dialogs/lang/no.js | 0 .../plugins/a11yhelp/dialogs/lang/oc.js | 0 .../plugins/a11yhelp/dialogs/lang/pl.js | 0 .../plugins/a11yhelp/dialogs/lang/pt-br.js | 0 .../plugins/a11yhelp/dialogs/lang/pt.js | 0 .../plugins/a11yhelp/dialogs/lang/ro.js | 0 .../plugins/a11yhelp/dialogs/lang/ru.js | 0 .../plugins/a11yhelp/dialogs/lang/si.js | 0 .../plugins/a11yhelp/dialogs/lang/sk.js | 0 .../plugins/a11yhelp/dialogs/lang/sl.js | 0 .../plugins/a11yhelp/dialogs/lang/sq.js | 0 .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 0 .../plugins/a11yhelp/dialogs/lang/sr.js | 0 .../plugins/a11yhelp/dialogs/lang/sv.js | 0 .../plugins/a11yhelp/dialogs/lang/th.js | 0 .../plugins/a11yhelp/dialogs/lang/tr.js | 0 .../plugins/a11yhelp/dialogs/lang/tt.js | 0 .../plugins/a11yhelp/dialogs/lang/ug.js | 0 .../plugins/a11yhelp/dialogs/lang/uk.js | 0 .../plugins/a11yhelp/dialogs/lang/vi.js | 0 .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 0 .../plugins/a11yhelp/dialogs/lang/zh.js | 0 .../ckeditor/plugins/about/dialogs/about.js | 0 .../about/dialogs/hidpi/logo_ckeditor.png | Bin .../plugins/about/dialogs/logo_ckeditor.png | Bin .../ckeditor/plugins/adobeair/plugin.js | 0 .../ckeditor/plugins/ajax/plugin.js | 0 .../ckeditor/plugins/autoembed/lang/az.js | 0 .../ckeditor/plugins/autoembed/lang/ca.js | 0 .../ckeditor/plugins/autoembed/lang/cs.js | 0 .../ckeditor/plugins/autoembed/lang/de-ch.js | 0 .../ckeditor/plugins/autoembed/lang/de.js | 0 .../ckeditor/plugins/autoembed/lang/en.js | 0 .../ckeditor/plugins/autoembed/lang/eo.js | 0 .../ckeditor/plugins/autoembed/lang/es-mx.js | 0 .../ckeditor/plugins/autoembed/lang/es.js | 0 .../ckeditor/plugins/autoembed/lang/eu.js | 0 .../ckeditor/plugins/autoembed/lang/fr.js | 0 .../ckeditor/plugins/autoembed/lang/gl.js | 0 .../ckeditor/plugins/autoembed/lang/hr.js | 0 .../ckeditor/plugins/autoembed/lang/hu.js | 0 .../ckeditor/plugins/autoembed/lang/it.js | 0 .../ckeditor/plugins/autoembed/lang/ja.js | 0 .../ckeditor/plugins/autoembed/lang/km.js | 0 .../ckeditor/plugins/autoembed/lang/ko.js | 0 .../ckeditor/plugins/autoembed/lang/ku.js | 0 .../ckeditor/plugins/autoembed/lang/mk.js | 0 .../ckeditor/plugins/autoembed/lang/nb.js | 0 .../ckeditor/plugins/autoembed/lang/nl.js | 0 .../ckeditor/plugins/autoembed/lang/oc.js | 0 .../ckeditor/plugins/autoembed/lang/pl.js | 0 .../ckeditor/plugins/autoembed/lang/pt-br.js | 0 .../ckeditor/plugins/autoembed/lang/pt.js | 0 .../ckeditor/plugins/autoembed/lang/ru.js | 0 .../ckeditor/plugins/autoembed/lang/sk.js | 0 .../ckeditor/plugins/autoembed/lang/sv.js | 0 .../ckeditor/plugins/autoembed/lang/tr.js | 0 .../ckeditor/plugins/autoembed/lang/ug.js | 0 .../ckeditor/plugins/autoembed/lang/uk.js | 0 .../ckeditor/plugins/autoembed/lang/zh-cn.js | 0 .../ckeditor/plugins/autoembed/lang/zh.js | 0 .../ckeditor/plugins/autoembed/plugin.js | 0 .../ckeditor/plugins/autogrow/plugin.js | 0 .../ckeditor/plugins/autolink/plugin.js | 0 .../ckeditor/plugins/balloonpanel/plugin.js | 0 .../balloonpanel/skins/kama/balloonpanel.css | 0 .../skins/moono-lisa/balloonpanel.css | 0 .../skins/moono-lisa/images/close.png | Bin .../skins/moono-lisa/images/hidpi/close.png | Bin .../balloonpanel/skins/moono/balloonpanel.css | 0 .../balloonpanel/skins/moono/images/close.png | Bin .../skins/moono/images/hidpi/close.png | Bin .../ckeditor/plugins/bbcode/plugin.js | 0 .../ckeditor/plugins/bidi/icons/bidiltr.png | Bin .../ckeditor/plugins/bidi/icons/bidirtl.png | Bin .../plugins/bidi/icons/hidpi/bidiltr.png | Bin .../plugins/bidi/icons/hidpi/bidirtl.png | Bin .../ckeditor/plugins/bidi/lang/af.js | 0 .../ckeditor/plugins/bidi/lang/ar.js | 0 .../ckeditor/plugins/bidi/lang/az.js | 0 .../ckeditor/plugins/bidi/lang/bg.js | 0 .../ckeditor/plugins/bidi/lang/bn.js | 0 .../ckeditor/plugins/bidi/lang/bs.js | 0 .../ckeditor/plugins/bidi/lang/ca.js | 0 .../ckeditor/plugins/bidi/lang/cs.js | 0 .../ckeditor/plugins/bidi/lang/cy.js | 0 .../ckeditor/plugins/bidi/lang/da.js | 0 .../ckeditor/plugins/bidi/lang/de-ch.js | 0 .../ckeditor/plugins/bidi/lang/de.js | 0 .../ckeditor/plugins/bidi/lang/el.js | 0 .../ckeditor/plugins/bidi/lang/en-au.js | 0 .../ckeditor/plugins/bidi/lang/en-ca.js | 0 .../ckeditor/plugins/bidi/lang/en-gb.js | 0 .../ckeditor/plugins/bidi/lang/en.js | 0 .../ckeditor/plugins/bidi/lang/eo.js | 0 .../ckeditor/plugins/bidi/lang/es-mx.js | 0 .../ckeditor/plugins/bidi/lang/es.js | 0 .../ckeditor/plugins/bidi/lang/et.js | 0 .../ckeditor/plugins/bidi/lang/eu.js | 0 .../ckeditor/plugins/bidi/lang/fa.js | 0 .../ckeditor/plugins/bidi/lang/fi.js | 0 .../ckeditor/plugins/bidi/lang/fo.js | 0 .../ckeditor/plugins/bidi/lang/fr-ca.js | 0 .../ckeditor/plugins/bidi/lang/fr.js | 0 .../ckeditor/plugins/bidi/lang/gl.js | 0 .../ckeditor/plugins/bidi/lang/gu.js | 0 .../ckeditor/plugins/bidi/lang/he.js | 0 .../ckeditor/plugins/bidi/lang/hi.js | 0 .../ckeditor/plugins/bidi/lang/hr.js | 0 .../ckeditor/plugins/bidi/lang/hu.js | 0 .../ckeditor/plugins/bidi/lang/id.js | 0 .../ckeditor/plugins/bidi/lang/is.js | 0 .../ckeditor/plugins/bidi/lang/it.js | 0 .../ckeditor/plugins/bidi/lang/ja.js | 0 .../ckeditor/plugins/bidi/lang/ka.js | 0 .../ckeditor/plugins/bidi/lang/km.js | 0 .../ckeditor/plugins/bidi/lang/ko.js | 0 .../ckeditor/plugins/bidi/lang/ku.js | 0 .../ckeditor/plugins/bidi/lang/lt.js | 0 .../ckeditor/plugins/bidi/lang/lv.js | 0 .../ckeditor/plugins/bidi/lang/mk.js | 0 .../ckeditor/plugins/bidi/lang/mn.js | 0 .../ckeditor/plugins/bidi/lang/ms.js | 0 .../ckeditor/plugins/bidi/lang/nb.js | 0 .../ckeditor/plugins/bidi/lang/nl.js | 0 .../ckeditor/plugins/bidi/lang/no.js | 0 .../ckeditor/plugins/bidi/lang/oc.js | 0 .../ckeditor/plugins/bidi/lang/pl.js | 0 .../ckeditor/plugins/bidi/lang/pt-br.js | 0 .../ckeditor/plugins/bidi/lang/pt.js | 0 .../ckeditor/plugins/bidi/lang/ro.js | 0 .../ckeditor/plugins/bidi/lang/ru.js | 0 .../ckeditor/plugins/bidi/lang/si.js | 0 .../ckeditor/plugins/bidi/lang/sk.js | 0 .../ckeditor/plugins/bidi/lang/sl.js | 0 .../ckeditor/plugins/bidi/lang/sq.js | 0 .../ckeditor/plugins/bidi/lang/sr-latn.js | 0 .../ckeditor/plugins/bidi/lang/sr.js | 0 .../ckeditor/plugins/bidi/lang/sv.js | 0 .../ckeditor/plugins/bidi/lang/th.js | 0 .../ckeditor/plugins/bidi/lang/tr.js | 0 .../ckeditor/plugins/bidi/lang/tt.js | 0 .../ckeditor/plugins/bidi/lang/ug.js | 0 .../ckeditor/plugins/bidi/lang/uk.js | 0 .../ckeditor/plugins/bidi/lang/vi.js | 0 .../ckeditor/plugins/bidi/lang/zh-cn.js | 0 .../ckeditor/plugins/bidi/lang/zh.js | 0 .../ckeditor/plugins/bidi/plugin.js | 0 .../codesnippet/dialogs/codesnippet.js | 0 .../plugins/codesnippet/icons/codesnippet.png | Bin .../codesnippet/icons/hidpi/codesnippet.png | Bin .../ckeditor/plugins/codesnippet/lang/ar.js | 0 .../ckeditor/plugins/codesnippet/lang/az.js | 0 .../ckeditor/plugins/codesnippet/lang/bg.js | 0 .../ckeditor/plugins/codesnippet/lang/ca.js | 0 .../ckeditor/plugins/codesnippet/lang/cs.js | 0 .../ckeditor/plugins/codesnippet/lang/da.js | 0 .../plugins/codesnippet/lang/de-ch.js | 0 .../ckeditor/plugins/codesnippet/lang/de.js | 0 .../ckeditor/plugins/codesnippet/lang/el.js | 0 .../plugins/codesnippet/lang/en-gb.js | 0 .../ckeditor/plugins/codesnippet/lang/en.js | 0 .../ckeditor/plugins/codesnippet/lang/eo.js | 0 .../plugins/codesnippet/lang/es-mx.js | 0 .../ckeditor/plugins/codesnippet/lang/es.js | 0 .../ckeditor/plugins/codesnippet/lang/et.js | 0 .../ckeditor/plugins/codesnippet/lang/eu.js | 0 .../ckeditor/plugins/codesnippet/lang/fa.js | 0 .../ckeditor/plugins/codesnippet/lang/fi.js | 0 .../plugins/codesnippet/lang/fr-ca.js | 0 .../ckeditor/plugins/codesnippet/lang/fr.js | 0 .../ckeditor/plugins/codesnippet/lang/gl.js | 0 .../ckeditor/plugins/codesnippet/lang/he.js | 0 .../ckeditor/plugins/codesnippet/lang/hr.js | 0 .../ckeditor/plugins/codesnippet/lang/hu.js | 0 .../ckeditor/plugins/codesnippet/lang/id.js | 0 .../ckeditor/plugins/codesnippet/lang/it.js | 0 .../ckeditor/plugins/codesnippet/lang/ja.js | 0 .../ckeditor/plugins/codesnippet/lang/km.js | 0 .../ckeditor/plugins/codesnippet/lang/ko.js | 0 .../ckeditor/plugins/codesnippet/lang/ku.js | 0 .../ckeditor/plugins/codesnippet/lang/lt.js | 0 .../ckeditor/plugins/codesnippet/lang/lv.js | 0 .../ckeditor/plugins/codesnippet/lang/nb.js | 0 .../ckeditor/plugins/codesnippet/lang/nl.js | 0 .../ckeditor/plugins/codesnippet/lang/no.js | 0 .../ckeditor/plugins/codesnippet/lang/oc.js | 0 .../ckeditor/plugins/codesnippet/lang/pl.js | 0 .../plugins/codesnippet/lang/pt-br.js | 0 .../ckeditor/plugins/codesnippet/lang/pt.js | 0 .../ckeditor/plugins/codesnippet/lang/ro.js | 0 .../ckeditor/plugins/codesnippet/lang/ru.js | 0 .../ckeditor/plugins/codesnippet/lang/sk.js | 0 .../ckeditor/plugins/codesnippet/lang/sl.js | 0 .../ckeditor/plugins/codesnippet/lang/sq.js | 0 .../ckeditor/plugins/codesnippet/lang/sv.js | 0 .../ckeditor/plugins/codesnippet/lang/th.js | 0 .../ckeditor/plugins/codesnippet/lang/tr.js | 0 .../ckeditor/plugins/codesnippet/lang/tt.js | 0 .../ckeditor/plugins/codesnippet/lang/ug.js | 0 .../ckeditor/plugins/codesnippet/lang/uk.js | 0 .../ckeditor/plugins/codesnippet/lang/vi.js | 0 .../plugins/codesnippet/lang/zh-cn.js | 0 .../ckeditor/plugins/codesnippet/lang/zh.js | 0 .../codesnippet/lib/highlight/CHANGES.md | 0 .../plugins/codesnippet/lib/highlight/LICENSE | 0 .../codesnippet/lib/highlight/README.ru.md | 0 .../lib/highlight/highlight.pack.js | 0 .../codesnippet/lib/highlight/styles/arta.css | 0 .../lib/highlight/styles/ascetic.css | 0 .../highlight/styles/atelier-dune.dark.css | 0 .../highlight/styles/atelier-dune.light.css | 0 .../highlight/styles/atelier-forest.dark.css | 0 .../highlight/styles/atelier-forest.light.css | 0 .../highlight/styles/atelier-heath.dark.css | 0 .../highlight/styles/atelier-heath.light.css | 0 .../styles/atelier-lakeside.dark.css | 0 .../styles/atelier-lakeside.light.css | 0 .../highlight/styles/atelier-seaside.dark.css | 0 .../styles/atelier-seaside.light.css | 0 .../lib/highlight/styles/brown_paper.css | 0 .../lib/highlight/styles/brown_papersq.png | Bin .../codesnippet/lib/highlight/styles/dark.css | 0 .../lib/highlight/styles/default.css | 0 .../lib/highlight/styles/docco.css | 0 .../codesnippet/lib/highlight/styles/far.css | 0 .../lib/highlight/styles/foundation.css | 0 .../lib/highlight/styles/github.css | 0 .../lib/highlight/styles/googlecode.css | 0 .../codesnippet/lib/highlight/styles/idea.css | 0 .../lib/highlight/styles/ir_black.css | 0 .../lib/highlight/styles/magula.css | 0 .../lib/highlight/styles/mono-blue.css | 0 .../lib/highlight/styles/monokai.css | 0 .../lib/highlight/styles/monokai_sublime.css | 0 .../lib/highlight/styles/obsidian.css | 0 .../lib/highlight/styles/paraiso.dark.css | 0 .../lib/highlight/styles/paraiso.light.css | 0 .../lib/highlight/styles/pojoaque.css | 0 .../lib/highlight/styles/pojoaque.jpg | Bin .../lib/highlight/styles/railscasts.css | 0 .../lib/highlight/styles/rainbow.css | 0 .../lib/highlight/styles/school_book.css | 0 .../lib/highlight/styles/school_book.png | Bin .../lib/highlight/styles/solarized_dark.css | 0 .../lib/highlight/styles/solarized_light.css | 0 .../lib/highlight/styles/sunburst.css | 0 .../highlight/styles/tomorrow-night-blue.css | 0 .../styles/tomorrow-night-bright.css | 0 .../styles/tomorrow-night-eighties.css | 0 .../lib/highlight/styles/tomorrow-night.css | 0 .../lib/highlight/styles/tomorrow.css | 0 .../codesnippet/lib/highlight/styles/vs.css | 0 .../lib/highlight/styles/xcode.css | 0 .../lib/highlight/styles/zenburn.css | 0 .../ckeditor/plugins/codesnippet/plugin.js | 0 .../plugins/codesnippetgeshi/plugin.js | 0 .../plugins/colorbutton/icons/bgcolor.png | Bin .../colorbutton/icons/hidpi/bgcolor.png | Bin .../colorbutton/icons/hidpi/textcolor.png | Bin .../plugins/colorbutton/icons/textcolor.png | Bin .../ckeditor/plugins/colorbutton/lang/af.js | 0 .../ckeditor/plugins/colorbutton/lang/ar.js | 0 .../ckeditor/plugins/colorbutton/lang/az.js | 0 .../ckeditor/plugins/colorbutton/lang/bg.js | 0 .../ckeditor/plugins/colorbutton/lang/bn.js | 0 .../ckeditor/plugins/colorbutton/lang/bs.js | 0 .../ckeditor/plugins/colorbutton/lang/ca.js | 0 .../ckeditor/plugins/colorbutton/lang/cs.js | 0 .../ckeditor/plugins/colorbutton/lang/cy.js | 0 .../ckeditor/plugins/colorbutton/lang/da.js | 0 .../plugins/colorbutton/lang/de-ch.js | 0 .../ckeditor/plugins/colorbutton/lang/de.js | 0 .../ckeditor/plugins/colorbutton/lang/el.js | 0 .../plugins/colorbutton/lang/en-au.js | 0 .../plugins/colorbutton/lang/en-ca.js | 0 .../plugins/colorbutton/lang/en-gb.js | 0 .../ckeditor/plugins/colorbutton/lang/en.js | 0 .../ckeditor/plugins/colorbutton/lang/eo.js | 0 .../plugins/colorbutton/lang/es-mx.js | 0 .../ckeditor/plugins/colorbutton/lang/es.js | 0 .../ckeditor/plugins/colorbutton/lang/et.js | 0 .../ckeditor/plugins/colorbutton/lang/eu.js | 0 .../ckeditor/plugins/colorbutton/lang/fa.js | 0 .../ckeditor/plugins/colorbutton/lang/fi.js | 0 .../ckeditor/plugins/colorbutton/lang/fo.js | 0 .../plugins/colorbutton/lang/fr-ca.js | 0 .../ckeditor/plugins/colorbutton/lang/fr.js | 0 .../ckeditor/plugins/colorbutton/lang/gl.js | 0 .../ckeditor/plugins/colorbutton/lang/gu.js | 0 .../ckeditor/plugins/colorbutton/lang/he.js | 0 .../ckeditor/plugins/colorbutton/lang/hi.js | 0 .../ckeditor/plugins/colorbutton/lang/hr.js | 0 .../ckeditor/plugins/colorbutton/lang/hu.js | 0 .../ckeditor/plugins/colorbutton/lang/id.js | 0 .../ckeditor/plugins/colorbutton/lang/is.js | 0 .../ckeditor/plugins/colorbutton/lang/it.js | 0 .../ckeditor/plugins/colorbutton/lang/ja.js | 0 .../ckeditor/plugins/colorbutton/lang/ka.js | 0 .../ckeditor/plugins/colorbutton/lang/km.js | 0 .../ckeditor/plugins/colorbutton/lang/ko.js | 0 .../ckeditor/plugins/colorbutton/lang/ku.js | 0 .../ckeditor/plugins/colorbutton/lang/lt.js | 0 .../ckeditor/plugins/colorbutton/lang/lv.js | 0 .../ckeditor/plugins/colorbutton/lang/mk.js | 0 .../ckeditor/plugins/colorbutton/lang/mn.js | 0 .../ckeditor/plugins/colorbutton/lang/ms.js | 0 .../ckeditor/plugins/colorbutton/lang/nb.js | 0 .../ckeditor/plugins/colorbutton/lang/nl.js | 0 .../ckeditor/plugins/colorbutton/lang/no.js | 0 .../ckeditor/plugins/colorbutton/lang/oc.js | 0 .../ckeditor/plugins/colorbutton/lang/pl.js | 0 .../plugins/colorbutton/lang/pt-br.js | 0 .../ckeditor/plugins/colorbutton/lang/pt.js | 0 .../ckeditor/plugins/colorbutton/lang/ro.js | 0 .../ckeditor/plugins/colorbutton/lang/ru.js | 0 .../ckeditor/plugins/colorbutton/lang/si.js | 0 .../ckeditor/plugins/colorbutton/lang/sk.js | 0 .../ckeditor/plugins/colorbutton/lang/sl.js | 0 .../ckeditor/plugins/colorbutton/lang/sq.js | 0 .../plugins/colorbutton/lang/sr-latn.js | 0 .../ckeditor/plugins/colorbutton/lang/sr.js | 0 .../ckeditor/plugins/colorbutton/lang/sv.js | 0 .../ckeditor/plugins/colorbutton/lang/th.js | 0 .../ckeditor/plugins/colorbutton/lang/tr.js | 0 .../ckeditor/plugins/colorbutton/lang/tt.js | 0 .../ckeditor/plugins/colorbutton/lang/ug.js | 0 .../ckeditor/plugins/colorbutton/lang/uk.js | 0 .../ckeditor/plugins/colorbutton/lang/vi.js | 0 .../plugins/colorbutton/lang/zh-cn.js | 0 .../ckeditor/plugins/colorbutton/lang/zh.js | 0 .../ckeditor/plugins/colorbutton/plugin.js | 0 .../colordialog/dialogs/colordialog.css | 0 .../colordialog/dialogs/colordialog.js | 0 .../ckeditor/plugins/colordialog/lang/af.js | 0 .../ckeditor/plugins/colordialog/lang/ar.js | 0 .../ckeditor/plugins/colordialog/lang/az.js | 0 .../ckeditor/plugins/colordialog/lang/bg.js | 0 .../ckeditor/plugins/colordialog/lang/bn.js | 0 .../ckeditor/plugins/colordialog/lang/bs.js | 0 .../ckeditor/plugins/colordialog/lang/ca.js | 0 .../ckeditor/plugins/colordialog/lang/cs.js | 0 .../ckeditor/plugins/colordialog/lang/cy.js | 0 .../ckeditor/plugins/colordialog/lang/da.js | 0 .../plugins/colordialog/lang/de-ch.js | 0 .../ckeditor/plugins/colordialog/lang/de.js | 0 .../ckeditor/plugins/colordialog/lang/el.js | 0 .../plugins/colordialog/lang/en-au.js | 0 .../plugins/colordialog/lang/en-ca.js | 0 .../plugins/colordialog/lang/en-gb.js | 0 .../ckeditor/plugins/colordialog/lang/en.js | 0 .../ckeditor/plugins/colordialog/lang/eo.js | 0 .../plugins/colordialog/lang/es-mx.js | 0 .../ckeditor/plugins/colordialog/lang/es.js | 0 .../ckeditor/plugins/colordialog/lang/et.js | 0 .../ckeditor/plugins/colordialog/lang/eu.js | 0 .../ckeditor/plugins/colordialog/lang/fa.js | 0 .../ckeditor/plugins/colordialog/lang/fi.js | 0 .../ckeditor/plugins/colordialog/lang/fo.js | 0 .../plugins/colordialog/lang/fr-ca.js | 0 .../ckeditor/plugins/colordialog/lang/fr.js | 0 .../ckeditor/plugins/colordialog/lang/gl.js | 0 .../ckeditor/plugins/colordialog/lang/gu.js | 0 .../ckeditor/plugins/colordialog/lang/he.js | 0 .../ckeditor/plugins/colordialog/lang/hi.js | 0 .../ckeditor/plugins/colordialog/lang/hr.js | 0 .../ckeditor/plugins/colordialog/lang/hu.js | 0 .../ckeditor/plugins/colordialog/lang/id.js | 0 .../ckeditor/plugins/colordialog/lang/is.js | 0 .../ckeditor/plugins/colordialog/lang/it.js | 0 .../ckeditor/plugins/colordialog/lang/ja.js | 0 .../ckeditor/plugins/colordialog/lang/ka.js | 0 .../ckeditor/plugins/colordialog/lang/km.js | 0 .../ckeditor/plugins/colordialog/lang/ko.js | 0 .../ckeditor/plugins/colordialog/lang/ku.js | 0 .../ckeditor/plugins/colordialog/lang/lt.js | 0 .../ckeditor/plugins/colordialog/lang/lv.js | 0 .../ckeditor/plugins/colordialog/lang/mk.js | 0 .../ckeditor/plugins/colordialog/lang/mn.js | 0 .../ckeditor/plugins/colordialog/lang/ms.js | 0 .../ckeditor/plugins/colordialog/lang/nb.js | 0 .../ckeditor/plugins/colordialog/lang/nl.js | 0 .../ckeditor/plugins/colordialog/lang/no.js | 0 .../ckeditor/plugins/colordialog/lang/oc.js | 0 .../ckeditor/plugins/colordialog/lang/pl.js | 0 .../plugins/colordialog/lang/pt-br.js | 0 .../ckeditor/plugins/colordialog/lang/pt.js | 0 .../ckeditor/plugins/colordialog/lang/ro.js | 0 .../ckeditor/plugins/colordialog/lang/ru.js | 0 .../ckeditor/plugins/colordialog/lang/si.js | 0 .../ckeditor/plugins/colordialog/lang/sk.js | 0 .../ckeditor/plugins/colordialog/lang/sl.js | 0 .../ckeditor/plugins/colordialog/lang/sq.js | 0 .../plugins/colordialog/lang/sr-latn.js | 0 .../ckeditor/plugins/colordialog/lang/sr.js | 0 .../ckeditor/plugins/colordialog/lang/sv.js | 0 .../ckeditor/plugins/colordialog/lang/th.js | 0 .../ckeditor/plugins/colordialog/lang/tr.js | 0 .../ckeditor/plugins/colordialog/lang/tt.js | 0 .../ckeditor/plugins/colordialog/lang/ug.js | 0 .../ckeditor/plugins/colordialog/lang/uk.js | 0 .../ckeditor/plugins/colordialog/lang/vi.js | 0 .../plugins/colordialog/lang/zh-cn.js | 0 .../ckeditor/plugins/colordialog/lang/zh.js | 0 .../ckeditor/plugins/colordialog/plugin.js | 0 .../cursors/cursor-disabled.svg | 0 .../plugins/copyformatting/cursors/cursor.svg | 0 .../copyformatting/icons/copyformatting.png | Bin .../icons/hidpi/copyformatting.png | Bin .../plugins/copyformatting/lang/az.js | 0 .../plugins/copyformatting/lang/de.js | 0 .../plugins/copyformatting/lang/en.js | 0 .../plugins/copyformatting/lang/it.js | 0 .../plugins/copyformatting/lang/ja.js | 0 .../plugins/copyformatting/lang/nb.js | 0 .../plugins/copyformatting/lang/nl.js | 0 .../plugins/copyformatting/lang/oc.js | 0 .../plugins/copyformatting/lang/pl.js | 0 .../plugins/copyformatting/lang/pt-br.js | 0 .../plugins/copyformatting/lang/ru.js | 0 .../plugins/copyformatting/lang/sv.js | 0 .../plugins/copyformatting/lang/tr.js | 0 .../plugins/copyformatting/lang/zh-cn.js | 0 .../plugins/copyformatting/lang/zh.js | 0 .../ckeditor/plugins/copyformatting/plugin.js | 0 .../copyformatting/styles/copyformatting.css | 0 .../devtools/lang/_translationstatus.txt | 0 .../ckeditor/plugins/devtools/lang/ar.js | 0 .../ckeditor/plugins/devtools/lang/az.js | 0 .../ckeditor/plugins/devtools/lang/bg.js | 0 .../ckeditor/plugins/devtools/lang/ca.js | 0 .../ckeditor/plugins/devtools/lang/cs.js | 0 .../ckeditor/plugins/devtools/lang/cy.js | 0 .../ckeditor/plugins/devtools/lang/da.js | 0 .../ckeditor/plugins/devtools/lang/de-ch.js | 0 .../ckeditor/plugins/devtools/lang/de.js | 0 .../ckeditor/plugins/devtools/lang/el.js | 0 .../ckeditor/plugins/devtools/lang/en-gb.js | 0 .../ckeditor/plugins/devtools/lang/en.js | 0 .../ckeditor/plugins/devtools/lang/eo.js | 0 .../ckeditor/plugins/devtools/lang/es-mx.js | 0 .../ckeditor/plugins/devtools/lang/es.js | 0 .../ckeditor/plugins/devtools/lang/et.js | 0 .../ckeditor/plugins/devtools/lang/eu.js | 0 .../ckeditor/plugins/devtools/lang/fa.js | 0 .../ckeditor/plugins/devtools/lang/fi.js | 0 .../ckeditor/plugins/devtools/lang/fr-ca.js | 0 .../ckeditor/plugins/devtools/lang/fr.js | 0 .../ckeditor/plugins/devtools/lang/gl.js | 0 .../ckeditor/plugins/devtools/lang/gu.js | 0 .../ckeditor/plugins/devtools/lang/he.js | 0 .../ckeditor/plugins/devtools/lang/hr.js | 0 .../ckeditor/plugins/devtools/lang/hu.js | 0 .../ckeditor/plugins/devtools/lang/id.js | 0 .../ckeditor/plugins/devtools/lang/it.js | 0 .../ckeditor/plugins/devtools/lang/ja.js | 0 .../ckeditor/plugins/devtools/lang/km.js | 0 .../ckeditor/plugins/devtools/lang/ko.js | 0 .../ckeditor/plugins/devtools/lang/ku.js | 0 .../ckeditor/plugins/devtools/lang/lt.js | 0 .../ckeditor/plugins/devtools/lang/lv.js | 0 .../ckeditor/plugins/devtools/lang/nb.js | 0 .../ckeditor/plugins/devtools/lang/nl.js | 0 .../ckeditor/plugins/devtools/lang/no.js | 0 .../ckeditor/plugins/devtools/lang/oc.js | 0 .../ckeditor/plugins/devtools/lang/pl.js | 0 .../ckeditor/plugins/devtools/lang/pt-br.js | 0 .../ckeditor/plugins/devtools/lang/pt.js | 0 .../ckeditor/plugins/devtools/lang/ro.js | 0 .../ckeditor/plugins/devtools/lang/ru.js | 0 .../ckeditor/plugins/devtools/lang/si.js | 0 .../ckeditor/plugins/devtools/lang/sk.js | 0 .../ckeditor/plugins/devtools/lang/sl.js | 0 .../ckeditor/plugins/devtools/lang/sq.js | 0 .../ckeditor/plugins/devtools/lang/sv.js | 0 .../ckeditor/plugins/devtools/lang/tr.js | 0 .../ckeditor/plugins/devtools/lang/tt.js | 0 .../ckeditor/plugins/devtools/lang/ug.js | 0 .../ckeditor/plugins/devtools/lang/uk.js | 0 .../ckeditor/plugins/devtools/lang/vi.js | 0 .../ckeditor/plugins/devtools/lang/zh-cn.js | 0 .../ckeditor/plugins/devtools/lang/zh.js | 0 .../ckeditor/plugins/devtools/plugin.js | 0 .../plugins/dialog/dialogDefinition.js | 0 .../ckeditor/plugins/dialogadvtab/plugin.js | 0 .../ckeditor/plugins/div/dialogs/div.js | 0 .../ckeditor/plugins/div/icons/creatediv.png | Bin .../plugins/div/icons/hidpi/creatediv.png | Bin .../ckeditor/plugins/div/lang/af.js | 0 .../ckeditor/plugins/div/lang/ar.js | 0 .../ckeditor/plugins/div/lang/az.js | 0 .../ckeditor/plugins/div/lang/bg.js | 0 .../ckeditor/plugins/div/lang/bn.js | 0 .../ckeditor/plugins/div/lang/bs.js | 0 .../ckeditor/plugins/div/lang/ca.js | 0 .../ckeditor/plugins/div/lang/cs.js | 0 .../ckeditor/plugins/div/lang/cy.js | 0 .../ckeditor/plugins/div/lang/da.js | 0 .../ckeditor/plugins/div/lang/de-ch.js | 0 .../ckeditor/plugins/div/lang/de.js | 0 .../ckeditor/plugins/div/lang/el.js | 0 .../ckeditor/plugins/div/lang/en-au.js | 0 .../ckeditor/plugins/div/lang/en-ca.js | 0 .../ckeditor/plugins/div/lang/en-gb.js | 0 .../ckeditor/plugins/div/lang/en.js | 0 .../ckeditor/plugins/div/lang/eo.js | 0 .../ckeditor/plugins/div/lang/es-mx.js | 0 .../ckeditor/plugins/div/lang/es.js | 0 .../ckeditor/plugins/div/lang/et.js | 0 .../ckeditor/plugins/div/lang/eu.js | 0 .../ckeditor/plugins/div/lang/fa.js | 0 .../ckeditor/plugins/div/lang/fi.js | 0 .../ckeditor/plugins/div/lang/fo.js | 0 .../ckeditor/plugins/div/lang/fr-ca.js | 0 .../ckeditor/plugins/div/lang/fr.js | 0 .../ckeditor/plugins/div/lang/gl.js | 0 .../ckeditor/plugins/div/lang/gu.js | 0 .../ckeditor/plugins/div/lang/he.js | 0 .../ckeditor/plugins/div/lang/hi.js | 0 .../ckeditor/plugins/div/lang/hr.js | 0 .../ckeditor/plugins/div/lang/hu.js | 0 .../ckeditor/plugins/div/lang/id.js | 0 .../ckeditor/plugins/div/lang/is.js | 0 .../ckeditor/plugins/div/lang/it.js | 0 .../ckeditor/plugins/div/lang/ja.js | 0 .../ckeditor/plugins/div/lang/ka.js | 0 .../ckeditor/plugins/div/lang/km.js | 0 .../ckeditor/plugins/div/lang/ko.js | 0 .../ckeditor/plugins/div/lang/ku.js | 0 .../ckeditor/plugins/div/lang/lt.js | 0 .../ckeditor/plugins/div/lang/lv.js | 0 .../ckeditor/plugins/div/lang/mk.js | 0 .../ckeditor/plugins/div/lang/mn.js | 0 .../ckeditor/plugins/div/lang/ms.js | 0 .../ckeditor/plugins/div/lang/nb.js | 0 .../ckeditor/plugins/div/lang/nl.js | 0 .../ckeditor/plugins/div/lang/no.js | 0 .../ckeditor/plugins/div/lang/oc.js | 0 .../ckeditor/plugins/div/lang/pl.js | 0 .../ckeditor/plugins/div/lang/pt-br.js | 0 .../ckeditor/plugins/div/lang/pt.js | 0 .../ckeditor/plugins/div/lang/ro.js | 0 .../ckeditor/plugins/div/lang/ru.js | 0 .../ckeditor/plugins/div/lang/si.js | 0 .../ckeditor/plugins/div/lang/sk.js | 0 .../ckeditor/plugins/div/lang/sl.js | 0 .../ckeditor/plugins/div/lang/sq.js | 0 .../ckeditor/plugins/div/lang/sr-latn.js | 0 .../ckeditor/plugins/div/lang/sr.js | 0 .../ckeditor/plugins/div/lang/sv.js | 0 .../ckeditor/plugins/div/lang/th.js | 0 .../ckeditor/plugins/div/lang/tr.js | 0 .../ckeditor/plugins/div/lang/tt.js | 0 .../ckeditor/plugins/div/lang/ug.js | 0 .../ckeditor/plugins/div/lang/uk.js | 0 .../ckeditor/plugins/div/lang/vi.js | 0 .../ckeditor/plugins/div/lang/zh-cn.js | 0 .../ckeditor/plugins/div/lang/zh.js | 0 .../ckeditor/plugins/div/plugin.js | 0 .../ckeditor/plugins/divarea/plugin.js | 0 .../plugins/docprops/dialogs/docprops.js | 0 .../plugins/docprops/icons/docprops-rtl.png | Bin .../plugins/docprops/icons/docprops.png | Bin .../docprops/icons/hidpi/docprops-rtl.png | Bin .../plugins/docprops/icons/hidpi/docprops.png | Bin .../ckeditor/plugins/docprops/lang/af.js | 0 .../ckeditor/plugins/docprops/lang/ar.js | 0 .../ckeditor/plugins/docprops/lang/az.js | 0 .../ckeditor/plugins/docprops/lang/bg.js | 0 .../ckeditor/plugins/docprops/lang/bn.js | 0 .../ckeditor/plugins/docprops/lang/bs.js | 0 .../ckeditor/plugins/docprops/lang/ca.js | 0 .../ckeditor/plugins/docprops/lang/cs.js | 0 .../ckeditor/plugins/docprops/lang/cy.js | 0 .../ckeditor/plugins/docprops/lang/da.js | 0 .../ckeditor/plugins/docprops/lang/de-ch.js | 0 .../ckeditor/plugins/docprops/lang/de.js | 0 .../ckeditor/plugins/docprops/lang/el.js | 0 .../ckeditor/plugins/docprops/lang/en-au.js | 0 .../ckeditor/plugins/docprops/lang/en-ca.js | 0 .../ckeditor/plugins/docprops/lang/en-gb.js | 0 .../ckeditor/plugins/docprops/lang/en.js | 0 .../ckeditor/plugins/docprops/lang/eo.js | 0 .../ckeditor/plugins/docprops/lang/es-mx.js | 0 .../ckeditor/plugins/docprops/lang/es.js | 0 .../ckeditor/plugins/docprops/lang/et.js | 0 .../ckeditor/plugins/docprops/lang/eu.js | 0 .../ckeditor/plugins/docprops/lang/fa.js | 0 .../ckeditor/plugins/docprops/lang/fi.js | 0 .../ckeditor/plugins/docprops/lang/fo.js | 0 .../ckeditor/plugins/docprops/lang/fr-ca.js | 0 .../ckeditor/plugins/docprops/lang/fr.js | 0 .../ckeditor/plugins/docprops/lang/gl.js | 0 .../ckeditor/plugins/docprops/lang/gu.js | 0 .../ckeditor/plugins/docprops/lang/he.js | 0 .../ckeditor/plugins/docprops/lang/hi.js | 0 .../ckeditor/plugins/docprops/lang/hr.js | 0 .../ckeditor/plugins/docprops/lang/hu.js | 0 .../ckeditor/plugins/docprops/lang/id.js | 0 .../ckeditor/plugins/docprops/lang/is.js | 0 .../ckeditor/plugins/docprops/lang/it.js | 0 .../ckeditor/plugins/docprops/lang/ja.js | 0 .../ckeditor/plugins/docprops/lang/ka.js | 0 .../ckeditor/plugins/docprops/lang/km.js | 0 .../ckeditor/plugins/docprops/lang/ko.js | 0 .../ckeditor/plugins/docprops/lang/ku.js | 0 .../ckeditor/plugins/docprops/lang/lt.js | 0 .../ckeditor/plugins/docprops/lang/lv.js | 0 .../ckeditor/plugins/docprops/lang/mk.js | 0 .../ckeditor/plugins/docprops/lang/mn.js | 0 .../ckeditor/plugins/docprops/lang/ms.js | 0 .../ckeditor/plugins/docprops/lang/nb.js | 0 .../ckeditor/plugins/docprops/lang/nl.js | 0 .../ckeditor/plugins/docprops/lang/no.js | 0 .../ckeditor/plugins/docprops/lang/oc.js | 0 .../ckeditor/plugins/docprops/lang/pl.js | 0 .../ckeditor/plugins/docprops/lang/pt-br.js | 0 .../ckeditor/plugins/docprops/lang/pt.js | 0 .../ckeditor/plugins/docprops/lang/ro.js | 0 .../ckeditor/plugins/docprops/lang/ru.js | 0 .../ckeditor/plugins/docprops/lang/si.js | 0 .../ckeditor/plugins/docprops/lang/sk.js | 0 .../ckeditor/plugins/docprops/lang/sl.js | 0 .../ckeditor/plugins/docprops/lang/sq.js | 0 .../ckeditor/plugins/docprops/lang/sr-latn.js | 0 .../ckeditor/plugins/docprops/lang/sr.js | 0 .../ckeditor/plugins/docprops/lang/sv.js | 0 .../ckeditor/plugins/docprops/lang/th.js | 0 .../ckeditor/plugins/docprops/lang/tr.js | 0 .../ckeditor/plugins/docprops/lang/tt.js | 0 .../ckeditor/plugins/docprops/lang/ug.js | 0 .../ckeditor/plugins/docprops/lang/uk.js | 0 .../ckeditor/plugins/docprops/lang/vi.js | 0 .../ckeditor/plugins/docprops/lang/zh-cn.js | 0 .../ckeditor/plugins/docprops/lang/zh.js | 0 .../ckeditor/plugins/docprops/plugin.js | 0 .../ckeditor/plugins/embed/icons/embed.png | Bin .../plugins/embed/icons/hidpi/embed.png | Bin .../ckeditor/plugins/embed/plugin.js | 0 .../plugins/embedbase/dialogs/embedbase.js | 0 .../ckeditor/plugins/embedbase/lang/az.js | 0 .../ckeditor/plugins/embedbase/lang/ca.js | 0 .../ckeditor/plugins/embedbase/lang/cs.js | 0 .../ckeditor/plugins/embedbase/lang/da.js | 0 .../ckeditor/plugins/embedbase/lang/de-ch.js | 0 .../ckeditor/plugins/embedbase/lang/de.js | 0 .../ckeditor/plugins/embedbase/lang/en.js | 0 .../ckeditor/plugins/embedbase/lang/eo.js | 0 .../ckeditor/plugins/embedbase/lang/es-mx.js | 0 .../ckeditor/plugins/embedbase/lang/es.js | 0 .../ckeditor/plugins/embedbase/lang/eu.js | 0 .../ckeditor/plugins/embedbase/lang/fr.js | 0 .../ckeditor/plugins/embedbase/lang/gl.js | 0 .../ckeditor/plugins/embedbase/lang/hr.js | 0 .../ckeditor/plugins/embedbase/lang/hu.js | 0 .../ckeditor/plugins/embedbase/lang/id.js | 0 .../ckeditor/plugins/embedbase/lang/it.js | 0 .../ckeditor/plugins/embedbase/lang/ja.js | 0 .../ckeditor/plugins/embedbase/lang/ko.js | 0 .../ckeditor/plugins/embedbase/lang/ku.js | 0 .../ckeditor/plugins/embedbase/lang/nb.js | 0 .../ckeditor/plugins/embedbase/lang/nl.js | 0 .../ckeditor/plugins/embedbase/lang/oc.js | 0 .../ckeditor/plugins/embedbase/lang/pl.js | 0 .../ckeditor/plugins/embedbase/lang/pt-br.js | 0 .../ckeditor/plugins/embedbase/lang/pt.js | 0 .../ckeditor/plugins/embedbase/lang/ru.js | 0 .../ckeditor/plugins/embedbase/lang/sk.js | 0 .../ckeditor/plugins/embedbase/lang/sv.js | 0 .../ckeditor/plugins/embedbase/lang/tr.js | 0 .../ckeditor/plugins/embedbase/lang/ug.js | 0 .../ckeditor/plugins/embedbase/lang/uk.js | 0 .../ckeditor/plugins/embedbase/lang/zh-cn.js | 0 .../ckeditor/plugins/embedbase/lang/zh.js | 0 .../ckeditor/plugins/embedbase/plugin.js | 0 .../embedsemantic/icons/embedsemantic.png | Bin .../icons/hidpi/embedsemantic.png | Bin .../ckeditor/plugins/embedsemantic/plugin.js | 0 .../ckeditor/plugins/filetools/lang/az.js | 0 .../ckeditor/plugins/filetools/lang/ca.js | 0 .../ckeditor/plugins/filetools/lang/cs.js | 0 .../ckeditor/plugins/filetools/lang/da.js | 0 .../ckeditor/plugins/filetools/lang/de-ch.js | 0 .../ckeditor/plugins/filetools/lang/de.js | 0 .../ckeditor/plugins/filetools/lang/en.js | 0 .../ckeditor/plugins/filetools/lang/eo.js | 0 .../ckeditor/plugins/filetools/lang/es-mx.js | 0 .../ckeditor/plugins/filetools/lang/es.js | 0 .../ckeditor/plugins/filetools/lang/eu.js | 0 .../ckeditor/plugins/filetools/lang/fr.js | 0 .../ckeditor/plugins/filetools/lang/gl.js | 0 .../ckeditor/plugins/filetools/lang/hr.js | 0 .../ckeditor/plugins/filetools/lang/hu.js | 0 .../ckeditor/plugins/filetools/lang/id.js | 0 .../ckeditor/plugins/filetools/lang/it.js | 0 .../ckeditor/plugins/filetools/lang/ja.js | 0 .../ckeditor/plugins/filetools/lang/km.js | 0 .../ckeditor/plugins/filetools/lang/ko.js | 0 .../ckeditor/plugins/filetools/lang/ku.js | 0 .../ckeditor/plugins/filetools/lang/nb.js | 0 .../ckeditor/plugins/filetools/lang/nl.js | 0 .../ckeditor/plugins/filetools/lang/oc.js | 0 .../ckeditor/plugins/filetools/lang/pl.js | 0 .../ckeditor/plugins/filetools/lang/pt-br.js | 0 .../ckeditor/plugins/filetools/lang/pt.js | 0 .../ckeditor/plugins/filetools/lang/ru.js | 0 .../ckeditor/plugins/filetools/lang/sk.js | 0 .../ckeditor/plugins/filetools/lang/sv.js | 0 .../ckeditor/plugins/filetools/lang/tr.js | 0 .../ckeditor/plugins/filetools/lang/ug.js | 0 .../ckeditor/plugins/filetools/lang/uk.js | 0 .../ckeditor/plugins/filetools/lang/zh-cn.js | 0 .../ckeditor/plugins/filetools/lang/zh.js | 0 .../ckeditor/plugins/filetools/plugin.js | 0 .../ckeditor/plugins/find/dialogs/find.js | 0 .../ckeditor/plugins/find/icons/find-rtl.png | Bin .../ckeditor/plugins/find/icons/find.png | Bin .../plugins/find/icons/hidpi/find-rtl.png | Bin .../plugins/find/icons/hidpi/find.png | Bin .../plugins/find/icons/hidpi/replace.png | Bin .../ckeditor/plugins/find/icons/replace.png | Bin .../ckeditor/plugins/find/lang/af.js | 0 .../ckeditor/plugins/find/lang/ar.js | 0 .../ckeditor/plugins/find/lang/az.js | 0 .../ckeditor/plugins/find/lang/bg.js | 0 .../ckeditor/plugins/find/lang/bn.js | 0 .../ckeditor/plugins/find/lang/bs.js | 0 .../ckeditor/plugins/find/lang/ca.js | 0 .../ckeditor/plugins/find/lang/cs.js | 0 .../ckeditor/plugins/find/lang/cy.js | 0 .../ckeditor/plugins/find/lang/da.js | 0 .../ckeditor/plugins/find/lang/de-ch.js | 0 .../ckeditor/plugins/find/lang/de.js | 0 .../ckeditor/plugins/find/lang/el.js | 0 .../ckeditor/plugins/find/lang/en-au.js | 0 .../ckeditor/plugins/find/lang/en-ca.js | 0 .../ckeditor/plugins/find/lang/en-gb.js | 0 .../ckeditor/plugins/find/lang/en.js | 0 .../ckeditor/plugins/find/lang/eo.js | 0 .../ckeditor/plugins/find/lang/es-mx.js | 0 .../ckeditor/plugins/find/lang/es.js | 0 .../ckeditor/plugins/find/lang/et.js | 0 .../ckeditor/plugins/find/lang/eu.js | 0 .../ckeditor/plugins/find/lang/fa.js | 0 .../ckeditor/plugins/find/lang/fi.js | 0 .../ckeditor/plugins/find/lang/fo.js | 0 .../ckeditor/plugins/find/lang/fr-ca.js | 0 .../ckeditor/plugins/find/lang/fr.js | 0 .../ckeditor/plugins/find/lang/gl.js | 0 .../ckeditor/plugins/find/lang/gu.js | 0 .../ckeditor/plugins/find/lang/he.js | 0 .../ckeditor/plugins/find/lang/hi.js | 0 .../ckeditor/plugins/find/lang/hr.js | 0 .../ckeditor/plugins/find/lang/hu.js | 0 .../ckeditor/plugins/find/lang/id.js | 0 .../ckeditor/plugins/find/lang/is.js | 0 .../ckeditor/plugins/find/lang/it.js | 0 .../ckeditor/plugins/find/lang/ja.js | 0 .../ckeditor/plugins/find/lang/ka.js | 0 .../ckeditor/plugins/find/lang/km.js | 0 .../ckeditor/plugins/find/lang/ko.js | 0 .../ckeditor/plugins/find/lang/ku.js | 0 .../ckeditor/plugins/find/lang/lt.js | 0 .../ckeditor/plugins/find/lang/lv.js | 0 .../ckeditor/plugins/find/lang/mk.js | 0 .../ckeditor/plugins/find/lang/mn.js | 0 .../ckeditor/plugins/find/lang/ms.js | 0 .../ckeditor/plugins/find/lang/nb.js | 0 .../ckeditor/plugins/find/lang/nl.js | 0 .../ckeditor/plugins/find/lang/no.js | 0 .../ckeditor/plugins/find/lang/oc.js | 0 .../ckeditor/plugins/find/lang/pl.js | 0 .../ckeditor/plugins/find/lang/pt-br.js | 0 .../ckeditor/plugins/find/lang/pt.js | 0 .../ckeditor/plugins/find/lang/ro.js | 0 .../ckeditor/plugins/find/lang/ru.js | 0 .../ckeditor/plugins/find/lang/si.js | 0 .../ckeditor/plugins/find/lang/sk.js | 0 .../ckeditor/plugins/find/lang/sl.js | 0 .../ckeditor/plugins/find/lang/sq.js | 0 .../ckeditor/plugins/find/lang/sr-latn.js | 0 .../ckeditor/plugins/find/lang/sr.js | 0 .../ckeditor/plugins/find/lang/sv.js | 0 .../ckeditor/plugins/find/lang/th.js | 0 .../ckeditor/plugins/find/lang/tr.js | 0 .../ckeditor/plugins/find/lang/tt.js | 0 .../ckeditor/plugins/find/lang/ug.js | 0 .../ckeditor/plugins/find/lang/uk.js | 0 .../ckeditor/plugins/find/lang/vi.js | 0 .../ckeditor/plugins/find/lang/zh-cn.js | 0 .../ckeditor/plugins/find/lang/zh.js | 0 .../ckeditor/plugins/find/plugin.js | 0 .../ckeditor/plugins/flash/dialogs/flash.js | 0 .../ckeditor/plugins/flash/icons/flash.png | Bin .../plugins/flash/icons/hidpi/flash.png | Bin .../plugins/flash/images/placeholder.png | Bin .../ckeditor/plugins/flash/lang/af.js | 0 .../ckeditor/plugins/flash/lang/ar.js | 0 .../ckeditor/plugins/flash/lang/az.js | 0 .../ckeditor/plugins/flash/lang/bg.js | 0 .../ckeditor/plugins/flash/lang/bn.js | 0 .../ckeditor/plugins/flash/lang/bs.js | 0 .../ckeditor/plugins/flash/lang/ca.js | 0 .../ckeditor/plugins/flash/lang/cs.js | 0 .../ckeditor/plugins/flash/lang/cy.js | 0 .../ckeditor/plugins/flash/lang/da.js | 0 .../ckeditor/plugins/flash/lang/de-ch.js | 0 .../ckeditor/plugins/flash/lang/de.js | 0 .../ckeditor/plugins/flash/lang/el.js | 0 .../ckeditor/plugins/flash/lang/en-au.js | 0 .../ckeditor/plugins/flash/lang/en-ca.js | 0 .../ckeditor/plugins/flash/lang/en-gb.js | 0 .../ckeditor/plugins/flash/lang/en.js | 0 .../ckeditor/plugins/flash/lang/eo.js | 0 .../ckeditor/plugins/flash/lang/es-mx.js | 0 .../ckeditor/plugins/flash/lang/es.js | 0 .../ckeditor/plugins/flash/lang/et.js | 0 .../ckeditor/plugins/flash/lang/eu.js | 0 .../ckeditor/plugins/flash/lang/fa.js | 0 .../ckeditor/plugins/flash/lang/fi.js | 0 .../ckeditor/plugins/flash/lang/fo.js | 0 .../ckeditor/plugins/flash/lang/fr-ca.js | 0 .../ckeditor/plugins/flash/lang/fr.js | 0 .../ckeditor/plugins/flash/lang/gl.js | 0 .../ckeditor/plugins/flash/lang/gu.js | 0 .../ckeditor/plugins/flash/lang/he.js | 0 .../ckeditor/plugins/flash/lang/hi.js | 0 .../ckeditor/plugins/flash/lang/hr.js | 0 .../ckeditor/plugins/flash/lang/hu.js | 0 .../ckeditor/plugins/flash/lang/id.js | 0 .../ckeditor/plugins/flash/lang/is.js | 0 .../ckeditor/plugins/flash/lang/it.js | 0 .../ckeditor/plugins/flash/lang/ja.js | 0 .../ckeditor/plugins/flash/lang/ka.js | 0 .../ckeditor/plugins/flash/lang/km.js | 0 .../ckeditor/plugins/flash/lang/ko.js | 0 .../ckeditor/plugins/flash/lang/ku.js | 0 .../ckeditor/plugins/flash/lang/lt.js | 0 .../ckeditor/plugins/flash/lang/lv.js | 0 .../ckeditor/plugins/flash/lang/mk.js | 0 .../ckeditor/plugins/flash/lang/mn.js | 0 .../ckeditor/plugins/flash/lang/ms.js | 0 .../ckeditor/plugins/flash/lang/nb.js | 0 .../ckeditor/plugins/flash/lang/nl.js | 0 .../ckeditor/plugins/flash/lang/no.js | 0 .../ckeditor/plugins/flash/lang/oc.js | 0 .../ckeditor/plugins/flash/lang/pl.js | 0 .../ckeditor/plugins/flash/lang/pt-br.js | 0 .../ckeditor/plugins/flash/lang/pt.js | 0 .../ckeditor/plugins/flash/lang/ro.js | 0 .../ckeditor/plugins/flash/lang/ru.js | 0 .../ckeditor/plugins/flash/lang/si.js | 0 .../ckeditor/plugins/flash/lang/sk.js | 0 .../ckeditor/plugins/flash/lang/sl.js | 0 .../ckeditor/plugins/flash/lang/sq.js | 0 .../ckeditor/plugins/flash/lang/sr-latn.js | 0 .../ckeditor/plugins/flash/lang/sr.js | 0 .../ckeditor/plugins/flash/lang/sv.js | 0 .../ckeditor/plugins/flash/lang/th.js | 0 .../ckeditor/plugins/flash/lang/tr.js | 0 .../ckeditor/plugins/flash/lang/tt.js | 0 .../ckeditor/plugins/flash/lang/ug.js | 0 .../ckeditor/plugins/flash/lang/uk.js | 0 .../ckeditor/plugins/flash/lang/vi.js | 0 .../ckeditor/plugins/flash/lang/zh-cn.js | 0 .../ckeditor/plugins/flash/lang/zh.js | 0 .../ckeditor/plugins/flash/plugin.js | 0 .../ckeditor/plugins/font/lang/af.js | 0 .../ckeditor/plugins/font/lang/ar.js | 0 .../ckeditor/plugins/font/lang/az.js | 0 .../ckeditor/plugins/font/lang/bg.js | 0 .../ckeditor/plugins/font/lang/bn.js | 0 .../ckeditor/plugins/font/lang/bs.js | 0 .../ckeditor/plugins/font/lang/ca.js | 0 .../ckeditor/plugins/font/lang/cs.js | 0 .../ckeditor/plugins/font/lang/cy.js | 0 .../ckeditor/plugins/font/lang/da.js | 0 .../ckeditor/plugins/font/lang/de-ch.js | 0 .../ckeditor/plugins/font/lang/de.js | 0 .../ckeditor/plugins/font/lang/el.js | 0 .../ckeditor/plugins/font/lang/en-au.js | 0 .../ckeditor/plugins/font/lang/en-ca.js | 0 .../ckeditor/plugins/font/lang/en-gb.js | 0 .../ckeditor/plugins/font/lang/en.js | 0 .../ckeditor/plugins/font/lang/eo.js | 0 .../ckeditor/plugins/font/lang/es-mx.js | 0 .../ckeditor/plugins/font/lang/es.js | 0 .../ckeditor/plugins/font/lang/et.js | 0 .../ckeditor/plugins/font/lang/eu.js | 0 .../ckeditor/plugins/font/lang/fa.js | 0 .../ckeditor/plugins/font/lang/fi.js | 0 .../ckeditor/plugins/font/lang/fo.js | 0 .../ckeditor/plugins/font/lang/fr-ca.js | 0 .../ckeditor/plugins/font/lang/fr.js | 0 .../ckeditor/plugins/font/lang/gl.js | 0 .../ckeditor/plugins/font/lang/gu.js | 0 .../ckeditor/plugins/font/lang/he.js | 0 .../ckeditor/plugins/font/lang/hi.js | 0 .../ckeditor/plugins/font/lang/hr.js | 0 .../ckeditor/plugins/font/lang/hu.js | 0 .../ckeditor/plugins/font/lang/id.js | 0 .../ckeditor/plugins/font/lang/is.js | 0 .../ckeditor/plugins/font/lang/it.js | 0 .../ckeditor/plugins/font/lang/ja.js | 0 .../ckeditor/plugins/font/lang/ka.js | 0 .../ckeditor/plugins/font/lang/km.js | 0 .../ckeditor/plugins/font/lang/ko.js | 0 .../ckeditor/plugins/font/lang/ku.js | 0 .../ckeditor/plugins/font/lang/lt.js | 0 .../ckeditor/plugins/font/lang/lv.js | 0 .../ckeditor/plugins/font/lang/mk.js | 0 .../ckeditor/plugins/font/lang/mn.js | 0 .../ckeditor/plugins/font/lang/ms.js | 0 .../ckeditor/plugins/font/lang/nb.js | 0 .../ckeditor/plugins/font/lang/nl.js | 0 .../ckeditor/plugins/font/lang/no.js | 0 .../ckeditor/plugins/font/lang/oc.js | 0 .../ckeditor/plugins/font/lang/pl.js | 0 .../ckeditor/plugins/font/lang/pt-br.js | 0 .../ckeditor/plugins/font/lang/pt.js | 0 .../ckeditor/plugins/font/lang/ro.js | 0 .../ckeditor/plugins/font/lang/ru.js | 0 .../ckeditor/plugins/font/lang/si.js | 0 .../ckeditor/plugins/font/lang/sk.js | 0 .../ckeditor/plugins/font/lang/sl.js | 0 .../ckeditor/plugins/font/lang/sq.js | 0 .../ckeditor/plugins/font/lang/sr-latn.js | 0 .../ckeditor/plugins/font/lang/sr.js | 0 .../ckeditor/plugins/font/lang/sv.js | 0 .../ckeditor/plugins/font/lang/th.js | 0 .../ckeditor/plugins/font/lang/tr.js | 0 .../ckeditor/plugins/font/lang/tt.js | 0 .../ckeditor/plugins/font/lang/ug.js | 0 .../ckeditor/plugins/font/lang/uk.js | 0 .../ckeditor/plugins/font/lang/vi.js | 0 .../ckeditor/plugins/font/lang/zh-cn.js | 0 .../ckeditor/plugins/font/lang/zh.js | 0 .../ckeditor/plugins/font/plugin.js | 0 .../ckeditor/plugins/forms/dialogs/button.js | 0 .../plugins/forms/dialogs/checkbox.js | 0 .../ckeditor/plugins/forms/dialogs/form.js | 0 .../plugins/forms/dialogs/hiddenfield.js | 0 .../ckeditor/plugins/forms/dialogs/radio.js | 0 .../ckeditor/plugins/forms/dialogs/select.js | 0 .../plugins/forms/dialogs/textarea.js | 0 .../plugins/forms/dialogs/textfield.js | 0 .../ckeditor/plugins/forms/icons/button.png | Bin .../ckeditor/plugins/forms/icons/checkbox.png | Bin .../ckeditor/plugins/forms/icons/form.png | Bin .../plugins/forms/icons/hiddenfield.png | Bin .../plugins/forms/icons/hidpi/button.png | Bin .../plugins/forms/icons/hidpi/checkbox.png | Bin .../plugins/forms/icons/hidpi/form.png | Bin .../plugins/forms/icons/hidpi/hiddenfield.png | Bin .../plugins/forms/icons/hidpi/imagebutton.png | Bin .../plugins/forms/icons/hidpi/radio.png | Bin .../plugins/forms/icons/hidpi/select-rtl.png | Bin .../plugins/forms/icons/hidpi/select.png | Bin .../forms/icons/hidpi/textarea-rtl.png | Bin .../plugins/forms/icons/hidpi/textarea.png | Bin .../forms/icons/hidpi/textfield-rtl.png | Bin .../plugins/forms/icons/hidpi/textfield.png | Bin .../plugins/forms/icons/imagebutton.png | Bin .../ckeditor/plugins/forms/icons/radio.png | Bin .../plugins/forms/icons/select-rtl.png | Bin .../ckeditor/plugins/forms/icons/select.png | Bin .../plugins/forms/icons/textarea-rtl.png | Bin .../ckeditor/plugins/forms/icons/textarea.png | Bin .../plugins/forms/icons/textfield-rtl.png | Bin .../plugins/forms/icons/textfield.png | Bin .../plugins/forms/images/hiddenfield.gif | Bin .../ckeditor/plugins/forms/lang/af.js | 0 .../ckeditor/plugins/forms/lang/ar.js | 0 .../ckeditor/plugins/forms/lang/az.js | 0 .../ckeditor/plugins/forms/lang/bg.js | 0 .../ckeditor/plugins/forms/lang/bn.js | 0 .../ckeditor/plugins/forms/lang/bs.js | 0 .../ckeditor/plugins/forms/lang/ca.js | 0 .../ckeditor/plugins/forms/lang/cs.js | 0 .../ckeditor/plugins/forms/lang/cy.js | 0 .../ckeditor/plugins/forms/lang/da.js | 0 .../ckeditor/plugins/forms/lang/de-ch.js | 0 .../ckeditor/plugins/forms/lang/de.js | 0 .../ckeditor/plugins/forms/lang/el.js | 0 .../ckeditor/plugins/forms/lang/en-au.js | 0 .../ckeditor/plugins/forms/lang/en-ca.js | 0 .../ckeditor/plugins/forms/lang/en-gb.js | 0 .../ckeditor/plugins/forms/lang/en.js | 0 .../ckeditor/plugins/forms/lang/eo.js | 0 .../ckeditor/plugins/forms/lang/es-mx.js | 0 .../ckeditor/plugins/forms/lang/es.js | 0 .../ckeditor/plugins/forms/lang/et.js | 0 .../ckeditor/plugins/forms/lang/eu.js | 0 .../ckeditor/plugins/forms/lang/fa.js | 0 .../ckeditor/plugins/forms/lang/fi.js | 0 .../ckeditor/plugins/forms/lang/fo.js | 0 .../ckeditor/plugins/forms/lang/fr-ca.js | 0 .../ckeditor/plugins/forms/lang/fr.js | 0 .../ckeditor/plugins/forms/lang/gl.js | 0 .../ckeditor/plugins/forms/lang/gu.js | 0 .../ckeditor/plugins/forms/lang/he.js | 0 .../ckeditor/plugins/forms/lang/hi.js | 0 .../ckeditor/plugins/forms/lang/hr.js | 0 .../ckeditor/plugins/forms/lang/hu.js | 0 .../ckeditor/plugins/forms/lang/id.js | 0 .../ckeditor/plugins/forms/lang/is.js | 0 .../ckeditor/plugins/forms/lang/it.js | 0 .../ckeditor/plugins/forms/lang/ja.js | 0 .../ckeditor/plugins/forms/lang/ka.js | 0 .../ckeditor/plugins/forms/lang/km.js | 0 .../ckeditor/plugins/forms/lang/ko.js | 0 .../ckeditor/plugins/forms/lang/ku.js | 0 .../ckeditor/plugins/forms/lang/lt.js | 0 .../ckeditor/plugins/forms/lang/lv.js | 0 .../ckeditor/plugins/forms/lang/mk.js | 0 .../ckeditor/plugins/forms/lang/mn.js | 0 .../ckeditor/plugins/forms/lang/ms.js | 0 .../ckeditor/plugins/forms/lang/nb.js | 0 .../ckeditor/plugins/forms/lang/nl.js | 0 .../ckeditor/plugins/forms/lang/no.js | 0 .../ckeditor/plugins/forms/lang/oc.js | 0 .../ckeditor/plugins/forms/lang/pl.js | 0 .../ckeditor/plugins/forms/lang/pt-br.js | 0 .../ckeditor/plugins/forms/lang/pt.js | 0 .../ckeditor/plugins/forms/lang/ro.js | 0 .../ckeditor/plugins/forms/lang/ru.js | 0 .../ckeditor/plugins/forms/lang/si.js | 0 .../ckeditor/plugins/forms/lang/sk.js | 0 .../ckeditor/plugins/forms/lang/sl.js | 0 .../ckeditor/plugins/forms/lang/sq.js | 0 .../ckeditor/plugins/forms/lang/sr-latn.js | 0 .../ckeditor/plugins/forms/lang/sr.js | 0 .../ckeditor/plugins/forms/lang/sv.js | 0 .../ckeditor/plugins/forms/lang/th.js | 0 .../ckeditor/plugins/forms/lang/tr.js | 0 .../ckeditor/plugins/forms/lang/tt.js | 0 .../ckeditor/plugins/forms/lang/ug.js | 0 .../ckeditor/plugins/forms/lang/uk.js | 0 .../ckeditor/plugins/forms/lang/vi.js | 0 .../ckeditor/plugins/forms/lang/zh-cn.js | 0 .../ckeditor/plugins/forms/lang/zh.js | 0 .../ckeditor/plugins/forms/plugin.js | 0 .../ckeditor/plugins/icons.png | Bin .../ckeditor/plugins/icons_hidpi.png | Bin .../ckeditor/plugins/iframe/dialogs/iframe.js | 0 .../plugins/iframe/icons/hidpi/iframe.png | Bin .../ckeditor/plugins/iframe/icons/iframe.png | Bin .../plugins/iframe/images/placeholder.png | Bin .../ckeditor/plugins/iframe/lang/af.js | 0 .../ckeditor/plugins/iframe/lang/ar.js | 0 .../ckeditor/plugins/iframe/lang/az.js | 0 .../ckeditor/plugins/iframe/lang/bg.js | 0 .../ckeditor/plugins/iframe/lang/bn.js | 0 .../ckeditor/plugins/iframe/lang/bs.js | 0 .../ckeditor/plugins/iframe/lang/ca.js | 0 .../ckeditor/plugins/iframe/lang/cs.js | 0 .../ckeditor/plugins/iframe/lang/cy.js | 0 .../ckeditor/plugins/iframe/lang/da.js | 0 .../ckeditor/plugins/iframe/lang/de-ch.js | 0 .../ckeditor/plugins/iframe/lang/de.js | 0 .../ckeditor/plugins/iframe/lang/el.js | 0 .../ckeditor/plugins/iframe/lang/en-au.js | 0 .../ckeditor/plugins/iframe/lang/en-ca.js | 0 .../ckeditor/plugins/iframe/lang/en-gb.js | 0 .../ckeditor/plugins/iframe/lang/en.js | 0 .../ckeditor/plugins/iframe/lang/eo.js | 0 .../ckeditor/plugins/iframe/lang/es-mx.js | 0 .../ckeditor/plugins/iframe/lang/es.js | 0 .../ckeditor/plugins/iframe/lang/et.js | 0 .../ckeditor/plugins/iframe/lang/eu.js | 0 .../ckeditor/plugins/iframe/lang/fa.js | 0 .../ckeditor/plugins/iframe/lang/fi.js | 0 .../ckeditor/plugins/iframe/lang/fo.js | 0 .../ckeditor/plugins/iframe/lang/fr-ca.js | 0 .../ckeditor/plugins/iframe/lang/fr.js | 0 .../ckeditor/plugins/iframe/lang/gl.js | 0 .../ckeditor/plugins/iframe/lang/gu.js | 0 .../ckeditor/plugins/iframe/lang/he.js | 0 .../ckeditor/plugins/iframe/lang/hi.js | 0 .../ckeditor/plugins/iframe/lang/hr.js | 0 .../ckeditor/plugins/iframe/lang/hu.js | 0 .../ckeditor/plugins/iframe/lang/id.js | 0 .../ckeditor/plugins/iframe/lang/is.js | 0 .../ckeditor/plugins/iframe/lang/it.js | 0 .../ckeditor/plugins/iframe/lang/ja.js | 0 .../ckeditor/plugins/iframe/lang/ka.js | 0 .../ckeditor/plugins/iframe/lang/km.js | 0 .../ckeditor/plugins/iframe/lang/ko.js | 0 .../ckeditor/plugins/iframe/lang/ku.js | 0 .../ckeditor/plugins/iframe/lang/lt.js | 0 .../ckeditor/plugins/iframe/lang/lv.js | 0 .../ckeditor/plugins/iframe/lang/mk.js | 0 .../ckeditor/plugins/iframe/lang/mn.js | 0 .../ckeditor/plugins/iframe/lang/ms.js | 0 .../ckeditor/plugins/iframe/lang/nb.js | 0 .../ckeditor/plugins/iframe/lang/nl.js | 0 .../ckeditor/plugins/iframe/lang/no.js | 0 .../ckeditor/plugins/iframe/lang/oc.js | 0 .../ckeditor/plugins/iframe/lang/pl.js | 0 .../ckeditor/plugins/iframe/lang/pt-br.js | 0 .../ckeditor/plugins/iframe/lang/pt.js | 0 .../ckeditor/plugins/iframe/lang/ro.js | 0 .../ckeditor/plugins/iframe/lang/ru.js | 0 .../ckeditor/plugins/iframe/lang/si.js | 0 .../ckeditor/plugins/iframe/lang/sk.js | 0 .../ckeditor/plugins/iframe/lang/sl.js | 0 .../ckeditor/plugins/iframe/lang/sq.js | 0 .../ckeditor/plugins/iframe/lang/sr-latn.js | 0 .../ckeditor/plugins/iframe/lang/sr.js | 0 .../ckeditor/plugins/iframe/lang/sv.js | 0 .../ckeditor/plugins/iframe/lang/th.js | 0 .../ckeditor/plugins/iframe/lang/tr.js | 0 .../ckeditor/plugins/iframe/lang/tt.js | 0 .../ckeditor/plugins/iframe/lang/ug.js | 0 .../ckeditor/plugins/iframe/lang/uk.js | 0 .../ckeditor/plugins/iframe/lang/vi.js | 0 .../ckeditor/plugins/iframe/lang/zh-cn.js | 0 .../ckeditor/plugins/iframe/lang/zh.js | 0 .../ckeditor/plugins/iframe/plugin.js | 0 .../ckeditor/plugins/iframedialog/plugin.js | 0 .../ckeditor/plugins/image/dialogs/image.js | 0 .../ckeditor/plugins/image/images/noimage.png | Bin .../ckeditor/plugins/image2/dialogs/image2.js | 0 .../plugins/image2/icons/hidpi/image.png | Bin .../ckeditor/plugins/image2/icons/image.png | Bin .../ckeditor/plugins/image2/lang/af.js | 0 .../ckeditor/plugins/image2/lang/ar.js | 0 .../ckeditor/plugins/image2/lang/az.js | 0 .../ckeditor/plugins/image2/lang/bg.js | 0 .../ckeditor/plugins/image2/lang/bn.js | 0 .../ckeditor/plugins/image2/lang/bs.js | 0 .../ckeditor/plugins/image2/lang/ca.js | 0 .../ckeditor/plugins/image2/lang/cs.js | 0 .../ckeditor/plugins/image2/lang/cy.js | 0 .../ckeditor/plugins/image2/lang/da.js | 0 .../ckeditor/plugins/image2/lang/de-ch.js | 0 .../ckeditor/plugins/image2/lang/de.js | 0 .../ckeditor/plugins/image2/lang/el.js | 0 .../ckeditor/plugins/image2/lang/en-au.js | 0 .../ckeditor/plugins/image2/lang/en-ca.js | 0 .../ckeditor/plugins/image2/lang/en-gb.js | 0 .../ckeditor/plugins/image2/lang/en.js | 0 .../ckeditor/plugins/image2/lang/eo.js | 0 .../ckeditor/plugins/image2/lang/es-mx.js | 0 .../ckeditor/plugins/image2/lang/es.js | 0 .../ckeditor/plugins/image2/lang/et.js | 0 .../ckeditor/plugins/image2/lang/eu.js | 0 .../ckeditor/plugins/image2/lang/fa.js | 0 .../ckeditor/plugins/image2/lang/fi.js | 0 .../ckeditor/plugins/image2/lang/fo.js | 0 .../ckeditor/plugins/image2/lang/fr-ca.js | 0 .../ckeditor/plugins/image2/lang/fr.js | 0 .../ckeditor/plugins/image2/lang/gl.js | 0 .../ckeditor/plugins/image2/lang/gu.js | 0 .../ckeditor/plugins/image2/lang/he.js | 0 .../ckeditor/plugins/image2/lang/hi.js | 0 .../ckeditor/plugins/image2/lang/hr.js | 0 .../ckeditor/plugins/image2/lang/hu.js | 0 .../ckeditor/plugins/image2/lang/id.js | 0 .../ckeditor/plugins/image2/lang/is.js | 0 .../ckeditor/plugins/image2/lang/it.js | 0 .../ckeditor/plugins/image2/lang/ja.js | 0 .../ckeditor/plugins/image2/lang/ka.js | 0 .../ckeditor/plugins/image2/lang/km.js | 0 .../ckeditor/plugins/image2/lang/ko.js | 0 .../ckeditor/plugins/image2/lang/ku.js | 0 .../ckeditor/plugins/image2/lang/lt.js | 0 .../ckeditor/plugins/image2/lang/lv.js | 0 .../ckeditor/plugins/image2/lang/mk.js | 0 .../ckeditor/plugins/image2/lang/mn.js | 0 .../ckeditor/plugins/image2/lang/ms.js | 0 .../ckeditor/plugins/image2/lang/nb.js | 0 .../ckeditor/plugins/image2/lang/nl.js | 0 .../ckeditor/plugins/image2/lang/no.js | 0 .../ckeditor/plugins/image2/lang/oc.js | 0 .../ckeditor/plugins/image2/lang/pl.js | 0 .../ckeditor/plugins/image2/lang/pt-br.js | 0 .../ckeditor/plugins/image2/lang/pt.js | 0 .../ckeditor/plugins/image2/lang/ro.js | 0 .../ckeditor/plugins/image2/lang/ru.js | 0 .../ckeditor/plugins/image2/lang/si.js | 0 .../ckeditor/plugins/image2/lang/sk.js | 0 .../ckeditor/plugins/image2/lang/sl.js | 0 .../ckeditor/plugins/image2/lang/sq.js | 0 .../ckeditor/plugins/image2/lang/sr-latn.js | 0 .../ckeditor/plugins/image2/lang/sr.js | 0 .../ckeditor/plugins/image2/lang/sv.js | 0 .../ckeditor/plugins/image2/lang/th.js | 0 .../ckeditor/plugins/image2/lang/tr.js | 0 .../ckeditor/plugins/image2/lang/tt.js | 0 .../ckeditor/plugins/image2/lang/ug.js | 0 .../ckeditor/plugins/image2/lang/uk.js | 0 .../ckeditor/plugins/image2/lang/vi.js | 0 .../ckeditor/plugins/image2/lang/zh-cn.js | 0 .../ckeditor/plugins/image2/lang/zh.js | 0 .../ckeditor/plugins/image2/plugin.js | 0 .../ckeditor/plugins/indentblock/plugin.js | 0 .../justify/icons/hidpi/justifyblock.png | Bin .../justify/icons/hidpi/justifycenter.png | Bin .../justify/icons/hidpi/justifyleft.png | Bin .../justify/icons/hidpi/justifyright.png | Bin .../plugins/justify/icons/justifyblock.png | Bin .../plugins/justify/icons/justifycenter.png | Bin .../plugins/justify/icons/justifyleft.png | Bin .../plugins/justify/icons/justifyright.png | Bin .../ckeditor/plugins/justify/lang/af.js | 0 .../ckeditor/plugins/justify/lang/ar.js | 0 .../ckeditor/plugins/justify/lang/az.js | 0 .../ckeditor/plugins/justify/lang/bg.js | 0 .../ckeditor/plugins/justify/lang/bn.js | 0 .../ckeditor/plugins/justify/lang/bs.js | 0 .../ckeditor/plugins/justify/lang/ca.js | 0 .../ckeditor/plugins/justify/lang/cs.js | 0 .../ckeditor/plugins/justify/lang/cy.js | 0 .../ckeditor/plugins/justify/lang/da.js | 0 .../ckeditor/plugins/justify/lang/de-ch.js | 0 .../ckeditor/plugins/justify/lang/de.js | 0 .../ckeditor/plugins/justify/lang/el.js | 0 .../ckeditor/plugins/justify/lang/en-au.js | 0 .../ckeditor/plugins/justify/lang/en-ca.js | 0 .../ckeditor/plugins/justify/lang/en-gb.js | 0 .../ckeditor/plugins/justify/lang/en.js | 0 .../ckeditor/plugins/justify/lang/eo.js | 0 .../ckeditor/plugins/justify/lang/es-mx.js | 0 .../ckeditor/plugins/justify/lang/es.js | 0 .../ckeditor/plugins/justify/lang/et.js | 0 .../ckeditor/plugins/justify/lang/eu.js | 0 .../ckeditor/plugins/justify/lang/fa.js | 0 .../ckeditor/plugins/justify/lang/fi.js | 0 .../ckeditor/plugins/justify/lang/fo.js | 0 .../ckeditor/plugins/justify/lang/fr-ca.js | 0 .../ckeditor/plugins/justify/lang/fr.js | 0 .../ckeditor/plugins/justify/lang/gl.js | 0 .../ckeditor/plugins/justify/lang/gu.js | 0 .../ckeditor/plugins/justify/lang/he.js | 0 .../ckeditor/plugins/justify/lang/hi.js | 0 .../ckeditor/plugins/justify/lang/hr.js | 0 .../ckeditor/plugins/justify/lang/hu.js | 0 .../ckeditor/plugins/justify/lang/id.js | 0 .../ckeditor/plugins/justify/lang/is.js | 0 .../ckeditor/plugins/justify/lang/it.js | 0 .../ckeditor/plugins/justify/lang/ja.js | 0 .../ckeditor/plugins/justify/lang/ka.js | 0 .../ckeditor/plugins/justify/lang/km.js | 0 .../ckeditor/plugins/justify/lang/ko.js | 0 .../ckeditor/plugins/justify/lang/ku.js | 0 .../ckeditor/plugins/justify/lang/lt.js | 0 .../ckeditor/plugins/justify/lang/lv.js | 0 .../ckeditor/plugins/justify/lang/mk.js | 0 .../ckeditor/plugins/justify/lang/mn.js | 0 .../ckeditor/plugins/justify/lang/ms.js | 0 .../ckeditor/plugins/justify/lang/nb.js | 0 .../ckeditor/plugins/justify/lang/nl.js | 0 .../ckeditor/plugins/justify/lang/no.js | 0 .../ckeditor/plugins/justify/lang/oc.js | 0 .../ckeditor/plugins/justify/lang/pl.js | 0 .../ckeditor/plugins/justify/lang/pt-br.js | 0 .../ckeditor/plugins/justify/lang/pt.js | 0 .../ckeditor/plugins/justify/lang/ro.js | 0 .../ckeditor/plugins/justify/lang/ru.js | 0 .../ckeditor/plugins/justify/lang/si.js | 0 .../ckeditor/plugins/justify/lang/sk.js | 0 .../ckeditor/plugins/justify/lang/sl.js | 0 .../ckeditor/plugins/justify/lang/sq.js | 0 .../ckeditor/plugins/justify/lang/sr-latn.js | 0 .../ckeditor/plugins/justify/lang/sr.js | 0 .../ckeditor/plugins/justify/lang/sv.js | 0 .../ckeditor/plugins/justify/lang/th.js | 0 .../ckeditor/plugins/justify/lang/tr.js | 0 .../ckeditor/plugins/justify/lang/tt.js | 0 .../ckeditor/plugins/justify/lang/ug.js | 0 .../ckeditor/plugins/justify/lang/uk.js | 0 .../ckeditor/plugins/justify/lang/vi.js | 0 .../ckeditor/plugins/justify/lang/zh-cn.js | 0 .../ckeditor/plugins/justify/lang/zh.js | 0 .../ckeditor/plugins/justify/plugin.js | 0 .../plugins/language/icons/hidpi/language.png | Bin .../plugins/language/icons/language.png | Bin .../ckeditor/plugins/language/lang/ar.js | 0 .../ckeditor/plugins/language/lang/az.js | 0 .../ckeditor/plugins/language/lang/bg.js | 0 .../ckeditor/plugins/language/lang/ca.js | 0 .../ckeditor/plugins/language/lang/cs.js | 0 .../ckeditor/plugins/language/lang/cy.js | 0 .../ckeditor/plugins/language/lang/da.js | 0 .../ckeditor/plugins/language/lang/de-ch.js | 0 .../ckeditor/plugins/language/lang/de.js | 0 .../ckeditor/plugins/language/lang/el.js | 0 .../ckeditor/plugins/language/lang/en-gb.js | 0 .../ckeditor/plugins/language/lang/en.js | 0 .../ckeditor/plugins/language/lang/eo.js | 0 .../ckeditor/plugins/language/lang/es-mx.js | 0 .../ckeditor/plugins/language/lang/es.js | 0 .../ckeditor/plugins/language/lang/eu.js | 0 .../ckeditor/plugins/language/lang/fa.js | 0 .../ckeditor/plugins/language/lang/fi.js | 0 .../ckeditor/plugins/language/lang/fo.js | 0 .../ckeditor/plugins/language/lang/fr.js | 0 .../ckeditor/plugins/language/lang/gl.js | 0 .../ckeditor/plugins/language/lang/he.js | 0 .../ckeditor/plugins/language/lang/hr.js | 0 .../ckeditor/plugins/language/lang/hu.js | 0 .../ckeditor/plugins/language/lang/id.js | 0 .../ckeditor/plugins/language/lang/it.js | 0 .../ckeditor/plugins/language/lang/ja.js | 0 .../ckeditor/plugins/language/lang/km.js | 0 .../ckeditor/plugins/language/lang/ko.js | 0 .../ckeditor/plugins/language/lang/ku.js | 0 .../ckeditor/plugins/language/lang/nb.js | 0 .../ckeditor/plugins/language/lang/nl.js | 0 .../ckeditor/plugins/language/lang/no.js | 0 .../ckeditor/plugins/language/lang/oc.js | 0 .../ckeditor/plugins/language/lang/pl.js | 0 .../ckeditor/plugins/language/lang/pt-br.js | 0 .../ckeditor/plugins/language/lang/pt.js | 0 .../ckeditor/plugins/language/lang/ru.js | 0 .../ckeditor/plugins/language/lang/sk.js | 0 .../ckeditor/plugins/language/lang/sl.js | 0 .../ckeditor/plugins/language/lang/sq.js | 0 .../ckeditor/plugins/language/lang/sv.js | 0 .../ckeditor/plugins/language/lang/tr.js | 0 .../ckeditor/plugins/language/lang/tt.js | 0 .../ckeditor/plugins/language/lang/ug.js | 0 .../ckeditor/plugins/language/lang/uk.js | 0 .../ckeditor/plugins/language/lang/vi.js | 0 .../ckeditor/plugins/language/lang/zh-cn.js | 0 .../ckeditor/plugins/language/lang/zh.js | 0 .../ckeditor/plugins/language/plugin.js | 0 .../ckeditor/plugins/lineutils/plugin.js | 0 .../ckeditor/plugins/link/dialogs/anchor.js | 0 .../ckeditor/plugins/link/dialogs/link.js | 0 .../ckeditor/plugins/link/images/anchor.png | Bin .../plugins/link/images/hidpi/anchor.png | Bin .../plugins/liststyle/dialogs/liststyle.js | 0 .../ckeditor/plugins/liststyle/lang/af.js | 0 .../ckeditor/plugins/liststyle/lang/ar.js | 0 .../ckeditor/plugins/liststyle/lang/az.js | 0 .../ckeditor/plugins/liststyle/lang/bg.js | 0 .../ckeditor/plugins/liststyle/lang/bn.js | 0 .../ckeditor/plugins/liststyle/lang/bs.js | 0 .../ckeditor/plugins/liststyle/lang/ca.js | 0 .../ckeditor/plugins/liststyle/lang/cs.js | 0 .../ckeditor/plugins/liststyle/lang/cy.js | 0 .../ckeditor/plugins/liststyle/lang/da.js | 0 .../ckeditor/plugins/liststyle/lang/de-ch.js | 0 .../ckeditor/plugins/liststyle/lang/de.js | 0 .../ckeditor/plugins/liststyle/lang/el.js | 0 .../ckeditor/plugins/liststyle/lang/en-au.js | 0 .../ckeditor/plugins/liststyle/lang/en-ca.js | 0 .../ckeditor/plugins/liststyle/lang/en-gb.js | 0 .../ckeditor/plugins/liststyle/lang/en.js | 0 .../ckeditor/plugins/liststyle/lang/eo.js | 0 .../ckeditor/plugins/liststyle/lang/es-mx.js | 0 .../ckeditor/plugins/liststyle/lang/es.js | 0 .../ckeditor/plugins/liststyle/lang/et.js | 0 .../ckeditor/plugins/liststyle/lang/eu.js | 0 .../ckeditor/plugins/liststyle/lang/fa.js | 0 .../ckeditor/plugins/liststyle/lang/fi.js | 0 .../ckeditor/plugins/liststyle/lang/fo.js | 0 .../ckeditor/plugins/liststyle/lang/fr-ca.js | 0 .../ckeditor/plugins/liststyle/lang/fr.js | 0 .../ckeditor/plugins/liststyle/lang/gl.js | 0 .../ckeditor/plugins/liststyle/lang/gu.js | 0 .../ckeditor/plugins/liststyle/lang/he.js | 0 .../ckeditor/plugins/liststyle/lang/hi.js | 0 .../ckeditor/plugins/liststyle/lang/hr.js | 0 .../ckeditor/plugins/liststyle/lang/hu.js | 0 .../ckeditor/plugins/liststyle/lang/id.js | 0 .../ckeditor/plugins/liststyle/lang/is.js | 0 .../ckeditor/plugins/liststyle/lang/it.js | 0 .../ckeditor/plugins/liststyle/lang/ja.js | 0 .../ckeditor/plugins/liststyle/lang/ka.js | 0 .../ckeditor/plugins/liststyle/lang/km.js | 0 .../ckeditor/plugins/liststyle/lang/ko.js | 0 .../ckeditor/plugins/liststyle/lang/ku.js | 0 .../ckeditor/plugins/liststyle/lang/lt.js | 0 .../ckeditor/plugins/liststyle/lang/lv.js | 0 .../ckeditor/plugins/liststyle/lang/mk.js | 0 .../ckeditor/plugins/liststyle/lang/mn.js | 0 .../ckeditor/plugins/liststyle/lang/ms.js | 0 .../ckeditor/plugins/liststyle/lang/nb.js | 0 .../ckeditor/plugins/liststyle/lang/nl.js | 0 .../ckeditor/plugins/liststyle/lang/no.js | 0 .../ckeditor/plugins/liststyle/lang/oc.js | 0 .../ckeditor/plugins/liststyle/lang/pl.js | 0 .../ckeditor/plugins/liststyle/lang/pt-br.js | 0 .../ckeditor/plugins/liststyle/lang/pt.js | 0 .../ckeditor/plugins/liststyle/lang/ro.js | 0 .../ckeditor/plugins/liststyle/lang/ru.js | 0 .../ckeditor/plugins/liststyle/lang/si.js | 0 .../ckeditor/plugins/liststyle/lang/sk.js | 0 .../ckeditor/plugins/liststyle/lang/sl.js | 0 .../ckeditor/plugins/liststyle/lang/sq.js | 0 .../plugins/liststyle/lang/sr-latn.js | 0 .../ckeditor/plugins/liststyle/lang/sr.js | 0 .../ckeditor/plugins/liststyle/lang/sv.js | 0 .../ckeditor/plugins/liststyle/lang/th.js | 0 .../ckeditor/plugins/liststyle/lang/tr.js | 0 .../ckeditor/plugins/liststyle/lang/tt.js | 0 .../ckeditor/plugins/liststyle/lang/ug.js | 0 .../ckeditor/plugins/liststyle/lang/uk.js | 0 .../ckeditor/plugins/liststyle/lang/vi.js | 0 .../ckeditor/plugins/liststyle/lang/zh-cn.js | 0 .../ckeditor/plugins/liststyle/lang/zh.js | 0 .../ckeditor/plugins/liststyle/plugin.js | 0 .../magicline/images/hidpi/icon-rtl.png | Bin .../plugins/magicline/images/hidpi/icon.png | Bin .../plugins/magicline/images/icon-rtl.png | Bin .../plugins/magicline/images/icon.png | Bin .../plugins/mathjax/dialogs/mathjax.js | 0 .../plugins/mathjax/icons/hidpi/mathjax.png | Bin .../plugins/mathjax/icons/mathjax.png | Bin .../plugins/mathjax/images/loader.gif | Bin .../ckeditor/plugins/mathjax/lang/af.js | 0 .../ckeditor/plugins/mathjax/lang/ar.js | 0 .../ckeditor/plugins/mathjax/lang/az.js | 0 .../ckeditor/plugins/mathjax/lang/bg.js | 0 .../ckeditor/plugins/mathjax/lang/ca.js | 0 .../ckeditor/plugins/mathjax/lang/cs.js | 0 .../ckeditor/plugins/mathjax/lang/cy.js | 0 .../ckeditor/plugins/mathjax/lang/da.js | 0 .../ckeditor/plugins/mathjax/lang/de-ch.js | 0 .../ckeditor/plugins/mathjax/lang/de.js | 0 .../ckeditor/plugins/mathjax/lang/el.js | 0 .../ckeditor/plugins/mathjax/lang/en-gb.js | 0 .../ckeditor/plugins/mathjax/lang/en.js | 0 .../ckeditor/plugins/mathjax/lang/eo.js | 0 .../ckeditor/plugins/mathjax/lang/es-mx.js | 0 .../ckeditor/plugins/mathjax/lang/es.js | 0 .../ckeditor/plugins/mathjax/lang/eu.js | 0 .../ckeditor/plugins/mathjax/lang/fa.js | 0 .../ckeditor/plugins/mathjax/lang/fi.js | 0 .../ckeditor/plugins/mathjax/lang/fr.js | 0 .../ckeditor/plugins/mathjax/lang/gl.js | 0 .../ckeditor/plugins/mathjax/lang/he.js | 0 .../ckeditor/plugins/mathjax/lang/hr.js | 0 .../ckeditor/plugins/mathjax/lang/hu.js | 0 .../ckeditor/plugins/mathjax/lang/id.js | 0 .../ckeditor/plugins/mathjax/lang/it.js | 0 .../ckeditor/plugins/mathjax/lang/ja.js | 0 .../ckeditor/plugins/mathjax/lang/km.js | 0 .../ckeditor/plugins/mathjax/lang/ko.js | 0 .../ckeditor/plugins/mathjax/lang/ku.js | 0 .../ckeditor/plugins/mathjax/lang/lt.js | 0 .../ckeditor/plugins/mathjax/lang/nb.js | 0 .../ckeditor/plugins/mathjax/lang/nl.js | 0 .../ckeditor/plugins/mathjax/lang/no.js | 0 .../ckeditor/plugins/mathjax/lang/oc.js | 0 .../ckeditor/plugins/mathjax/lang/pl.js | 0 .../ckeditor/plugins/mathjax/lang/pt-br.js | 0 .../ckeditor/plugins/mathjax/lang/pt.js | 0 .../ckeditor/plugins/mathjax/lang/ro.js | 0 .../ckeditor/plugins/mathjax/lang/ru.js | 0 .../ckeditor/plugins/mathjax/lang/sk.js | 0 .../ckeditor/plugins/mathjax/lang/sl.js | 0 .../ckeditor/plugins/mathjax/lang/sq.js | 0 .../ckeditor/plugins/mathjax/lang/sv.js | 0 .../ckeditor/plugins/mathjax/lang/tr.js | 0 .../ckeditor/plugins/mathjax/lang/tt.js | 0 .../ckeditor/plugins/mathjax/lang/ug.js | 0 .../ckeditor/plugins/mathjax/lang/uk.js | 0 .../ckeditor/plugins/mathjax/lang/vi.js | 0 .../ckeditor/plugins/mathjax/lang/zh-cn.js | 0 .../ckeditor/plugins/mathjax/lang/zh.js | 0 .../ckeditor/plugins/mathjax/plugin.js | 0 .../newpage/icons/hidpi/newpage-rtl.png | Bin .../plugins/newpage/icons/hidpi/newpage.png | Bin .../plugins/newpage/icons/newpage-rtl.png | Bin .../plugins/newpage/icons/newpage.png | Bin .../ckeditor/plugins/newpage/lang/af.js | 0 .../ckeditor/plugins/newpage/lang/ar.js | 0 .../ckeditor/plugins/newpage/lang/az.js | 0 .../ckeditor/plugins/newpage/lang/bg.js | 0 .../ckeditor/plugins/newpage/lang/bn.js | 0 .../ckeditor/plugins/newpage/lang/bs.js | 0 .../ckeditor/plugins/newpage/lang/ca.js | 0 .../ckeditor/plugins/newpage/lang/cs.js | 0 .../ckeditor/plugins/newpage/lang/cy.js | 0 .../ckeditor/plugins/newpage/lang/da.js | 0 .../ckeditor/plugins/newpage/lang/de-ch.js | 0 .../ckeditor/plugins/newpage/lang/de.js | 0 .../ckeditor/plugins/newpage/lang/el.js | 0 .../ckeditor/plugins/newpage/lang/en-au.js | 0 .../ckeditor/plugins/newpage/lang/en-ca.js | 0 .../ckeditor/plugins/newpage/lang/en-gb.js | 0 .../ckeditor/plugins/newpage/lang/en.js | 0 .../ckeditor/plugins/newpage/lang/eo.js | 0 .../ckeditor/plugins/newpage/lang/es-mx.js | 0 .../ckeditor/plugins/newpage/lang/es.js | 0 .../ckeditor/plugins/newpage/lang/et.js | 0 .../ckeditor/plugins/newpage/lang/eu.js | 0 .../ckeditor/plugins/newpage/lang/fa.js | 0 .../ckeditor/plugins/newpage/lang/fi.js | 0 .../ckeditor/plugins/newpage/lang/fo.js | 0 .../ckeditor/plugins/newpage/lang/fr-ca.js | 0 .../ckeditor/plugins/newpage/lang/fr.js | 0 .../ckeditor/plugins/newpage/lang/gl.js | 0 .../ckeditor/plugins/newpage/lang/gu.js | 0 .../ckeditor/plugins/newpage/lang/he.js | 0 .../ckeditor/plugins/newpage/lang/hi.js | 0 .../ckeditor/plugins/newpage/lang/hr.js | 0 .../ckeditor/plugins/newpage/lang/hu.js | 0 .../ckeditor/plugins/newpage/lang/id.js | 0 .../ckeditor/plugins/newpage/lang/is.js | 0 .../ckeditor/plugins/newpage/lang/it.js | 0 .../ckeditor/plugins/newpage/lang/ja.js | 0 .../ckeditor/plugins/newpage/lang/ka.js | 0 .../ckeditor/plugins/newpage/lang/km.js | 0 .../ckeditor/plugins/newpage/lang/ko.js | 0 .../ckeditor/plugins/newpage/lang/ku.js | 0 .../ckeditor/plugins/newpage/lang/lt.js | 0 .../ckeditor/plugins/newpage/lang/lv.js | 0 .../ckeditor/plugins/newpage/lang/mk.js | 0 .../ckeditor/plugins/newpage/lang/mn.js | 0 .../ckeditor/plugins/newpage/lang/ms.js | 0 .../ckeditor/plugins/newpage/lang/nb.js | 0 .../ckeditor/plugins/newpage/lang/nl.js | 0 .../ckeditor/plugins/newpage/lang/no.js | 0 .../ckeditor/plugins/newpage/lang/oc.js | 0 .../ckeditor/plugins/newpage/lang/pl.js | 0 .../ckeditor/plugins/newpage/lang/pt-br.js | 0 .../ckeditor/plugins/newpage/lang/pt.js | 0 .../ckeditor/plugins/newpage/lang/ro.js | 0 .../ckeditor/plugins/newpage/lang/ru.js | 0 .../ckeditor/plugins/newpage/lang/si.js | 0 .../ckeditor/plugins/newpage/lang/sk.js | 0 .../ckeditor/plugins/newpage/lang/sl.js | 0 .../ckeditor/plugins/newpage/lang/sq.js | 0 .../ckeditor/plugins/newpage/lang/sr-latn.js | 0 .../ckeditor/plugins/newpage/lang/sr.js | 0 .../ckeditor/plugins/newpage/lang/sv.js | 0 .../ckeditor/plugins/newpage/lang/th.js | 0 .../ckeditor/plugins/newpage/lang/tr.js | 0 .../ckeditor/plugins/newpage/lang/tt.js | 0 .../ckeditor/plugins/newpage/lang/ug.js | 0 .../ckeditor/plugins/newpage/lang/uk.js | 0 .../ckeditor/plugins/newpage/lang/vi.js | 0 .../ckeditor/plugins/newpage/lang/zh-cn.js | 0 .../ckeditor/plugins/newpage/lang/zh.js | 0 .../ckeditor/plugins/newpage/plugin.js | 0 .../plugins/notificationaggregator/plugin.js | 0 .../pagebreak/icons/hidpi/pagebreak-rtl.png | Bin .../pagebreak/icons/hidpi/pagebreak.png | Bin .../plugins/pagebreak/icons/pagebreak-rtl.png | Bin .../plugins/pagebreak/icons/pagebreak.png | Bin .../plugins/pagebreak/images/pagebreak.gif | Bin .../ckeditor/plugins/pagebreak/lang/af.js | 0 .../ckeditor/plugins/pagebreak/lang/ar.js | 0 .../ckeditor/plugins/pagebreak/lang/az.js | 0 .../ckeditor/plugins/pagebreak/lang/bg.js | 0 .../ckeditor/plugins/pagebreak/lang/bn.js | 0 .../ckeditor/plugins/pagebreak/lang/bs.js | 0 .../ckeditor/plugins/pagebreak/lang/ca.js | 0 .../ckeditor/plugins/pagebreak/lang/cs.js | 0 .../ckeditor/plugins/pagebreak/lang/cy.js | 0 .../ckeditor/plugins/pagebreak/lang/da.js | 0 .../ckeditor/plugins/pagebreak/lang/de-ch.js | 0 .../ckeditor/plugins/pagebreak/lang/de.js | 0 .../ckeditor/plugins/pagebreak/lang/el.js | 0 .../ckeditor/plugins/pagebreak/lang/en-au.js | 0 .../ckeditor/plugins/pagebreak/lang/en-ca.js | 0 .../ckeditor/plugins/pagebreak/lang/en-gb.js | 0 .../ckeditor/plugins/pagebreak/lang/en.js | 0 .../ckeditor/plugins/pagebreak/lang/eo.js | 0 .../ckeditor/plugins/pagebreak/lang/es-mx.js | 0 .../ckeditor/plugins/pagebreak/lang/es.js | 0 .../ckeditor/plugins/pagebreak/lang/et.js | 0 .../ckeditor/plugins/pagebreak/lang/eu.js | 0 .../ckeditor/plugins/pagebreak/lang/fa.js | 0 .../ckeditor/plugins/pagebreak/lang/fi.js | 0 .../ckeditor/plugins/pagebreak/lang/fo.js | 0 .../ckeditor/plugins/pagebreak/lang/fr-ca.js | 0 .../ckeditor/plugins/pagebreak/lang/fr.js | 0 .../ckeditor/plugins/pagebreak/lang/gl.js | 0 .../ckeditor/plugins/pagebreak/lang/gu.js | 0 .../ckeditor/plugins/pagebreak/lang/he.js | 0 .../ckeditor/plugins/pagebreak/lang/hi.js | 0 .../ckeditor/plugins/pagebreak/lang/hr.js | 0 .../ckeditor/plugins/pagebreak/lang/hu.js | 0 .../ckeditor/plugins/pagebreak/lang/id.js | 0 .../ckeditor/plugins/pagebreak/lang/is.js | 0 .../ckeditor/plugins/pagebreak/lang/it.js | 0 .../ckeditor/plugins/pagebreak/lang/ja.js | 0 .../ckeditor/plugins/pagebreak/lang/ka.js | 0 .../ckeditor/plugins/pagebreak/lang/km.js | 0 .../ckeditor/plugins/pagebreak/lang/ko.js | 0 .../ckeditor/plugins/pagebreak/lang/ku.js | 0 .../ckeditor/plugins/pagebreak/lang/lt.js | 0 .../ckeditor/plugins/pagebreak/lang/lv.js | 0 .../ckeditor/plugins/pagebreak/lang/mk.js | 0 .../ckeditor/plugins/pagebreak/lang/mn.js | 0 .../ckeditor/plugins/pagebreak/lang/ms.js | 0 .../ckeditor/plugins/pagebreak/lang/nb.js | 0 .../ckeditor/plugins/pagebreak/lang/nl.js | 0 .../ckeditor/plugins/pagebreak/lang/no.js | 0 .../ckeditor/plugins/pagebreak/lang/oc.js | 0 .../ckeditor/plugins/pagebreak/lang/pl.js | 0 .../ckeditor/plugins/pagebreak/lang/pt-br.js | 0 .../ckeditor/plugins/pagebreak/lang/pt.js | 0 .../ckeditor/plugins/pagebreak/lang/ro.js | 0 .../ckeditor/plugins/pagebreak/lang/ru.js | 0 .../ckeditor/plugins/pagebreak/lang/si.js | 0 .../ckeditor/plugins/pagebreak/lang/sk.js | 0 .../ckeditor/plugins/pagebreak/lang/sl.js | 0 .../ckeditor/plugins/pagebreak/lang/sq.js | 0 .../plugins/pagebreak/lang/sr-latn.js | 0 .../ckeditor/plugins/pagebreak/lang/sr.js | 0 .../ckeditor/plugins/pagebreak/lang/sv.js | 0 .../ckeditor/plugins/pagebreak/lang/th.js | 0 .../ckeditor/plugins/pagebreak/lang/tr.js | 0 .../ckeditor/plugins/pagebreak/lang/tt.js | 0 .../ckeditor/plugins/pagebreak/lang/ug.js | 0 .../ckeditor/plugins/pagebreak/lang/uk.js | 0 .../ckeditor/plugins/pagebreak/lang/vi.js | 0 .../ckeditor/plugins/pagebreak/lang/zh-cn.js | 0 .../ckeditor/plugins/pagebreak/lang/zh.js | 0 .../ckeditor/plugins/pagebreak/plugin.js | 0 .../ckeditor/plugins/panelbutton/plugin.js | 0 .../plugins/pastefromword/filter/default.js | 0 .../placeholder/dialogs/placeholder.js | 0 .../placeholder/icons/hidpi/placeholder.png | Bin .../plugins/placeholder/icons/placeholder.png | Bin .../ckeditor/plugins/placeholder/lang/af.js | 0 .../ckeditor/plugins/placeholder/lang/ar.js | 0 .../ckeditor/plugins/placeholder/lang/az.js | 0 .../ckeditor/plugins/placeholder/lang/bg.js | 0 .../ckeditor/plugins/placeholder/lang/ca.js | 0 .../ckeditor/plugins/placeholder/lang/cs.js | 0 .../ckeditor/plugins/placeholder/lang/cy.js | 0 .../ckeditor/plugins/placeholder/lang/da.js | 0 .../plugins/placeholder/lang/de-ch.js | 0 .../ckeditor/plugins/placeholder/lang/de.js | 0 .../ckeditor/plugins/placeholder/lang/el.js | 0 .../plugins/placeholder/lang/en-gb.js | 0 .../ckeditor/plugins/placeholder/lang/en.js | 0 .../ckeditor/plugins/placeholder/lang/eo.js | 0 .../plugins/placeholder/lang/es-mx.js | 0 .../ckeditor/plugins/placeholder/lang/es.js | 0 .../ckeditor/plugins/placeholder/lang/et.js | 0 .../ckeditor/plugins/placeholder/lang/eu.js | 0 .../ckeditor/plugins/placeholder/lang/fa.js | 0 .../ckeditor/plugins/placeholder/lang/fi.js | 0 .../plugins/placeholder/lang/fr-ca.js | 0 .../ckeditor/plugins/placeholder/lang/fr.js | 0 .../ckeditor/plugins/placeholder/lang/gl.js | 0 .../ckeditor/plugins/placeholder/lang/he.js | 0 .../ckeditor/plugins/placeholder/lang/hr.js | 0 .../ckeditor/plugins/placeholder/lang/hu.js | 0 .../ckeditor/plugins/placeholder/lang/id.js | 0 .../ckeditor/plugins/placeholder/lang/it.js | 0 .../ckeditor/plugins/placeholder/lang/ja.js | 0 .../ckeditor/plugins/placeholder/lang/km.js | 0 .../ckeditor/plugins/placeholder/lang/ko.js | 0 .../ckeditor/plugins/placeholder/lang/ku.js | 0 .../ckeditor/plugins/placeholder/lang/lv.js | 0 .../ckeditor/plugins/placeholder/lang/nb.js | 0 .../ckeditor/plugins/placeholder/lang/nl.js | 0 .../ckeditor/plugins/placeholder/lang/no.js | 0 .../ckeditor/plugins/placeholder/lang/oc.js | 0 .../ckeditor/plugins/placeholder/lang/pl.js | 0 .../plugins/placeholder/lang/pt-br.js | 0 .../ckeditor/plugins/placeholder/lang/pt.js | 0 .../ckeditor/plugins/placeholder/lang/ru.js | 0 .../ckeditor/plugins/placeholder/lang/si.js | 0 .../ckeditor/plugins/placeholder/lang/sk.js | 0 .../ckeditor/plugins/placeholder/lang/sl.js | 0 .../ckeditor/plugins/placeholder/lang/sq.js | 0 .../ckeditor/plugins/placeholder/lang/sv.js | 0 .../ckeditor/plugins/placeholder/lang/th.js | 0 .../ckeditor/plugins/placeholder/lang/tr.js | 0 .../ckeditor/plugins/placeholder/lang/tt.js | 0 .../ckeditor/plugins/placeholder/lang/ug.js | 0 .../ckeditor/plugins/placeholder/lang/uk.js | 0 .../ckeditor/plugins/placeholder/lang/vi.js | 0 .../plugins/placeholder/lang/zh-cn.js | 0 .../ckeditor/plugins/placeholder/lang/zh.js | 0 .../ckeditor/plugins/placeholder/plugin.js | 0 .../preview/icons/hidpi/preview-rtl.png | Bin .../plugins/preview/icons/hidpi/preview.png | Bin .../plugins/preview/icons/preview-rtl.png | Bin .../plugins/preview/icons/preview.png | Bin .../ckeditor/plugins/preview/lang/af.js | 0 .../ckeditor/plugins/preview/lang/ar.js | 0 .../ckeditor/plugins/preview/lang/az.js | 0 .../ckeditor/plugins/preview/lang/bg.js | 0 .../ckeditor/plugins/preview/lang/bn.js | 0 .../ckeditor/plugins/preview/lang/bs.js | 0 .../ckeditor/plugins/preview/lang/ca.js | 0 .../ckeditor/plugins/preview/lang/cs.js | 0 .../ckeditor/plugins/preview/lang/cy.js | 0 .../ckeditor/plugins/preview/lang/da.js | 0 .../ckeditor/plugins/preview/lang/de-ch.js | 0 .../ckeditor/plugins/preview/lang/de.js | 0 .../ckeditor/plugins/preview/lang/el.js | 0 .../ckeditor/plugins/preview/lang/en-au.js | 0 .../ckeditor/plugins/preview/lang/en-ca.js | 0 .../ckeditor/plugins/preview/lang/en-gb.js | 0 .../ckeditor/plugins/preview/lang/en.js | 0 .../ckeditor/plugins/preview/lang/eo.js | 0 .../ckeditor/plugins/preview/lang/es-mx.js | 0 .../ckeditor/plugins/preview/lang/es.js | 0 .../ckeditor/plugins/preview/lang/et.js | 0 .../ckeditor/plugins/preview/lang/eu.js | 0 .../ckeditor/plugins/preview/lang/fa.js | 0 .../ckeditor/plugins/preview/lang/fi.js | 0 .../ckeditor/plugins/preview/lang/fo.js | 0 .../ckeditor/plugins/preview/lang/fr-ca.js | 0 .../ckeditor/plugins/preview/lang/fr.js | 0 .../ckeditor/plugins/preview/lang/gl.js | 0 .../ckeditor/plugins/preview/lang/gu.js | 0 .../ckeditor/plugins/preview/lang/he.js | 0 .../ckeditor/plugins/preview/lang/hi.js | 0 .../ckeditor/plugins/preview/lang/hr.js | 0 .../ckeditor/plugins/preview/lang/hu.js | 0 .../ckeditor/plugins/preview/lang/id.js | 0 .../ckeditor/plugins/preview/lang/is.js | 0 .../ckeditor/plugins/preview/lang/it.js | 0 .../ckeditor/plugins/preview/lang/ja.js | 0 .../ckeditor/plugins/preview/lang/ka.js | 0 .../ckeditor/plugins/preview/lang/km.js | 0 .../ckeditor/plugins/preview/lang/ko.js | 0 .../ckeditor/plugins/preview/lang/ku.js | 0 .../ckeditor/plugins/preview/lang/lt.js | 0 .../ckeditor/plugins/preview/lang/lv.js | 0 .../ckeditor/plugins/preview/lang/mk.js | 0 .../ckeditor/plugins/preview/lang/mn.js | 0 .../ckeditor/plugins/preview/lang/ms.js | 0 .../ckeditor/plugins/preview/lang/nb.js | 0 .../ckeditor/plugins/preview/lang/nl.js | 0 .../ckeditor/plugins/preview/lang/no.js | 0 .../ckeditor/plugins/preview/lang/oc.js | 0 .../ckeditor/plugins/preview/lang/pl.js | 0 .../ckeditor/plugins/preview/lang/pt-br.js | 0 .../ckeditor/plugins/preview/lang/pt.js | 0 .../ckeditor/plugins/preview/lang/ro.js | 0 .../ckeditor/plugins/preview/lang/ru.js | 0 .../ckeditor/plugins/preview/lang/si.js | 0 .../ckeditor/plugins/preview/lang/sk.js | 0 .../ckeditor/plugins/preview/lang/sl.js | 0 .../ckeditor/plugins/preview/lang/sq.js | 0 .../ckeditor/plugins/preview/lang/sr-latn.js | 0 .../ckeditor/plugins/preview/lang/sr.js | 0 .../ckeditor/plugins/preview/lang/sv.js | 0 .../ckeditor/plugins/preview/lang/th.js | 0 .../ckeditor/plugins/preview/lang/tr.js | 0 .../ckeditor/plugins/preview/lang/tt.js | 0 .../ckeditor/plugins/preview/lang/ug.js | 0 .../ckeditor/plugins/preview/lang/uk.js | 0 .../ckeditor/plugins/preview/lang/vi.js | 0 .../ckeditor/plugins/preview/lang/zh-cn.js | 0 .../ckeditor/plugins/preview/lang/zh.js | 0 .../ckeditor/plugins/preview/plugin.js | 0 .../ckeditor/plugins/preview/preview.html | 0 .../plugins/print/icons/hidpi/print.png | Bin .../ckeditor/plugins/print/icons/print.png | Bin .../ckeditor/plugins/print/lang/af.js | 0 .../ckeditor/plugins/print/lang/ar.js | 0 .../ckeditor/plugins/print/lang/az.js | 0 .../ckeditor/plugins/print/lang/bg.js | 0 .../ckeditor/plugins/print/lang/bn.js | 0 .../ckeditor/plugins/print/lang/bs.js | 0 .../ckeditor/plugins/print/lang/ca.js | 0 .../ckeditor/plugins/print/lang/cs.js | 0 .../ckeditor/plugins/print/lang/cy.js | 0 .../ckeditor/plugins/print/lang/da.js | 0 .../ckeditor/plugins/print/lang/de-ch.js | 0 .../ckeditor/plugins/print/lang/de.js | 0 .../ckeditor/plugins/print/lang/el.js | 0 .../ckeditor/plugins/print/lang/en-au.js | 0 .../ckeditor/plugins/print/lang/en-ca.js | 0 .../ckeditor/plugins/print/lang/en-gb.js | 0 .../ckeditor/plugins/print/lang/en.js | 0 .../ckeditor/plugins/print/lang/eo.js | 0 .../ckeditor/plugins/print/lang/es-mx.js | 0 .../ckeditor/plugins/print/lang/es.js | 0 .../ckeditor/plugins/print/lang/et.js | 0 .../ckeditor/plugins/print/lang/eu.js | 0 .../ckeditor/plugins/print/lang/fa.js | 0 .../ckeditor/plugins/print/lang/fi.js | 0 .../ckeditor/plugins/print/lang/fo.js | 0 .../ckeditor/plugins/print/lang/fr-ca.js | 0 .../ckeditor/plugins/print/lang/fr.js | 0 .../ckeditor/plugins/print/lang/gl.js | 0 .../ckeditor/plugins/print/lang/gu.js | 0 .../ckeditor/plugins/print/lang/he.js | 0 .../ckeditor/plugins/print/lang/hi.js | 0 .../ckeditor/plugins/print/lang/hr.js | 0 .../ckeditor/plugins/print/lang/hu.js | 0 .../ckeditor/plugins/print/lang/id.js | 0 .../ckeditor/plugins/print/lang/is.js | 0 .../ckeditor/plugins/print/lang/it.js | 0 .../ckeditor/plugins/print/lang/ja.js | 0 .../ckeditor/plugins/print/lang/ka.js | 0 .../ckeditor/plugins/print/lang/km.js | 0 .../ckeditor/plugins/print/lang/ko.js | 0 .../ckeditor/plugins/print/lang/ku.js | 0 .../ckeditor/plugins/print/lang/lt.js | 0 .../ckeditor/plugins/print/lang/lv.js | 0 .../ckeditor/plugins/print/lang/mk.js | 0 .../ckeditor/plugins/print/lang/mn.js | 0 .../ckeditor/plugins/print/lang/ms.js | 0 .../ckeditor/plugins/print/lang/nb.js | 0 .../ckeditor/plugins/print/lang/nl.js | 0 .../ckeditor/plugins/print/lang/no.js | 0 .../ckeditor/plugins/print/lang/oc.js | 0 .../ckeditor/plugins/print/lang/pl.js | 0 .../ckeditor/plugins/print/lang/pt-br.js | 0 .../ckeditor/plugins/print/lang/pt.js | 0 .../ckeditor/plugins/print/lang/ro.js | 0 .../ckeditor/plugins/print/lang/ru.js | 0 .../ckeditor/plugins/print/lang/si.js | 0 .../ckeditor/plugins/print/lang/sk.js | 0 .../ckeditor/plugins/print/lang/sl.js | 0 .../ckeditor/plugins/print/lang/sq.js | 0 .../ckeditor/plugins/print/lang/sr-latn.js | 0 .../ckeditor/plugins/print/lang/sr.js | 0 .../ckeditor/plugins/print/lang/sv.js | 0 .../ckeditor/plugins/print/lang/th.js | 0 .../ckeditor/plugins/print/lang/tr.js | 0 .../ckeditor/plugins/print/lang/tt.js | 0 .../ckeditor/plugins/print/lang/ug.js | 0 .../ckeditor/plugins/print/lang/uk.js | 0 .../ckeditor/plugins/print/lang/vi.js | 0 .../ckeditor/plugins/print/lang/zh-cn.js | 0 .../ckeditor/plugins/print/lang/zh.js | 0 .../ckeditor/plugins/print/plugin.js | 0 .../plugins/save/icons/hidpi/save.png | Bin .../ckeditor/plugins/save/icons/save.png | Bin .../ckeditor/plugins/save/lang/af.js | 0 .../ckeditor/plugins/save/lang/ar.js | 0 .../ckeditor/plugins/save/lang/az.js | 0 .../ckeditor/plugins/save/lang/bg.js | 0 .../ckeditor/plugins/save/lang/bn.js | 0 .../ckeditor/plugins/save/lang/bs.js | 0 .../ckeditor/plugins/save/lang/ca.js | 0 .../ckeditor/plugins/save/lang/cs.js | 0 .../ckeditor/plugins/save/lang/cy.js | 0 .../ckeditor/plugins/save/lang/da.js | 0 .../ckeditor/plugins/save/lang/de-ch.js | 0 .../ckeditor/plugins/save/lang/de.js | 0 .../ckeditor/plugins/save/lang/el.js | 0 .../ckeditor/plugins/save/lang/en-au.js | 0 .../ckeditor/plugins/save/lang/en-ca.js | 0 .../ckeditor/plugins/save/lang/en-gb.js | 0 .../ckeditor/plugins/save/lang/en.js | 0 .../ckeditor/plugins/save/lang/eo.js | 0 .../ckeditor/plugins/save/lang/es-mx.js | 0 .../ckeditor/plugins/save/lang/es.js | 0 .../ckeditor/plugins/save/lang/et.js | 0 .../ckeditor/plugins/save/lang/eu.js | 0 .../ckeditor/plugins/save/lang/fa.js | 0 .../ckeditor/plugins/save/lang/fi.js | 0 .../ckeditor/plugins/save/lang/fo.js | 0 .../ckeditor/plugins/save/lang/fr-ca.js | 0 .../ckeditor/plugins/save/lang/fr.js | 0 .../ckeditor/plugins/save/lang/gl.js | 0 .../ckeditor/plugins/save/lang/gu.js | 0 .../ckeditor/plugins/save/lang/he.js | 0 .../ckeditor/plugins/save/lang/hi.js | 0 .../ckeditor/plugins/save/lang/hr.js | 0 .../ckeditor/plugins/save/lang/hu.js | 0 .../ckeditor/plugins/save/lang/id.js | 0 .../ckeditor/plugins/save/lang/is.js | 0 .../ckeditor/plugins/save/lang/it.js | 0 .../ckeditor/plugins/save/lang/ja.js | 0 .../ckeditor/plugins/save/lang/ka.js | 0 .../ckeditor/plugins/save/lang/km.js | 0 .../ckeditor/plugins/save/lang/ko.js | 0 .../ckeditor/plugins/save/lang/ku.js | 0 .../ckeditor/plugins/save/lang/lt.js | 0 .../ckeditor/plugins/save/lang/lv.js | 0 .../ckeditor/plugins/save/lang/mk.js | 0 .../ckeditor/plugins/save/lang/mn.js | 0 .../ckeditor/plugins/save/lang/ms.js | 0 .../ckeditor/plugins/save/lang/nb.js | 0 .../ckeditor/plugins/save/lang/nl.js | 0 .../ckeditor/plugins/save/lang/no.js | 0 .../ckeditor/plugins/save/lang/oc.js | 0 .../ckeditor/plugins/save/lang/pl.js | 0 .../ckeditor/plugins/save/lang/pt-br.js | 0 .../ckeditor/plugins/save/lang/pt.js | 0 .../ckeditor/plugins/save/lang/ro.js | 0 .../ckeditor/plugins/save/lang/ru.js | 0 .../ckeditor/plugins/save/lang/si.js | 0 .../ckeditor/plugins/save/lang/sk.js | 0 .../ckeditor/plugins/save/lang/sl.js | 0 .../ckeditor/plugins/save/lang/sq.js | 0 .../ckeditor/plugins/save/lang/sr-latn.js | 0 .../ckeditor/plugins/save/lang/sr.js | 0 .../ckeditor/plugins/save/lang/sv.js | 0 .../ckeditor/plugins/save/lang/th.js | 0 .../ckeditor/plugins/save/lang/tr.js | 0 .../ckeditor/plugins/save/lang/tt.js | 0 .../ckeditor/plugins/save/lang/ug.js | 0 .../ckeditor/plugins/save/lang/uk.js | 0 .../ckeditor/plugins/save/lang/vi.js | 0 .../ckeditor/plugins/save/lang/zh-cn.js | 0 .../ckeditor/plugins/save/lang/zh.js | 0 .../ckeditor/plugins/save/plugin.js | 0 .../ckeditor/plugins/scayt/CHANGELOG.md | 0 .../ckeditor/plugins/scayt/LICENSE.md | 0 .../ckeditor/plugins/scayt/dialogs/dialog.css | 0 .../ckeditor/plugins/scayt/dialogs/options.js | 0 .../plugins/scayt/dialogs/toolbar.css | 0 .../plugins/scayt/skins/moono-lisa/scayt.css | 0 .../selectall/icons/hidpi/selectall.png | Bin .../plugins/selectall/icons/selectall.png | Bin .../ckeditor/plugins/selectall/lang/af.js | 0 .../ckeditor/plugins/selectall/lang/ar.js | 0 .../ckeditor/plugins/selectall/lang/az.js | 0 .../ckeditor/plugins/selectall/lang/bg.js | 0 .../ckeditor/plugins/selectall/lang/bn.js | 0 .../ckeditor/plugins/selectall/lang/bs.js | 0 .../ckeditor/plugins/selectall/lang/ca.js | 0 .../ckeditor/plugins/selectall/lang/cs.js | 0 .../ckeditor/plugins/selectall/lang/cy.js | 0 .../ckeditor/plugins/selectall/lang/da.js | 0 .../ckeditor/plugins/selectall/lang/de-ch.js | 0 .../ckeditor/plugins/selectall/lang/de.js | 0 .../ckeditor/plugins/selectall/lang/el.js | 0 .../ckeditor/plugins/selectall/lang/en-au.js | 0 .../ckeditor/plugins/selectall/lang/en-ca.js | 0 .../ckeditor/plugins/selectall/lang/en-gb.js | 0 .../ckeditor/plugins/selectall/lang/en.js | 0 .../ckeditor/plugins/selectall/lang/eo.js | 0 .../ckeditor/plugins/selectall/lang/es-mx.js | 0 .../ckeditor/plugins/selectall/lang/es.js | 0 .../ckeditor/plugins/selectall/lang/et.js | 0 .../ckeditor/plugins/selectall/lang/eu.js | 0 .../ckeditor/plugins/selectall/lang/fa.js | 0 .../ckeditor/plugins/selectall/lang/fi.js | 0 .../ckeditor/plugins/selectall/lang/fo.js | 0 .../ckeditor/plugins/selectall/lang/fr-ca.js | 0 .../ckeditor/plugins/selectall/lang/fr.js | 0 .../ckeditor/plugins/selectall/lang/gl.js | 0 .../ckeditor/plugins/selectall/lang/gu.js | 0 .../ckeditor/plugins/selectall/lang/he.js | 0 .../ckeditor/plugins/selectall/lang/hi.js | 0 .../ckeditor/plugins/selectall/lang/hr.js | 0 .../ckeditor/plugins/selectall/lang/hu.js | 0 .../ckeditor/plugins/selectall/lang/id.js | 0 .../ckeditor/plugins/selectall/lang/is.js | 0 .../ckeditor/plugins/selectall/lang/it.js | 0 .../ckeditor/plugins/selectall/lang/ja.js | 0 .../ckeditor/plugins/selectall/lang/ka.js | 0 .../ckeditor/plugins/selectall/lang/km.js | 0 .../ckeditor/plugins/selectall/lang/ko.js | 0 .../ckeditor/plugins/selectall/lang/ku.js | 0 .../ckeditor/plugins/selectall/lang/lt.js | 0 .../ckeditor/plugins/selectall/lang/lv.js | 0 .../ckeditor/plugins/selectall/lang/mk.js | 0 .../ckeditor/plugins/selectall/lang/mn.js | 0 .../ckeditor/plugins/selectall/lang/ms.js | 0 .../ckeditor/plugins/selectall/lang/nb.js | 0 .../ckeditor/plugins/selectall/lang/nl.js | 0 .../ckeditor/plugins/selectall/lang/no.js | 0 .../ckeditor/plugins/selectall/lang/oc.js | 0 .../ckeditor/plugins/selectall/lang/pl.js | 0 .../ckeditor/plugins/selectall/lang/pt-br.js | 0 .../ckeditor/plugins/selectall/lang/pt.js | 0 .../ckeditor/plugins/selectall/lang/ro.js | 0 .../ckeditor/plugins/selectall/lang/ru.js | 0 .../ckeditor/plugins/selectall/lang/si.js | 0 .../ckeditor/plugins/selectall/lang/sk.js | 0 .../ckeditor/plugins/selectall/lang/sl.js | 0 .../ckeditor/plugins/selectall/lang/sq.js | 0 .../plugins/selectall/lang/sr-latn.js | 0 .../ckeditor/plugins/selectall/lang/sr.js | 0 .../ckeditor/plugins/selectall/lang/sv.js | 0 .../ckeditor/plugins/selectall/lang/th.js | 0 .../ckeditor/plugins/selectall/lang/tr.js | 0 .../ckeditor/plugins/selectall/lang/tt.js | 0 .../ckeditor/plugins/selectall/lang/ug.js | 0 .../ckeditor/plugins/selectall/lang/uk.js | 0 .../ckeditor/plugins/selectall/lang/vi.js | 0 .../ckeditor/plugins/selectall/lang/zh-cn.js | 0 .../ckeditor/plugins/selectall/lang/zh.js | 0 .../ckeditor/plugins/selectall/plugin.js | 0 .../ckeditor/plugins/sharedspace/plugin.js | 0 .../showblocks/icons/hidpi/showblocks-rtl.png | Bin .../showblocks/icons/hidpi/showblocks.png | Bin .../showblocks/icons/showblocks-rtl.png | Bin .../plugins/showblocks/icons/showblocks.png | Bin .../showblocks/images/block_address.png | Bin .../showblocks/images/block_blockquote.png | Bin .../plugins/showblocks/images/block_div.png | Bin .../plugins/showblocks/images/block_h1.png | Bin .../plugins/showblocks/images/block_h2.png | Bin .../plugins/showblocks/images/block_h3.png | Bin .../plugins/showblocks/images/block_h4.png | Bin .../plugins/showblocks/images/block_h5.png | Bin .../plugins/showblocks/images/block_h6.png | Bin .../plugins/showblocks/images/block_p.png | Bin .../plugins/showblocks/images/block_pre.png | Bin .../ckeditor/plugins/showblocks/lang/af.js | 0 .../ckeditor/plugins/showblocks/lang/ar.js | 0 .../ckeditor/plugins/showblocks/lang/az.js | 0 .../ckeditor/plugins/showblocks/lang/bg.js | 0 .../ckeditor/plugins/showblocks/lang/bn.js | 0 .../ckeditor/plugins/showblocks/lang/bs.js | 0 .../ckeditor/plugins/showblocks/lang/ca.js | 0 .../ckeditor/plugins/showblocks/lang/cs.js | 0 .../ckeditor/plugins/showblocks/lang/cy.js | 0 .../ckeditor/plugins/showblocks/lang/da.js | 0 .../ckeditor/plugins/showblocks/lang/de-ch.js | 0 .../ckeditor/plugins/showblocks/lang/de.js | 0 .../ckeditor/plugins/showblocks/lang/el.js | 0 .../ckeditor/plugins/showblocks/lang/en-au.js | 0 .../ckeditor/plugins/showblocks/lang/en-ca.js | 0 .../ckeditor/plugins/showblocks/lang/en-gb.js | 0 .../ckeditor/plugins/showblocks/lang/en.js | 0 .../ckeditor/plugins/showblocks/lang/eo.js | 0 .../ckeditor/plugins/showblocks/lang/es-mx.js | 0 .../ckeditor/plugins/showblocks/lang/es.js | 0 .../ckeditor/plugins/showblocks/lang/et.js | 0 .../ckeditor/plugins/showblocks/lang/eu.js | 0 .../ckeditor/plugins/showblocks/lang/fa.js | 0 .../ckeditor/plugins/showblocks/lang/fi.js | 0 .../ckeditor/plugins/showblocks/lang/fo.js | 0 .../ckeditor/plugins/showblocks/lang/fr-ca.js | 0 .../ckeditor/plugins/showblocks/lang/fr.js | 0 .../ckeditor/plugins/showblocks/lang/gl.js | 0 .../ckeditor/plugins/showblocks/lang/gu.js | 0 .../ckeditor/plugins/showblocks/lang/he.js | 0 .../ckeditor/plugins/showblocks/lang/hi.js | 0 .../ckeditor/plugins/showblocks/lang/hr.js | 0 .../ckeditor/plugins/showblocks/lang/hu.js | 0 .../ckeditor/plugins/showblocks/lang/id.js | 0 .../ckeditor/plugins/showblocks/lang/is.js | 0 .../ckeditor/plugins/showblocks/lang/it.js | 0 .../ckeditor/plugins/showblocks/lang/ja.js | 0 .../ckeditor/plugins/showblocks/lang/ka.js | 0 .../ckeditor/plugins/showblocks/lang/km.js | 0 .../ckeditor/plugins/showblocks/lang/ko.js | 0 .../ckeditor/plugins/showblocks/lang/ku.js | 0 .../ckeditor/plugins/showblocks/lang/lt.js | 0 .../ckeditor/plugins/showblocks/lang/lv.js | 0 .../ckeditor/plugins/showblocks/lang/mk.js | 0 .../ckeditor/plugins/showblocks/lang/mn.js | 0 .../ckeditor/plugins/showblocks/lang/ms.js | 0 .../ckeditor/plugins/showblocks/lang/nb.js | 0 .../ckeditor/plugins/showblocks/lang/nl.js | 0 .../ckeditor/plugins/showblocks/lang/no.js | 0 .../ckeditor/plugins/showblocks/lang/oc.js | 0 .../ckeditor/plugins/showblocks/lang/pl.js | 0 .../ckeditor/plugins/showblocks/lang/pt-br.js | 0 .../ckeditor/plugins/showblocks/lang/pt.js | 0 .../ckeditor/plugins/showblocks/lang/ro.js | 0 .../ckeditor/plugins/showblocks/lang/ru.js | 0 .../ckeditor/plugins/showblocks/lang/si.js | 0 .../ckeditor/plugins/showblocks/lang/sk.js | 0 .../ckeditor/plugins/showblocks/lang/sl.js | 0 .../ckeditor/plugins/showblocks/lang/sq.js | 0 .../plugins/showblocks/lang/sr-latn.js | 0 .../ckeditor/plugins/showblocks/lang/sr.js | 0 .../ckeditor/plugins/showblocks/lang/sv.js | 0 .../ckeditor/plugins/showblocks/lang/th.js | 0 .../ckeditor/plugins/showblocks/lang/tr.js | 0 .../ckeditor/plugins/showblocks/lang/tt.js | 0 .../ckeditor/plugins/showblocks/lang/ug.js | 0 .../ckeditor/plugins/showblocks/lang/uk.js | 0 .../ckeditor/plugins/showblocks/lang/vi.js | 0 .../ckeditor/plugins/showblocks/lang/zh-cn.js | 0 .../ckeditor/plugins/showblocks/lang/zh.js | 0 .../ckeditor/plugins/showblocks/plugin.js | 0 .../ckeditor/plugins/smiley/dialogs/smiley.js | 0 .../plugins/smiley/icons/hidpi/smiley.png | Bin .../ckeditor/plugins/smiley/icons/smiley.png | Bin .../plugins/smiley/images/angel_smile.gif | Bin .../plugins/smiley/images/angel_smile.png | Bin .../plugins/smiley/images/angry_smile.gif | Bin .../plugins/smiley/images/angry_smile.png | Bin .../plugins/smiley/images/broken_heart.gif | Bin .../plugins/smiley/images/broken_heart.png | Bin .../plugins/smiley/images/confused_smile.gif | Bin .../plugins/smiley/images/confused_smile.png | Bin .../plugins/smiley/images/cry_smile.gif | Bin .../plugins/smiley/images/cry_smile.png | Bin .../plugins/smiley/images/devil_smile.gif | Bin .../plugins/smiley/images/devil_smile.png | Bin .../smiley/images/embaressed_smile.gif | Bin .../smiley/images/embarrassed_smile.gif | Bin .../smiley/images/embarrassed_smile.png | Bin .../plugins/smiley/images/envelope.gif | Bin .../plugins/smiley/images/envelope.png | Bin .../ckeditor/plugins/smiley/images/heart.gif | Bin .../ckeditor/plugins/smiley/images/heart.png | Bin .../ckeditor/plugins/smiley/images/kiss.gif | Bin .../ckeditor/plugins/smiley/images/kiss.png | Bin .../plugins/smiley/images/lightbulb.gif | Bin .../plugins/smiley/images/lightbulb.png | Bin .../plugins/smiley/images/omg_smile.gif | Bin .../plugins/smiley/images/omg_smile.png | Bin .../plugins/smiley/images/regular_smile.gif | Bin .../plugins/smiley/images/regular_smile.png | Bin .../plugins/smiley/images/sad_smile.gif | Bin .../plugins/smiley/images/sad_smile.png | Bin .../plugins/smiley/images/shades_smile.gif | Bin .../plugins/smiley/images/shades_smile.png | Bin .../plugins/smiley/images/teeth_smile.gif | Bin .../plugins/smiley/images/teeth_smile.png | Bin .../plugins/smiley/images/thumbs_down.gif | Bin .../plugins/smiley/images/thumbs_down.png | Bin .../plugins/smiley/images/thumbs_up.gif | Bin .../plugins/smiley/images/thumbs_up.png | Bin .../plugins/smiley/images/tongue_smile.gif | Bin .../plugins/smiley/images/tongue_smile.png | Bin .../plugins/smiley/images/tounge_smile.gif | Bin .../images/whatchutalkingabout_smile.gif | Bin .../images/whatchutalkingabout_smile.png | Bin .../plugins/smiley/images/wink_smile.gif | Bin .../plugins/smiley/images/wink_smile.png | Bin .../ckeditor/plugins/smiley/lang/af.js | 0 .../ckeditor/plugins/smiley/lang/ar.js | 0 .../ckeditor/plugins/smiley/lang/az.js | 0 .../ckeditor/plugins/smiley/lang/bg.js | 0 .../ckeditor/plugins/smiley/lang/bn.js | 0 .../ckeditor/plugins/smiley/lang/bs.js | 0 .../ckeditor/plugins/smiley/lang/ca.js | 0 .../ckeditor/plugins/smiley/lang/cs.js | 0 .../ckeditor/plugins/smiley/lang/cy.js | 0 .../ckeditor/plugins/smiley/lang/da.js | 0 .../ckeditor/plugins/smiley/lang/de-ch.js | 0 .../ckeditor/plugins/smiley/lang/de.js | 0 .../ckeditor/plugins/smiley/lang/el.js | 0 .../ckeditor/plugins/smiley/lang/en-au.js | 0 .../ckeditor/plugins/smiley/lang/en-ca.js | 0 .../ckeditor/plugins/smiley/lang/en-gb.js | 0 .../ckeditor/plugins/smiley/lang/en.js | 0 .../ckeditor/plugins/smiley/lang/eo.js | 0 .../ckeditor/plugins/smiley/lang/es-mx.js | 0 .../ckeditor/plugins/smiley/lang/es.js | 0 .../ckeditor/plugins/smiley/lang/et.js | 0 .../ckeditor/plugins/smiley/lang/eu.js | 0 .../ckeditor/plugins/smiley/lang/fa.js | 0 .../ckeditor/plugins/smiley/lang/fi.js | 0 .../ckeditor/plugins/smiley/lang/fo.js | 0 .../ckeditor/plugins/smiley/lang/fr-ca.js | 0 .../ckeditor/plugins/smiley/lang/fr.js | 0 .../ckeditor/plugins/smiley/lang/gl.js | 0 .../ckeditor/plugins/smiley/lang/gu.js | 0 .../ckeditor/plugins/smiley/lang/he.js | 0 .../ckeditor/plugins/smiley/lang/hi.js | 0 .../ckeditor/plugins/smiley/lang/hr.js | 0 .../ckeditor/plugins/smiley/lang/hu.js | 0 .../ckeditor/plugins/smiley/lang/id.js | 0 .../ckeditor/plugins/smiley/lang/is.js | 0 .../ckeditor/plugins/smiley/lang/it.js | 0 .../ckeditor/plugins/smiley/lang/ja.js | 0 .../ckeditor/plugins/smiley/lang/ka.js | 0 .../ckeditor/plugins/smiley/lang/km.js | 0 .../ckeditor/plugins/smiley/lang/ko.js | 0 .../ckeditor/plugins/smiley/lang/ku.js | 0 .../ckeditor/plugins/smiley/lang/lt.js | 0 .../ckeditor/plugins/smiley/lang/lv.js | 0 .../ckeditor/plugins/smiley/lang/mk.js | 0 .../ckeditor/plugins/smiley/lang/mn.js | 0 .../ckeditor/plugins/smiley/lang/ms.js | 0 .../ckeditor/plugins/smiley/lang/nb.js | 0 .../ckeditor/plugins/smiley/lang/nl.js | 0 .../ckeditor/plugins/smiley/lang/no.js | 0 .../ckeditor/plugins/smiley/lang/oc.js | 0 .../ckeditor/plugins/smiley/lang/pl.js | 0 .../ckeditor/plugins/smiley/lang/pt-br.js | 0 .../ckeditor/plugins/smiley/lang/pt.js | 0 .../ckeditor/plugins/smiley/lang/ro.js | 0 .../ckeditor/plugins/smiley/lang/ru.js | 0 .../ckeditor/plugins/smiley/lang/si.js | 0 .../ckeditor/plugins/smiley/lang/sk.js | 0 .../ckeditor/plugins/smiley/lang/sl.js | 0 .../ckeditor/plugins/smiley/lang/sq.js | 0 .../ckeditor/plugins/smiley/lang/sr-latn.js | 0 .../ckeditor/plugins/smiley/lang/sr.js | 0 .../ckeditor/plugins/smiley/lang/sv.js | 0 .../ckeditor/plugins/smiley/lang/th.js | 0 .../ckeditor/plugins/smiley/lang/tr.js | 0 .../ckeditor/plugins/smiley/lang/tt.js | 0 .../ckeditor/plugins/smiley/lang/ug.js | 0 .../ckeditor/plugins/smiley/lang/uk.js | 0 .../ckeditor/plugins/smiley/lang/vi.js | 0 .../ckeditor/plugins/smiley/lang/zh-cn.js | 0 .../ckeditor/plugins/smiley/lang/zh.js | 0 .../ckeditor/plugins/smiley/plugin.js | 0 .../sourcedialog/dialogs/sourcedialog.js | 0 .../icons/hidpi/sourcedialog-rtl.png | Bin .../sourcedialog/icons/hidpi/sourcedialog.png | Bin .../sourcedialog/icons/sourcedialog-rtl.png | Bin .../sourcedialog/icons/sourcedialog.png | Bin .../ckeditor/plugins/sourcedialog/lang/af.js | 0 .../ckeditor/plugins/sourcedialog/lang/ar.js | 0 .../ckeditor/plugins/sourcedialog/lang/az.js | 0 .../ckeditor/plugins/sourcedialog/lang/bg.js | 0 .../ckeditor/plugins/sourcedialog/lang/bn.js | 0 .../ckeditor/plugins/sourcedialog/lang/bs.js | 0 .../ckeditor/plugins/sourcedialog/lang/ca.js | 0 .../ckeditor/plugins/sourcedialog/lang/cs.js | 0 .../ckeditor/plugins/sourcedialog/lang/cy.js | 0 .../ckeditor/plugins/sourcedialog/lang/da.js | 0 .../plugins/sourcedialog/lang/de-ch.js | 0 .../ckeditor/plugins/sourcedialog/lang/de.js | 0 .../ckeditor/plugins/sourcedialog/lang/el.js | 0 .../plugins/sourcedialog/lang/en-au.js | 0 .../plugins/sourcedialog/lang/en-ca.js | 0 .../plugins/sourcedialog/lang/en-gb.js | 0 .../ckeditor/plugins/sourcedialog/lang/en.js | 0 .../ckeditor/plugins/sourcedialog/lang/eo.js | 0 .../plugins/sourcedialog/lang/es-mx.js | 0 .../ckeditor/plugins/sourcedialog/lang/es.js | 0 .../ckeditor/plugins/sourcedialog/lang/et.js | 0 .../ckeditor/plugins/sourcedialog/lang/eu.js | 0 .../ckeditor/plugins/sourcedialog/lang/fa.js | 0 .../ckeditor/plugins/sourcedialog/lang/fi.js | 0 .../ckeditor/plugins/sourcedialog/lang/fo.js | 0 .../plugins/sourcedialog/lang/fr-ca.js | 0 .../ckeditor/plugins/sourcedialog/lang/fr.js | 0 .../ckeditor/plugins/sourcedialog/lang/gl.js | 0 .../ckeditor/plugins/sourcedialog/lang/gu.js | 0 .../ckeditor/plugins/sourcedialog/lang/he.js | 0 .../ckeditor/plugins/sourcedialog/lang/hi.js | 0 .../ckeditor/plugins/sourcedialog/lang/hr.js | 0 .../ckeditor/plugins/sourcedialog/lang/hu.js | 0 .../ckeditor/plugins/sourcedialog/lang/id.js | 0 .../ckeditor/plugins/sourcedialog/lang/is.js | 0 .../ckeditor/plugins/sourcedialog/lang/it.js | 0 .../ckeditor/plugins/sourcedialog/lang/ja.js | 0 .../ckeditor/plugins/sourcedialog/lang/ka.js | 0 .../ckeditor/plugins/sourcedialog/lang/km.js | 0 .../ckeditor/plugins/sourcedialog/lang/ko.js | 0 .../ckeditor/plugins/sourcedialog/lang/ku.js | 0 .../ckeditor/plugins/sourcedialog/lang/lt.js | 0 .../ckeditor/plugins/sourcedialog/lang/lv.js | 0 .../ckeditor/plugins/sourcedialog/lang/mn.js | 0 .../ckeditor/plugins/sourcedialog/lang/ms.js | 0 .../ckeditor/plugins/sourcedialog/lang/nb.js | 0 .../ckeditor/plugins/sourcedialog/lang/nl.js | 0 .../ckeditor/plugins/sourcedialog/lang/no.js | 0 .../ckeditor/plugins/sourcedialog/lang/oc.js | 0 .../ckeditor/plugins/sourcedialog/lang/pl.js | 0 .../plugins/sourcedialog/lang/pt-br.js | 0 .../ckeditor/plugins/sourcedialog/lang/pt.js | 0 .../ckeditor/plugins/sourcedialog/lang/ro.js | 0 .../ckeditor/plugins/sourcedialog/lang/ru.js | 0 .../ckeditor/plugins/sourcedialog/lang/si.js | 0 .../ckeditor/plugins/sourcedialog/lang/sk.js | 0 .../ckeditor/plugins/sourcedialog/lang/sl.js | 0 .../ckeditor/plugins/sourcedialog/lang/sq.js | 0 .../plugins/sourcedialog/lang/sr-latn.js | 0 .../ckeditor/plugins/sourcedialog/lang/sr.js | 0 .../ckeditor/plugins/sourcedialog/lang/sv.js | 0 .../ckeditor/plugins/sourcedialog/lang/th.js | 0 .../ckeditor/plugins/sourcedialog/lang/tr.js | 0 .../ckeditor/plugins/sourcedialog/lang/tt.js | 0 .../ckeditor/plugins/sourcedialog/lang/ug.js | 0 .../ckeditor/plugins/sourcedialog/lang/uk.js | 0 .../ckeditor/plugins/sourcedialog/lang/vi.js | 0 .../plugins/sourcedialog/lang/zh-cn.js | 0 .../ckeditor/plugins/sourcedialog/lang/zh.js | 0 .../ckeditor/plugins/sourcedialog/plugin.js | 0 .../dialogs/lang/_translationstatus.txt | 0 .../plugins/specialchar/dialogs/lang/af.js | 0 .../plugins/specialchar/dialogs/lang/ar.js | 0 .../plugins/specialchar/dialogs/lang/az.js | 0 .../plugins/specialchar/dialogs/lang/bg.js | 0 .../plugins/specialchar/dialogs/lang/ca.js | 0 .../plugins/specialchar/dialogs/lang/cs.js | 0 .../plugins/specialchar/dialogs/lang/cy.js | 0 .../plugins/specialchar/dialogs/lang/da.js | 0 .../plugins/specialchar/dialogs/lang/de-ch.js | 0 .../plugins/specialchar/dialogs/lang/de.js | 0 .../plugins/specialchar/dialogs/lang/el.js | 0 .../plugins/specialchar/dialogs/lang/en-au.js | 0 .../plugins/specialchar/dialogs/lang/en-ca.js | 0 .../plugins/specialchar/dialogs/lang/en-gb.js | 0 .../plugins/specialchar/dialogs/lang/en.js | 0 .../plugins/specialchar/dialogs/lang/eo.js | 0 .../plugins/specialchar/dialogs/lang/es-mx.js | 0 .../plugins/specialchar/dialogs/lang/es.js | 0 .../plugins/specialchar/dialogs/lang/et.js | 0 .../plugins/specialchar/dialogs/lang/eu.js | 0 .../plugins/specialchar/dialogs/lang/fa.js | 0 .../plugins/specialchar/dialogs/lang/fi.js | 0 .../plugins/specialchar/dialogs/lang/fr-ca.js | 0 .../plugins/specialchar/dialogs/lang/fr.js | 0 .../plugins/specialchar/dialogs/lang/gl.js | 0 .../plugins/specialchar/dialogs/lang/he.js | 0 .../plugins/specialchar/dialogs/lang/hr.js | 0 .../plugins/specialchar/dialogs/lang/hu.js | 0 .../plugins/specialchar/dialogs/lang/id.js | 0 .../plugins/specialchar/dialogs/lang/it.js | 0 .../plugins/specialchar/dialogs/lang/ja.js | 0 .../plugins/specialchar/dialogs/lang/km.js | 0 .../plugins/specialchar/dialogs/lang/ko.js | 0 .../plugins/specialchar/dialogs/lang/ku.js | 0 .../plugins/specialchar/dialogs/lang/lt.js | 0 .../plugins/specialchar/dialogs/lang/lv.js | 0 .../plugins/specialchar/dialogs/lang/nb.js | 0 .../plugins/specialchar/dialogs/lang/nl.js | 0 .../plugins/specialchar/dialogs/lang/no.js | 0 .../plugins/specialchar/dialogs/lang/oc.js | 0 .../plugins/specialchar/dialogs/lang/pl.js | 0 .../plugins/specialchar/dialogs/lang/pt-br.js | 0 .../plugins/specialchar/dialogs/lang/pt.js | 0 .../plugins/specialchar/dialogs/lang/ru.js | 0 .../plugins/specialchar/dialogs/lang/si.js | 0 .../plugins/specialchar/dialogs/lang/sk.js | 0 .../plugins/specialchar/dialogs/lang/sl.js | 0 .../plugins/specialchar/dialogs/lang/sq.js | 0 .../plugins/specialchar/dialogs/lang/sv.js | 0 .../plugins/specialchar/dialogs/lang/th.js | 0 .../plugins/specialchar/dialogs/lang/tr.js | 0 .../plugins/specialchar/dialogs/lang/tt.js | 0 .../plugins/specialchar/dialogs/lang/ug.js | 0 .../plugins/specialchar/dialogs/lang/uk.js | 0 .../plugins/specialchar/dialogs/lang/vi.js | 0 .../plugins/specialchar/dialogs/lang/zh-cn.js | 0 .../plugins/specialchar/dialogs/lang/zh.js | 0 .../specialchar/dialogs/specialchar.js | 0 .../plugins/stylesheetparser/plugin.js | 0 .../ckeditor/plugins/table/dialogs/table.js | 0 .../ckeditor/plugins/tableresize/plugin.js | 0 .../tableselection/styles/tableselection.css | 0 .../plugins/tabletools/dialogs/tableCell.js | 0 .../plugins/templates/dialogs/templates.css | 0 .../plugins/templates/dialogs/templates.js | 0 .../templates/icons/hidpi/templates-rtl.png | Bin .../templates/icons/hidpi/templates.png | Bin .../plugins/templates/icons/templates-rtl.png | Bin .../plugins/templates/icons/templates.png | Bin .../ckeditor/plugins/templates/lang/af.js | 0 .../ckeditor/plugins/templates/lang/ar.js | 0 .../ckeditor/plugins/templates/lang/az.js | 0 .../ckeditor/plugins/templates/lang/bg.js | 0 .../ckeditor/plugins/templates/lang/bn.js | 0 .../ckeditor/plugins/templates/lang/bs.js | 0 .../ckeditor/plugins/templates/lang/ca.js | 0 .../ckeditor/plugins/templates/lang/cs.js | 0 .../ckeditor/plugins/templates/lang/cy.js | 0 .../ckeditor/plugins/templates/lang/da.js | 0 .../ckeditor/plugins/templates/lang/de-ch.js | 0 .../ckeditor/plugins/templates/lang/de.js | 0 .../ckeditor/plugins/templates/lang/el.js | 0 .../ckeditor/plugins/templates/lang/en-au.js | 0 .../ckeditor/plugins/templates/lang/en-ca.js | 0 .../ckeditor/plugins/templates/lang/en-gb.js | 0 .../ckeditor/plugins/templates/lang/en.js | 0 .../ckeditor/plugins/templates/lang/eo.js | 0 .../ckeditor/plugins/templates/lang/es-mx.js | 0 .../ckeditor/plugins/templates/lang/es.js | 0 .../ckeditor/plugins/templates/lang/et.js | 0 .../ckeditor/plugins/templates/lang/eu.js | 0 .../ckeditor/plugins/templates/lang/fa.js | 0 .../ckeditor/plugins/templates/lang/fi.js | 0 .../ckeditor/plugins/templates/lang/fo.js | 0 .../ckeditor/plugins/templates/lang/fr-ca.js | 0 .../ckeditor/plugins/templates/lang/fr.js | 0 .../ckeditor/plugins/templates/lang/gl.js | 0 .../ckeditor/plugins/templates/lang/gu.js | 0 .../ckeditor/plugins/templates/lang/he.js | 0 .../ckeditor/plugins/templates/lang/hi.js | 0 .../ckeditor/plugins/templates/lang/hr.js | 0 .../ckeditor/plugins/templates/lang/hu.js | 0 .../ckeditor/plugins/templates/lang/id.js | 0 .../ckeditor/plugins/templates/lang/is.js | 0 .../ckeditor/plugins/templates/lang/it.js | 0 .../ckeditor/plugins/templates/lang/ja.js | 0 .../ckeditor/plugins/templates/lang/ka.js | 0 .../ckeditor/plugins/templates/lang/km.js | 0 .../ckeditor/plugins/templates/lang/ko.js | 0 .../ckeditor/plugins/templates/lang/ku.js | 0 .../ckeditor/plugins/templates/lang/lt.js | 0 .../ckeditor/plugins/templates/lang/lv.js | 0 .../ckeditor/plugins/templates/lang/mk.js | 0 .../ckeditor/plugins/templates/lang/mn.js | 0 .../ckeditor/plugins/templates/lang/ms.js | 0 .../ckeditor/plugins/templates/lang/nb.js | 0 .../ckeditor/plugins/templates/lang/nl.js | 0 .../ckeditor/plugins/templates/lang/no.js | 0 .../ckeditor/plugins/templates/lang/oc.js | 0 .../ckeditor/plugins/templates/lang/pl.js | 0 .../ckeditor/plugins/templates/lang/pt-br.js | 0 .../ckeditor/plugins/templates/lang/pt.js | 0 .../ckeditor/plugins/templates/lang/ro.js | 0 .../ckeditor/plugins/templates/lang/ru.js | 0 .../ckeditor/plugins/templates/lang/si.js | 0 .../ckeditor/plugins/templates/lang/sk.js | 0 .../ckeditor/plugins/templates/lang/sl.js | 0 .../ckeditor/plugins/templates/lang/sq.js | 0 .../plugins/templates/lang/sr-latn.js | 0 .../ckeditor/plugins/templates/lang/sr.js | 0 .../ckeditor/plugins/templates/lang/sv.js | 0 .../ckeditor/plugins/templates/lang/th.js | 0 .../ckeditor/plugins/templates/lang/tr.js | 0 .../ckeditor/plugins/templates/lang/tt.js | 0 .../ckeditor/plugins/templates/lang/ug.js | 0 .../ckeditor/plugins/templates/lang/uk.js | 0 .../ckeditor/plugins/templates/lang/vi.js | 0 .../ckeditor/plugins/templates/lang/zh-cn.js | 0 .../ckeditor/plugins/templates/lang/zh.js | 0 .../ckeditor/plugins/templates/plugin.js | 0 .../plugins/templates/templates/default.js | 0 .../templates/templates/images/template1.gif | Bin .../templates/templates/images/template2.gif | Bin .../templates/templates/images/template3.gif | Bin .../plugins/uicolor/dialogs/uicolor.css | 0 .../plugins/uicolor/dialogs/uicolor.js | 0 .../plugins/uicolor/icons/hidpi/uicolor.png | Bin .../plugins/uicolor/icons/uicolor.png | Bin .../uicolor/lang/_translationstatus.txt | 0 .../ckeditor/plugins/uicolor/lang/af.js | 0 .../ckeditor/plugins/uicolor/lang/ar.js | 0 .../ckeditor/plugins/uicolor/lang/az.js | 0 .../ckeditor/plugins/uicolor/lang/bg.js | 0 .../ckeditor/plugins/uicolor/lang/ca.js | 0 .../ckeditor/plugins/uicolor/lang/cs.js | 0 .../ckeditor/plugins/uicolor/lang/cy.js | 0 .../ckeditor/plugins/uicolor/lang/da.js | 0 .../ckeditor/plugins/uicolor/lang/de-ch.js | 0 .../ckeditor/plugins/uicolor/lang/de.js | 0 .../ckeditor/plugins/uicolor/lang/el.js | 0 .../ckeditor/plugins/uicolor/lang/en-gb.js | 0 .../ckeditor/plugins/uicolor/lang/en.js | 0 .../ckeditor/plugins/uicolor/lang/eo.js | 0 .../ckeditor/plugins/uicolor/lang/es-mx.js | 0 .../ckeditor/plugins/uicolor/lang/es.js | 0 .../ckeditor/plugins/uicolor/lang/et.js | 0 .../ckeditor/plugins/uicolor/lang/eu.js | 0 .../ckeditor/plugins/uicolor/lang/fa.js | 0 .../ckeditor/plugins/uicolor/lang/fi.js | 0 .../ckeditor/plugins/uicolor/lang/fr-ca.js | 0 .../ckeditor/plugins/uicolor/lang/fr.js | 0 .../ckeditor/plugins/uicolor/lang/gl.js | 0 .../ckeditor/plugins/uicolor/lang/he.js | 0 .../ckeditor/plugins/uicolor/lang/hr.js | 0 .../ckeditor/plugins/uicolor/lang/hu.js | 0 .../ckeditor/plugins/uicolor/lang/id.js | 0 .../ckeditor/plugins/uicolor/lang/it.js | 0 .../ckeditor/plugins/uicolor/lang/ja.js | 0 .../ckeditor/plugins/uicolor/lang/km.js | 0 .../ckeditor/plugins/uicolor/lang/ko.js | 0 .../ckeditor/plugins/uicolor/lang/ku.js | 0 .../ckeditor/plugins/uicolor/lang/lv.js | 0 .../ckeditor/plugins/uicolor/lang/mk.js | 0 .../ckeditor/plugins/uicolor/lang/nb.js | 0 .../ckeditor/plugins/uicolor/lang/nl.js | 0 .../ckeditor/plugins/uicolor/lang/no.js | 0 .../ckeditor/plugins/uicolor/lang/oc.js | 0 .../ckeditor/plugins/uicolor/lang/pl.js | 0 .../ckeditor/plugins/uicolor/lang/pt-br.js | 0 .../ckeditor/plugins/uicolor/lang/pt.js | 0 .../ckeditor/plugins/uicolor/lang/ru.js | 0 .../ckeditor/plugins/uicolor/lang/si.js | 0 .../ckeditor/plugins/uicolor/lang/sk.js | 0 .../ckeditor/plugins/uicolor/lang/sl.js | 0 .../ckeditor/plugins/uicolor/lang/sq.js | 0 .../ckeditor/plugins/uicolor/lang/sv.js | 0 .../ckeditor/plugins/uicolor/lang/tr.js | 0 .../ckeditor/plugins/uicolor/lang/tt.js | 0 .../ckeditor/plugins/uicolor/lang/ug.js | 0 .../ckeditor/plugins/uicolor/lang/uk.js | 0 .../ckeditor/plugins/uicolor/lang/vi.js | 0 .../ckeditor/plugins/uicolor/lang/zh-cn.js | 0 .../ckeditor/plugins/uicolor/lang/zh.js | 0 .../ckeditor/plugins/uicolor/plugin.js | 0 .../ckeditor/plugins/uploadfile/plugin.js | 0 .../ckeditor/plugins/uploadimage/plugin.js | 0 .../ckeditor/plugins/uploadwidget/lang/az.js | 0 .../ckeditor/plugins/uploadwidget/lang/ca.js | 0 .../ckeditor/plugins/uploadwidget/lang/cs.js | 0 .../ckeditor/plugins/uploadwidget/lang/da.js | 0 .../plugins/uploadwidget/lang/de-ch.js | 0 .../ckeditor/plugins/uploadwidget/lang/de.js | 0 .../ckeditor/plugins/uploadwidget/lang/el.js | 0 .../ckeditor/plugins/uploadwidget/lang/en.js | 0 .../ckeditor/plugins/uploadwidget/lang/eo.js | 0 .../plugins/uploadwidget/lang/es-mx.js | 0 .../ckeditor/plugins/uploadwidget/lang/es.js | 0 .../ckeditor/plugins/uploadwidget/lang/eu.js | 0 .../ckeditor/plugins/uploadwidget/lang/fr.js | 0 .../ckeditor/plugins/uploadwidget/lang/gl.js | 0 .../ckeditor/plugins/uploadwidget/lang/hr.js | 0 .../ckeditor/plugins/uploadwidget/lang/hu.js | 0 .../ckeditor/plugins/uploadwidget/lang/id.js | 0 .../ckeditor/plugins/uploadwidget/lang/it.js | 0 .../ckeditor/plugins/uploadwidget/lang/ja.js | 0 .../ckeditor/plugins/uploadwidget/lang/km.js | 0 .../ckeditor/plugins/uploadwidget/lang/ko.js | 0 .../ckeditor/plugins/uploadwidget/lang/ku.js | 0 .../ckeditor/plugins/uploadwidget/lang/nb.js | 0 .../ckeditor/plugins/uploadwidget/lang/nl.js | 0 .../ckeditor/plugins/uploadwidget/lang/no.js | 0 .../ckeditor/plugins/uploadwidget/lang/oc.js | 0 .../ckeditor/plugins/uploadwidget/lang/pl.js | 0 .../plugins/uploadwidget/lang/pt-br.js | 0 .../ckeditor/plugins/uploadwidget/lang/pt.js | 0 .../ckeditor/plugins/uploadwidget/lang/ru.js | 0 .../ckeditor/plugins/uploadwidget/lang/sk.js | 0 .../ckeditor/plugins/uploadwidget/lang/sv.js | 0 .../ckeditor/plugins/uploadwidget/lang/tr.js | 0 .../ckeditor/plugins/uploadwidget/lang/ug.js | 0 .../ckeditor/plugins/uploadwidget/lang/uk.js | 0 .../plugins/uploadwidget/lang/zh-cn.js | 0 .../ckeditor/plugins/uploadwidget/lang/zh.js | 0 .../ckeditor/plugins/uploadwidget/plugin.js | 0 .../ckeditor/plugins/widget/images/handle.png | Bin .../ckeditor/plugins/widget/lang/af.js | 0 .../ckeditor/plugins/widget/lang/ar.js | 0 .../ckeditor/plugins/widget/lang/az.js | 0 .../ckeditor/plugins/widget/lang/bg.js | 0 .../ckeditor/plugins/widget/lang/ca.js | 0 .../ckeditor/plugins/widget/lang/cs.js | 0 .../ckeditor/plugins/widget/lang/cy.js | 0 .../ckeditor/plugins/widget/lang/da.js | 0 .../ckeditor/plugins/widget/lang/de-ch.js | 0 .../ckeditor/plugins/widget/lang/de.js | 0 .../ckeditor/plugins/widget/lang/el.js | 0 .../ckeditor/plugins/widget/lang/en-gb.js | 0 .../ckeditor/plugins/widget/lang/en.js | 0 .../ckeditor/plugins/widget/lang/eo.js | 0 .../ckeditor/plugins/widget/lang/es-mx.js | 0 .../ckeditor/plugins/widget/lang/es.js | 0 .../ckeditor/plugins/widget/lang/eu.js | 0 .../ckeditor/plugins/widget/lang/fa.js | 0 .../ckeditor/plugins/widget/lang/fi.js | 0 .../ckeditor/plugins/widget/lang/fr.js | 0 .../ckeditor/plugins/widget/lang/gl.js | 0 .../ckeditor/plugins/widget/lang/he.js | 0 .../ckeditor/plugins/widget/lang/hr.js | 0 .../ckeditor/plugins/widget/lang/hu.js | 0 .../ckeditor/plugins/widget/lang/id.js | 0 .../ckeditor/plugins/widget/lang/it.js | 0 .../ckeditor/plugins/widget/lang/ja.js | 0 .../ckeditor/plugins/widget/lang/km.js | 0 .../ckeditor/plugins/widget/lang/ko.js | 0 .../ckeditor/plugins/widget/lang/ku.js | 0 .../ckeditor/plugins/widget/lang/lv.js | 0 .../ckeditor/plugins/widget/lang/nb.js | 0 .../ckeditor/plugins/widget/lang/nl.js | 0 .../ckeditor/plugins/widget/lang/no.js | 0 .../ckeditor/plugins/widget/lang/oc.js | 0 .../ckeditor/plugins/widget/lang/pl.js | 0 .../ckeditor/plugins/widget/lang/pt-br.js | 0 .../ckeditor/plugins/widget/lang/pt.js | 0 .../ckeditor/plugins/widget/lang/ru.js | 0 .../ckeditor/plugins/widget/lang/sk.js | 0 .../ckeditor/plugins/widget/lang/sl.js | 0 .../ckeditor/plugins/widget/lang/sq.js | 0 .../ckeditor/plugins/widget/lang/sv.js | 0 .../ckeditor/plugins/widget/lang/tr.js | 0 .../ckeditor/plugins/widget/lang/tt.js | 0 .../ckeditor/plugins/widget/lang/ug.js | 0 .../ckeditor/plugins/widget/lang/uk.js | 0 .../ckeditor/plugins/widget/lang/vi.js | 0 .../ckeditor/plugins/widget/lang/zh-cn.js | 0 .../ckeditor/plugins/widget/lang/zh.js | 0 .../ckeditor/plugins/widget/plugin.js | 0 .../plugins/widgetselection/plugin.js | 0 .../ckeditor/plugins/wsc/LICENSE.md | 0 .../ckeditor/plugins/wsc/dialogs/ciframe.html | 0 .../plugins/wsc/dialogs/tmpFrameset.html | 0 .../ckeditor/plugins/wsc/dialogs/wsc.css | 0 .../ckeditor/plugins/wsc/dialogs/wsc.js | 0 .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 0 .../plugins/wsc/skins/moono-lisa/wsc.css | 0 .../ckeditor/plugins/xml/plugin.js | 0 .../ckeditor/samples/css/samples.css | 0 .../ckeditor/samples/img/github-top.png | Bin .../ckeditor/samples/img/header-bg.png | Bin .../ckeditor/samples/img/header-separator.png | Bin .../ckeditor/samples/img/logo.png | Bin .../ckeditor/samples/img/navigation-tip.png | Bin .../ckeditor/samples/index.html | 0 .../ckeditor/samples/js/sample.js | 0 .../ckeditor/samples/js/sf.js | 0 .../ckeditor/samples/old/ajax.html | 0 .../ckeditor/samples/old/api.html | 0 .../ckeditor/samples/old/appendto.html | 0 .../samples/old/assets/inlineall/logo.png | Bin .../old/assets/outputxhtml/outputxhtml.css | 0 .../samples/old/assets/posteddata.php | 0 .../ckeditor/samples/old/assets/sample.jpg | Bin .../old/assets/uilanguages/languages.js | 0 .../samples/old/autogrow/autogrow.html | 0 .../ckeditor/samples/old/bbcode/bbcode.html | 0 .../samples/old/codesnippet/codesnippet.html | 0 .../ckeditor/samples/old/datafiltering.html | 0 .../samples/old/devtools/devtools.html | 0 .../samples/old/dialog/assets/my_dialog.js | 0 .../ckeditor/samples/old/dialog/dialog.html | 0 .../ckeditor/samples/old/divarea/divarea.html | 0 .../ckeditor/samples/old/divreplace.html | 0 .../samples/old/docprops/docprops.html | 0 .../samples/old/enterkey/enterkey.html | 0 .../assets/outputforflash/outputforflash.fla | Bin .../assets/outputforflash/outputforflash.swf | Bin .../assets/outputforflash/swfobject.js | 0 .../old/htmlwriter/outputforflash.html | 0 .../samples/old/htmlwriter/outputhtml.html | 0 .../samples/old/image2/assets/image1.jpg | Bin .../samples/old/image2/assets/image2.jpg | Bin .../ckeditor/samples/old/image2/image2.html | 0 .../ckeditor/samples/old/index.html | 0 .../ckeditor/samples/old/inlineall.html | 0 .../ckeditor/samples/old/inlinebycode.html | 0 .../ckeditor/samples/old/inlinetextarea.html | 0 .../ckeditor/samples/old/jquery.html | 0 .../samples/old/magicline/magicline.html | 0 .../ckeditor/samples/old/mathjax/mathjax.html | 0 .../samples/old/placeholder/placeholder.html | 0 .../ckeditor/samples/old/readonly.html | 0 .../ckeditor/samples/old/replacebyclass.html | 0 .../ckeditor/samples/old/replacebycode.html | 0 .../ckeditor/samples/old/sample.css | 0 .../ckeditor/samples/old/sample.js | 0 .../samples/old/sample_posteddata.php | 0 .../samples/old/sharedspace/sharedspace.html | 0 .../old/sourcedialog/sourcedialog.html | 0 .../old/stylesheetparser/assets/sample.css | 0 .../stylesheetparser/stylesheetparser.html | 0 .../ckeditor/samples/old/tabindex.html | 0 .../samples/old/tableresize/tableresize.html | 0 .../ckeditor/samples/old/toolbar/toolbar.html | 0 .../ckeditor/samples/old/uicolor.html | 0 .../ckeditor/samples/old/uicolor/uicolor.html | 0 .../ckeditor/samples/old/uilanguages.html | 0 .../samples/old/wysiwygarea/fullpage.html | 0 .../ckeditor/samples/old/xhtmlstyle.html | 0 .../toolbarconfigurator/css/fontello.css | 0 .../toolbarconfigurator/font/LICENSE.txt | 0 .../toolbarconfigurator/font/config.json | 0 .../toolbarconfigurator/font/fontello.eot | Bin .../toolbarconfigurator/font/fontello.svg | 0 .../toolbarconfigurator/font/fontello.ttf | Bin .../toolbarconfigurator/font/fontello.woff | Bin .../samples/toolbarconfigurator/index.html | 0 .../js/abstracttoolbarmodifier.js | 0 .../js/fulltoolbareditor.js | 0 .../toolbarconfigurator/js/toolbarmodifier.js | 0 .../js/toolbartextmodifier.js | 0 .../lib/codemirror/LICENSE | 0 .../lib/codemirror/codemirror.css | 0 .../lib/codemirror/codemirror.js | 0 .../lib/codemirror/javascript.js | 0 .../lib/codemirror/neo.css | 0 .../lib/codemirror/show-hint.css | 0 .../lib/codemirror/show-hint.js | 0 .../ckeditor/skins/kama/dialog.css | 0 .../ckeditor/skins/kama/dialog_ie.css | 0 .../ckeditor/skins/kama/dialog_ie7.css | 0 .../ckeditor/skins/kama/dialog_ie8.css | 0 .../ckeditor/skins/kama/dialog_iequirks.css | 0 .../ckeditor/skins/kama/editor.css | 0 .../ckeditor/skins/kama/editor_ie.css | 0 .../ckeditor/skins/kama/editor_ie7.css | 0 .../ckeditor/skins/kama/editor_ie8.css | 0 .../ckeditor/skins/kama/editor_iequirks.css | 0 .../ckeditor/skins/kama/icons.png | Bin .../ckeditor/skins/kama/icons_hidpi.png | Bin .../skins/kama/images/dialog_sides.gif | Bin .../skins/kama/images/dialog_sides.png | Bin .../skins/kama/images/dialog_sides_rtl.png | Bin .../ckeditor/skins/kama/images/mini.gif | Bin .../ckeditor/skins/kama/images/spinner.gif | Bin .../ckeditor/skins/kama/images/sprites.png | Bin .../skins/kama/images/sprites_ie6.png | Bin .../skins/kama/images/toolbar_start.gif | Bin .../ckeditor/skins/kama/readme.md | 0 .../ckeditor/skins/kama/skin.js | 0 .../ckeditor/skins/moono-lisa/dialog.css | 0 .../ckeditor/skins/moono-lisa/dialog_ie.css | 0 .../ckeditor/skins/moono-lisa/dialog_ie8.css | 0 .../skins/moono-lisa/dialog_iequirks.css | 0 .../ckeditor/skins/moono-lisa/editor.css | 0 .../skins/moono-lisa/editor_gecko.css | 0 .../ckeditor/skins/moono-lisa/editor_ie.css | 0 .../ckeditor/skins/moono-lisa/editor_ie8.css | 0 .../skins/moono-lisa/editor_iequirks.css | 0 .../ckeditor/skins/moono-lisa/icons.png | Bin .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin .../skins/moono-lisa/images/arrow.png | Bin .../skins/moono-lisa/images/close.png | Bin .../skins/moono-lisa/images/hidpi/close.png | Bin .../moono-lisa/images/hidpi/lock-open.png | Bin .../skins/moono-lisa/images/hidpi/lock.png | Bin .../skins/moono-lisa/images/hidpi/refresh.png | Bin .../skins/moono-lisa/images/lock-open.png | Bin .../ckeditor/skins/moono-lisa/images/lock.png | Bin .../skins/moono-lisa/images/refresh.png | Bin .../skins/moono-lisa/images/spinner.gif | Bin .../ckeditor/skins/moono-lisa/readme.md | 0 .../ckeditor/skins/moono/dialog.css | 0 .../ckeditor/skins/moono/dialog_ie.css | 0 .../ckeditor/skins/moono/dialog_ie7.css | 0 .../ckeditor/skins/moono/dialog_ie8.css | 0 .../ckeditor/skins/moono/dialog_iequirks.css | 0 .../ckeditor/skins/moono/editor.css | 0 .../ckeditor/skins/moono/editor_gecko.css | 0 .../ckeditor/skins/moono/editor_ie.css | 0 .../ckeditor/skins/moono/editor_ie7.css | 0 .../ckeditor/skins/moono/editor_ie8.css | 0 .../ckeditor/skins/moono/editor_iequirks.css | 0 .../ckeditor/skins/moono/icons.png | Bin .../ckeditor/skins/moono/icons_hidpi.png | Bin .../ckeditor/skins/moono/images/anchor.png | Bin .../ckeditor/skins/moono/images/arrow.png | Bin .../ckeditor/skins/moono/images/close.png | Bin .../skins/moono/images/hidpi/anchor.png | Bin .../skins/moono/images/hidpi/close.png | Bin .../skins/moono/images/hidpi/lock-open.png | Bin .../skins/moono/images/hidpi/lock.png | Bin .../skins/moono/images/hidpi/refresh.png | Bin .../ckeditor/skins/moono/images/lock-open.png | Bin .../ckeditor/skins/moono/images/lock.png | Bin .../ckeditor/skins/moono/images/refresh.png | Bin .../ckeditor/skins/moono/images/spinner.gif | Bin .../ckeditor/skins/moono/readme.md | 0 .../ckeditor/skins/moono/skin.js | 0 .../bower_components/ckeditor/styles.js | 0 .../datatables.net-bs/.bower.json | 0 .../datatables.net-bs/License.txt | 0 .../datatables.net-bs/Readme.md | 0 .../datatables.net-bs/bower.json | 0 .../css/dataTables.bootstrap.css | 0 .../css/dataTables.bootstrap.min.css | 0 .../js/dataTables.bootstrap.js | 0 .../js/dataTables.bootstrap.min.js | 0 .../datatables.net/.bower.json | 0 .../datatables.net/License.txt | 0 .../bower_components/datatables.net/Readme.md | 0 .../datatables.net/bower.json | 0 .../datatables.net/js/jquery.dataTables.js | 0 .../js/jquery.dataTables.min.js | 0 .../bower_components/eve-raphael/.bower.json | 0 .../bower_components/eve-raphael/LICENSE | 0 .../bower_components/eve-raphael/README.md | 0 .../bower_components/eve-raphael/bower.json | 0 .../eve-raphael/component.json | 0 .../bower_components/eve-raphael/e.html | 0 .../bower_components/eve-raphael/eve.js | 0 .../bower_components/eve-raphael/package.json | 0 .../bower_components/fastclick/.bower.json | 0 .../bower_components/fastclick/LICENSE | 0 .../bower_components/fastclick/README.md | 0 .../bower_components/fastclick/bower.json | 0 .../fastclick/lib/fastclick.js | 0 .../bower_components/font-awesome/.bower.json | 0 .../bower_components/font-awesome/.gitignore | 0 .../bower_components/font-awesome/.npmignore | 0 .../font-awesome/HELP-US-OUT.txt | 0 .../bower_components/font-awesome/bower.json | 0 .../font-awesome/css/font-awesome.css | 0 .../font-awesome/css/font-awesome.css.map | 0 .../font-awesome/css/font-awesome.min.css | 0 .../font-awesome/fonts/FontAwesome.otf | Bin .../fonts/fontawesome-webfont.eot | Bin .../fonts/fontawesome-webfont.svg | 0 .../fonts/fontawesome-webfont.ttf | Bin .../fonts/fontawesome-webfont.woff | Bin .../fonts/fontawesome-webfont.woff2 | Bin .../font-awesome/less/animated.less | 0 .../font-awesome/less/bordered-pulled.less | 0 .../font-awesome/less/core.less | 0 .../font-awesome/less/fixed-width.less | 0 .../font-awesome/less/font-awesome.less | 0 .../font-awesome/less/icons.less | 0 .../font-awesome/less/larger.less | 0 .../font-awesome/less/list.less | 0 .../font-awesome/less/mixins.less | 0 .../font-awesome/less/path.less | 0 .../font-awesome/less/rotated-flipped.less | 0 .../font-awesome/less/screen-reader.less | 0 .../font-awesome/less/stacked.less | 0 .../font-awesome/less/variables.less | 0 .../font-awesome/scss/_animated.scss | 0 .../font-awesome/scss/_bordered-pulled.scss | 0 .../font-awesome/scss/_core.scss | 0 .../font-awesome/scss/_fixed-width.scss | 0 .../font-awesome/scss/_icons.scss | 0 .../font-awesome/scss/_larger.scss | 0 .../font-awesome/scss/_list.scss | 0 .../font-awesome/scss/_mixins.scss | 0 .../font-awesome/scss/_path.scss | 0 .../font-awesome/scss/_rotated-flipped.scss | 0 .../font-awesome/scss/_screen-reader.scss | 0 .../font-awesome/scss/_stacked.scss | 0 .../font-awesome/scss/_variables.scss | 0 .../font-awesome/scss/font-awesome.scss | 0 .../bower_components/fullcalendar/.bower.json | 0 .../fullcalendar/CHANGELOG.md | 0 .../fullcalendar/CONTRIBUTING.md | 0 .../bower_components/fullcalendar/LICENSE.txt | 0 .../bower_components/fullcalendar/README.md | 0 .../bower_components/fullcalendar/bower.json | 0 .../fullcalendar/dist/fullcalendar.css | 0 .../fullcalendar/dist/fullcalendar.js | 0 .../fullcalendar/dist/fullcalendar.min.css | 0 .../fullcalendar/dist/fullcalendar.min.js | 0 .../fullcalendar/dist/fullcalendar.print.css | 0 .../dist/fullcalendar.print.min.css | 0 .../fullcalendar/dist/gcal.js | 0 .../fullcalendar/dist/gcal.min.js | 0 .../fullcalendar/dist/locale-all.js | 0 .../fullcalendar/dist/locale/af.js | 0 .../fullcalendar/dist/locale/ar-dz.js | 0 .../fullcalendar/dist/locale/ar-kw.js | 0 .../fullcalendar/dist/locale/ar-ly.js | 0 .../fullcalendar/dist/locale/ar-ma.js | 0 .../fullcalendar/dist/locale/ar-sa.js | 0 .../fullcalendar/dist/locale/ar-tn.js | 0 .../fullcalendar/dist/locale/ar.js | 0 .../fullcalendar/dist/locale/bg.js | 0 .../fullcalendar/dist/locale/ca.js | 0 .../fullcalendar/dist/locale/cs.js | 0 .../fullcalendar/dist/locale/da.js | 0 .../fullcalendar/dist/locale/de-at.js | 0 .../fullcalendar/dist/locale/de-ch.js | 0 .../fullcalendar/dist/locale/de.js | 0 .../fullcalendar/dist/locale/el.js | 0 .../fullcalendar/dist/locale/en-au.js | 0 .../fullcalendar/dist/locale/en-ca.js | 0 .../fullcalendar/dist/locale/en-gb.js | 0 .../fullcalendar/dist/locale/en-ie.js | 0 .../fullcalendar/dist/locale/en-nz.js | 0 .../fullcalendar/dist/locale/es-do.js | 0 .../fullcalendar/dist/locale/es.js | 0 .../fullcalendar/dist/locale/et.js | 0 .../fullcalendar/dist/locale/eu.js | 0 .../fullcalendar/dist/locale/fa.js | 0 .../fullcalendar/dist/locale/fi.js | 0 .../fullcalendar/dist/locale/fr-ca.js | 0 .../fullcalendar/dist/locale/fr-ch.js | 0 .../fullcalendar/dist/locale/fr.js | 0 .../fullcalendar/dist/locale/gl.js | 0 .../fullcalendar/dist/locale/he.js | 0 .../fullcalendar/dist/locale/hi.js | 0 .../fullcalendar/dist/locale/hr.js | 0 .../fullcalendar/dist/locale/hu.js | 0 .../fullcalendar/dist/locale/id.js | 0 .../fullcalendar/dist/locale/is.js | 0 .../fullcalendar/dist/locale/it.js | 0 .../fullcalendar/dist/locale/ja.js | 0 .../fullcalendar/dist/locale/kk.js | 0 .../fullcalendar/dist/locale/ko.js | 0 .../fullcalendar/dist/locale/lb.js | 0 .../fullcalendar/dist/locale/lt.js | 0 .../fullcalendar/dist/locale/lv.js | 0 .../fullcalendar/dist/locale/mk.js | 0 .../fullcalendar/dist/locale/ms-my.js | 0 .../fullcalendar/dist/locale/ms.js | 0 .../fullcalendar/dist/locale/nb.js | 0 .../fullcalendar/dist/locale/nl-be.js | 0 .../fullcalendar/dist/locale/nl.js | 0 .../fullcalendar/dist/locale/nn.js | 0 .../fullcalendar/dist/locale/pl.js | 0 .../fullcalendar/dist/locale/pt-br.js | 0 .../fullcalendar/dist/locale/pt.js | 0 .../fullcalendar/dist/locale/ro.js | 0 .../fullcalendar/dist/locale/ru.js | 0 .../fullcalendar/dist/locale/sk.js | 0 .../fullcalendar/dist/locale/sl.js | 0 .../fullcalendar/dist/locale/sr-cyrl.js | 0 .../fullcalendar/dist/locale/sr.js | 0 .../fullcalendar/dist/locale/sv.js | 0 .../fullcalendar/dist/locale/th.js | 0 .../fullcalendar/dist/locale/tr.js | 0 .../fullcalendar/dist/locale/uk.js | 0 .../fullcalendar/dist/locale/vi.js | 0 .../fullcalendar/dist/locale/zh-cn.js | 0 .../fullcalendar/dist/locale/zh-tw.js | 0 .../bower_components/inputmask/.bower.json | 0 .../bower_components/inputmask/bower.json | 0 .../inputmask/bindings/inputmask.binding.js | 0 .../inputmask.dependencyLib.jqlite.js | 0 .../inputmask.dependencyLib.jquery.js | 0 .../dependencyLibs/inputmask.dependencyLib.js | 0 .../dist/inputmask/global/document.js | 0 .../inputmask/dist/inputmask/global/window.js | 0 .../inputmask/inputmask.date.extensions.js | 0 .../dist/inputmask/inputmask.extensions.js | 0 .../inputmask/dist/inputmask/inputmask.js | 0 .../inputmask/inputmask.numeric.extensions.js | 0 .../inputmask/inputmask.phone.extensions.js | 0 .../inputmask/inputmask.regex.extensions.js | 0 .../dist/inputmask/jquery.inputmask.js | 0 .../dist/inputmask/phone-codes/phone-be.js | 0 .../dist/inputmask/phone-codes/phone-nl.js | 0 .../dist/inputmask/phone-codes/phone-ru.js | 0 .../dist/inputmask/phone-codes/phone-uk.js | 0 .../dist/inputmask/phone-codes/phone.js | 0 .../inputmask/dist/jquery.inputmask.bundle.js | 0 .../inputmask.date.extensions.min.js | 0 .../min/inputmask/inputmask.extensions.min.js | 0 .../dist/min/inputmask/inputmask.min.js | 0 .../inputmask.numeric.extensions.min.js | 0 .../inputmask.phone.extensions.min.js | 0 .../inputmask.regex.extensions.min.js | 0 .../min/inputmask/jquery.inputmask.min.js | 0 .../dist/min/jquery.inputmask.bundle.min.js | 0 .../ion.rangeSlider/.bower.json | 0 .../ion.rangeSlider/.gitignore | 0 .../ion.rangeSlider/.npmignore | 0 .../ion.rangeSlider/License.md | 0 .../_tmp/logo-ion-range-slider.png | Bin .../ion.rangeSlider/bower.json | 0 .../ion.rangeSlider/css/ion.rangeSlider.css | 0 .../css/ion.rangeSlider.skinFlat.css | 0 .../css/ion.rangeSlider.skinHTML5.css | 0 .../css/ion.rangeSlider.skinModern.css | 0 .../css/ion.rangeSlider.skinNice.css | 0 .../css/ion.rangeSlider.skinSimple.css | 0 .../ion.rangeSlider/css/normalize.css | 0 .../ion.rangeSlider/history.md | 0 .../ion.rangeSlider/img/sprite-skin-flat.png | Bin .../img/sprite-skin-modern.png | Bin .../ion.rangeSlider/img/sprite-skin-nice.png | Bin .../img/sprite-skin-simple.png | Bin .../bower_components/ion.rangeSlider/index.md | 0 .../ion.rangeSlider/js/ion.rangeSlider.js | 0 .../ion.rangeSlider/js/ion.rangeSlider.min.js | 0 .../ion.rangeSlider/package.json | 0 .../ion.rangeSlider/readme.md | 0 .../ion.rangeSlider/readme.ru.md | 0 .../bower_components/jquery-knob/.bower.json | 0 .../bower_components/jquery-knob/.gitignore | 0 .../bower_components/jquery-knob/LICENSE | 0 .../bower_components/jquery-knob/README.md | 0 .../bower_components/jquery-knob/bower.json | 0 .../jquery-knob/dist/jquery.knob.min.js | 0 .../bower_components/jquery-knob/excanvas.js | 0 .../bower_components/jquery-knob/index.html | 0 .../jquery-knob/js/jquery.knob.js | 0 .../jquery-knob/knob.jquery.json | 0 .../bower_components/jquery-knob/package.json | 0 .../jquery-knob/secretplan.jpg | Bin .../jquery-slimscroll/.bower.json | 0 .../jquery-slimscroll/README.md | 0 .../jquery-slimscroll/bower.json | 0 .../examples/allow-page-scroll.html | 0 .../jquery-slimscroll/examples/chaining.html | 0 .../examples/disable-fade-out.html | 0 .../examples/dynamic-content.html | 0 .../examples/height-width.html | 0 .../jquery-slimscroll/examples/index.html | 0 .../examples/libs/prettify/prettify.css | 0 .../examples/libs/prettify/prettify.js | 0 .../examples/mouse-wheel.html | 0 .../examples/multiple-elements.html | 0 .../examples/navigation.html | 0 .../jquery-slimscroll/examples/nested.html | 0 .../examples/programmatic-scrolling.html | 0 .../jquery-slimscroll/examples/rail.html | 0 .../examples/scroll-events.html | 0 .../jquery-slimscroll/examples/scrollbar.html | 0 .../examples/start-position.html | 0 .../jquery-slimscroll/examples/style.css | 0 .../jquery-slimscroll/jquery.slimscroll.js | 0 .../jquery.slimscroll.min.js | 0 .../jquery-slimscroll/package.json | 0 .../jquery-sparkline/.bower.json | 0 .../jquery-sparkline/Changelog.txt | 0 .../jquery-sparkline/Makefile | 0 .../jquery-sparkline/README.md | 0 .../jquery-sparkline/bower.json | 0 .../jquery-sparkline/dist/jquery.sparkline.js | 0 .../dist/jquery.sparkline.min.js | 0 .../jquery-sparkline/minheader.txt | 0 .../jquery-sparkline/sparkline.jquery.json | 0 .../jquery-sparkline/src/base.js | 0 .../jquery-sparkline/src/chart-bar.js | 0 .../jquery-sparkline/src/chart-box.js | 0 .../jquery-sparkline/src/chart-bullet.js | 0 .../jquery-sparkline/src/chart-discrete.js | 0 .../jquery-sparkline/src/chart-line.js | 0 .../jquery-sparkline/src/chart-pie.js | 0 .../jquery-sparkline/src/chart-tristate.js | 0 .../jquery-sparkline/src/defaults.js | 0 .../jquery-sparkline/src/footer.js | 0 .../jquery-sparkline/src/header.js | 0 .../jquery-sparkline/src/interact.js | 0 .../jquery-sparkline/src/rangemap.js | 0 .../jquery-sparkline/src/simpledraw.js | 0 .../jquery-sparkline/src/utils.js | 0 .../jquery-sparkline/src/vcanvas-base.js | 0 .../jquery-sparkline/src/vcanvas-canvas.js | 0 .../jquery-sparkline/src/vcanvas-vml.js | 0 .../jquery-sparkline/version.txt | 0 .../bower_components/jquery-ui/.bower.json | 0 .../bower_components/jquery-ui/.gitignore | 0 .../bower_components/jquery-ui/AUTHORS.txt | 0 .../bower_components/jquery-ui/LICENSE.txt | 0 .../bower_components/jquery-ui/README.md | 0 .../bower_components/jquery-ui/bower.json | 0 .../bower_components/jquery-ui/component.json | 0 .../bower_components/jquery-ui/composer.json | 0 .../bower_components/jquery-ui/jquery-ui.js | 0 .../jquery-ui/jquery-ui.min.js | 0 .../bower_components/jquery-ui/package.json | 0 .../jquery-ui/themes/base/accordion.css | 0 .../jquery-ui/themes/base/all.css | 0 .../jquery-ui/themes/base/autocomplete.css | 0 .../jquery-ui/themes/base/base.css | 0 .../jquery-ui/themes/base/button.css | 0 .../jquery-ui/themes/base/core.css | 0 .../jquery-ui/themes/base/datepicker.css | 0 .../jquery-ui/themes/base/dialog.css | 0 .../jquery-ui/themes/base/draggable.css | 0 .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../images/ui-bg_glass_75_dadada_1x400.png | Bin .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin .../base/images/ui-icons_222222_256x240.png | Bin .../base/images/ui-icons_2e83ff_256x240.png | Bin .../base/images/ui-icons_444444_256x240.png | Bin .../base/images/ui-icons_454545_256x240.png | Bin .../base/images/ui-icons_555555_256x240.png | Bin .../base/images/ui-icons_777620_256x240.png | Bin .../base/images/ui-icons_777777_256x240.png | Bin .../base/images/ui-icons_888888_256x240.png | Bin .../base/images/ui-icons_cc0000_256x240.png | Bin .../base/images/ui-icons_cd0a0a_256x240.png | Bin .../base/images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/base/jquery-ui.css | 0 .../jquery-ui/themes/base/jquery-ui.min.css | 0 .../jquery-ui/themes/base/menu.css | 0 .../jquery-ui/themes/base/progressbar.css | 0 .../jquery-ui/themes/base/resizable.css | 0 .../jquery-ui/themes/base/selectable.css | 0 .../jquery-ui/themes/base/selectmenu.css | 0 .../jquery-ui/themes/base/slider.css | 0 .../jquery-ui/themes/base/sortable.css | 0 .../jquery-ui/themes/base/spinner.css | 0 .../jquery-ui/themes/base/tabs.css | 0 .../jquery-ui/themes/base/theme.css | 0 .../jquery-ui/themes/base/tooltip.css | 0 .../black-tie/images/animated-overlay.gif | Bin .../ui-bg_diagonals-thick_8_333333_40x40.png | Bin .../images/ui-bg_flat_65_ffffff_40x100.png | Bin .../images/ui-bg_glass_40_111111_1x400.png | Bin .../images/ui-bg_glass_55_1c1c1c_1x400.png | Bin .../ui-bg_highlight-hard_100_f9f9f9_1x100.png | Bin .../ui-bg_highlight-hard_40_aaaaaa_1x100.png | Bin .../ui-bg_highlight-soft_50_aaaaaa_1x100.png | Bin .../ui-bg_inset-hard_45_cd0a0a_1x100.png | Bin .../ui-bg_inset-hard_55_ffeb80_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_4ca300_256x240.png | Bin .../images/ui-icons_bbbbbb_256x240.png | Bin .../images/ui-icons_ededed_256x240.png | Bin .../images/ui-icons_ffcf29_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/black-tie/jquery-ui.css | 0 .../themes/black-tie/jquery-ui.min.css | 0 .../jquery-ui/themes/black-tie/theme.css | 0 .../blitzer/images/animated-overlay.gif | Bin .../ui-bg_diagonals-thick_75_f3d8d8_40x40.png | Bin .../images/ui-bg_dots-small_65_a6a6a6_2x2.png | Bin .../images/ui-bg_flat_0_333333_40x100.png | Bin .../images/ui-bg_flat_65_ffffff_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf8ee_1x400.png | Bin .../ui-bg_highlight-hard_100_eeeeee_1x100.png | Bin .../ui-bg_highlight-hard_100_f6f6f6_1x100.png | Bin .../ui-bg_highlight-soft_15_cc0000_1x100.png | Bin .../images/ui-icons_004276_256x240.png | Bin .../images/ui-icons_cc0000_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/blitzer/jquery-ui.css | 0 .../themes/blitzer/jquery-ui.min.css | 0 .../jquery-ui/themes/blitzer/theme.css | 0 .../cupertino/images/animated-overlay.gif | Bin .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin .../images/ui-bg_flat_15_cd0a0a_40x100.png | Bin .../images/ui-bg_glass_100_e4f1fb_1x400.png | Bin .../images/ui-bg_glass_50_3baae3_1x400.png | Bin .../images/ui-bg_glass_80_d7ebf9_1x400.png | Bin .../ui-bg_highlight-hard_100_f2f5f7_1x100.png | Bin .../ui-bg_highlight-hard_70_000000_1x100.png | Bin .../ui-bg_highlight-soft_100_deedf7_1x100.png | Bin .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin .../images/ui-icons_2694e8_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_3d80b3_256x240.png | Bin .../images/ui-icons_72a7cf_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/cupertino/jquery-ui.css | 0 .../themes/cupertino/jquery-ui.min.css | 0 .../jquery-ui/themes/cupertino/theme.css | 0 .../dark-hive/images/animated-overlay.gif | Bin .../images/ui-bg_flat_30_cccccc_40x100.png | Bin .../images/ui-bg_flat_50_5c5c5c_40x100.png | Bin .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin .../ui-bg_highlight-hard_20_0972a5_1x100.png | Bin .../ui-bg_highlight-soft_33_003147_1x100.png | Bin .../ui-bg_highlight-soft_35_222222_1x100.png | Bin .../ui-bg_highlight-soft_44_444444_1x100.png | Bin .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin .../images/ui-bg_loop_25_000000_21x21.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_4b8e0b_256x240.png | Bin .../images/ui-icons_a83300_256x240.png | Bin .../images/ui-icons_cccccc_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/dark-hive/jquery-ui.css | 0 .../themes/dark-hive/jquery-ui.min.css | 0 .../jquery-ui/themes/dark-hive/theme.css | 0 .../dot-luv/images/animated-overlay.gif | Bin .../ui-bg_diagonals-thick_15_0b3e6f_40x40.png | Bin .../ui-bg_dots-medium_30_0b58a2_4x4.png | Bin .../images/ui-bg_dots-small_20_333333_2x2.png | Bin .../images/ui-bg_dots-small_30_a32d00_2x2.png | Bin .../images/ui-bg_dots-small_40_00498f_2x2.png | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_40_292929_40x100.png | Bin .../ui-bg_gloss-wave_20_111111_500x100.png | Bin .../images/ui-icons_00498f_256x240.png | Bin .../images/ui-icons_98d2fb_256x240.png | Bin .../images/ui-icons_9ccdfc_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/dot-luv/jquery-ui.css | 0 .../themes/dot-luv/jquery-ui.min.css | 0 .../jquery-ui/themes/dot-luv/theme.css | 0 .../eggplant/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin .../images/ui-bg_flat_55_994d53_40x100.png | Bin .../images/ui-bg_flat_55_fafafa_40x100.png | Bin .../ui-bg_gloss-wave_30_3d3644_500x100.png | Bin .../ui-bg_highlight-soft_100_dcd9de_1x100.png | Bin .../ui-bg_highlight-soft_100_eae6ea_1x100.png | Bin .../ui-bg_highlight-soft_25_30273a_1x100.png | Bin .../ui-bg_highlight-soft_45_5f5964_1x100.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_734d99_256x240.png | Bin .../images/ui-icons_8d78a5_256x240.png | Bin .../images/ui-icons_a8a3ae_256x240.png | Bin .../images/ui-icons_ebccce_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/eggplant/jquery-ui.css | 0 .../themes/eggplant/jquery-ui.min.css | 0 .../jquery-ui/themes/eggplant/theme.css | 0 .../excite-bike/images/animated-overlay.gif | Bin .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin .../images/ui-bg_flat_0_e69700_40x100.png | Bin .../images/ui-bg_flat_0_e6b900_40x100.png | Bin .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin .../ui-bg_inset-hard_100_eeeeee_1x100.png | Bin .../images/ui-icons_0a82eb_256x240.png | Bin .../images/ui-icons_0b54d5_256x240.png | Bin .../images/ui-icons_5fa5e3_256x240.png | Bin .../images/ui-icons_fcdd4a_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../themes/excite-bike/jquery-ui.css | 0 .../themes/excite-bike/jquery-ui.min.css | 0 .../jquery-ui/themes/excite-bike/theme.css | 0 .../themes/flick/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin .../images/ui-bg_flat_55_ffffff_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../ui-bg_highlight-soft_100_f6f6f6_1x100.png | Bin .../ui-bg_highlight-soft_25_0073ea_1x100.png | Bin .../ui-bg_highlight-soft_50_dddddd_1x100.png | Bin .../flick/images/ui-icons_0073ea_256x240.png | Bin .../flick/images/ui-icons_454545_256x240.png | Bin .../flick/images/ui-icons_666666_256x240.png | Bin .../flick/images/ui-icons_ff0084_256x240.png | Bin .../flick/images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/flick/jquery-ui.css | 0 .../jquery-ui/themes/flick/jquery-ui.min.css | 0 .../jquery-ui/themes/flick/theme.css | 0 .../hot-sneaks/images/animated-overlay.gif | Bin .../ui-bg_diagonals-small_40_db4865_40x40.png | Bin .../ui-bg_diagonals-small_50_93c3cd_40x40.png | Bin .../ui-bg_diagonals-small_50_ff3853_40x40.png | Bin .../ui-bg_diagonals-small_75_ccd232_40x40.png | Bin .../ui-bg_dots-medium_80_ffff38_4x4.png | Bin .../images/ui-bg_dots-small_35_35414f_2x2.png | Bin .../images/ui-bg_flat_75_ba9217_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../ui-bg_white-lines_85_f7f7ba_40x100.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_88a206_256x240.png | Bin .../images/ui-icons_c02669_256x240.png | Bin .../images/ui-icons_e1e463_256x240.png | Bin .../images/ui-icons_ffeb33_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/hot-sneaks/jquery-ui.css | 0 .../themes/hot-sneaks/jquery-ui.min.css | 0 .../jquery-ui/themes/hot-sneaks/theme.css | 0 .../humanity/images/animated-overlay.gif | Bin .../images/ui-bg_flat_75_aaaaaa_40x100.png | Bin .../images/ui-bg_glass_100_f5f0e5_1x400.png | Bin .../images/ui-bg_glass_25_cb842e_1x400.png | Bin .../images/ui-bg_glass_70_ede4d4_1x400.png | Bin .../ui-bg_highlight-hard_100_f4f0ec_1x100.png | Bin .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin .../ui-bg_highlight-hard_75_f5f5b5_1x100.png | Bin .../ui-bg_inset-soft_100_f4f0ec_1x100.png | Bin .../images/ui-icons_c47a23_256x240.png | Bin .../images/ui-icons_cb672b_256x240.png | Bin .../images/ui-icons_f08000_256x240.png | Bin .../images/ui-icons_f35f07_256x240.png | Bin .../images/ui-icons_ff7519_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/humanity/jquery-ui.css | 0 .../themes/humanity/jquery-ui.min.css | 0 .../jquery-ui/themes/humanity/theme.css | 0 .../le-frog/images/animated-overlay.gif | Bin .../ui-bg_diagonals-small_0_aaaaaa_40x40.png | Bin .../ui-bg_diagonals-thick_15_444444_40x40.png | Bin .../ui-bg_diagonals-thick_95_ffdc2e_40x40.png | Bin .../images/ui-bg_glass_55_fbf5d0_1x400.png | Bin .../ui-bg_highlight-hard_30_285c00_1x100.png | Bin .../ui-bg_highlight-soft_33_3a8104_1x100.png | Bin .../ui-bg_highlight-soft_50_4eb305_1x100.png | Bin .../ui-bg_highlight-soft_60_4ca20b_1x100.png | Bin .../ui-bg_inset-soft_10_285c00_1x100.png | Bin .../images/ui-icons_4eb305_256x240.png | Bin .../images/ui-icons_72b42d_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/le-frog/jquery-ui.css | 0 .../themes/le-frog/jquery-ui.min.css | 0 .../jquery-ui/themes/le-frog/theme.css | 0 .../mint-choc/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_glass_15_5f391b_1x400.png | Bin .../ui-bg_gloss-wave_20_1c160d_500x100.png | Bin .../ui-bg_gloss-wave_25_453326_500x100.png | Bin .../ui-bg_gloss-wave_30_44372c_500x100.png | Bin .../ui-bg_highlight-soft_20_201913_1x100.png | Bin .../ui-bg_highlight-soft_20_619226_1x100.png | Bin .../ui-bg_inset-soft_10_201913_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_9bcc60_256x240.png | Bin .../images/ui-icons_add978_256x240.png | Bin .../images/ui-icons_e3ddc9_256x240.png | Bin .../images/ui-icons_f1fd86_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/mint-choc/jquery-ui.css | 0 .../themes/mint-choc/jquery-ui.min.css | 0 .../jquery-ui/themes/mint-choc/theme.css | 0 .../overcast/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin .../images/ui-bg_flat_55_c0402a_40x100.png | Bin .../images/ui-bg_flat_55_eeeeee_40x100.png | Bin .../images/ui-bg_glass_100_f8f8f8_1x400.png | Bin .../images/ui-bg_glass_35_dddddd_1x400.png | Bin .../images/ui-bg_glass_60_eeeeee_1x400.png | Bin .../ui-bg_inset-hard_75_999999_1x100.png | Bin .../ui-bg_inset-soft_50_c9c9c9_1x100.png | Bin .../images/ui-icons_3383bb_256x240.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_70b2e1_256x240.png | Bin .../images/ui-icons_999999_256x240.png | Bin .../images/ui-icons_fbc856_256x240.png | Bin .../jquery-ui/themes/overcast/jquery-ui.css | 0 .../themes/overcast/jquery-ui.min.css | 0 .../jquery-ui/themes/overcast/theme.css | 0 .../images/animated-overlay.gif | Bin .../ui-bg_diagonal-maze_20_6e4f1c_10x10.png | Bin .../ui-bg_diagonal-maze_40_000000_10x10.png | Bin .../ui-bg_fine-grain_10_eceadf_60x60.png | Bin .../ui-bg_fine-grain_10_f8f7f6_60x60.png | Bin .../ui-bg_fine-grain_15_eceadf_60x60.png | Bin .../ui-bg_fine-grain_15_f7f3de_60x60.png | Bin .../ui-bg_fine-grain_15_ffffff_60x60.png | Bin .../ui-bg_fine-grain_65_654b24_60x60.png | Bin .../ui-bg_fine-grain_68_b83400_60x60.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_3572ac_256x240.png | Bin .../images/ui-icons_8c291d_256x240.png | Bin .../images/ui-icons_b83400_256x240.png | Bin .../images/ui-icons_fbdb93_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../themes/pepper-grinder/jquery-ui.css | 0 .../themes/pepper-grinder/jquery-ui.min.css | 0 .../jquery-ui/themes/pepper-grinder/theme.css | 0 .../redmond/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_55_fbec88_40x100.png | Bin .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin .../images/ui-icons_217bc0_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_469bdd_256x240.png | Bin .../images/ui-icons_6da8d5_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../images/ui-icons_d8e7f3_256x240.png | Bin .../images/ui-icons_f9bd01_256x240.png | Bin .../jquery-ui/themes/redmond/jquery-ui.css | 0 .../themes/redmond/jquery-ui.min.css | 0 .../jquery-ui/themes/redmond/theme.css | 0 .../smoothness/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../images/ui-bg_glass_75_dadada_1x400.png | Bin .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_888888_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../jquery-ui/themes/smoothness/jquery-ui.css | 0 .../themes/smoothness/jquery-ui.min.css | 0 .../jquery-ui/themes/smoothness/theme.css | 0 .../south-street/images/animated-overlay.gif | Bin .../images/ui-bg_glass_55_fcf0ba_1x400.png | Bin .../ui-bg_gloss-wave_100_ece8da_500x100.png | Bin .../ui-bg_highlight-hard_100_f5f3e5_1x100.png | Bin .../ui-bg_highlight-hard_100_fafaf4_1x100.png | Bin .../ui-bg_highlight-hard_15_459e00_1x100.png | Bin .../ui-bg_highlight-hard_95_cccccc_1x100.png | Bin .../ui-bg_highlight-soft_25_67b021_1x100.png | Bin .../ui-bg_highlight-soft_95_ffedad_1x100.png | Bin .../ui-bg_inset-soft_15_2b2922_1x100.png | Bin .../images/ui-icons_808080_256x240.png | Bin .../images/ui-icons_847e71_256x240.png | Bin .../images/ui-icons_8DC262_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../images/ui-icons_eeeeee_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../themes/south-street/jquery-ui.css | 0 .../themes/south-street/jquery-ui.min.css | 0 .../jquery-ui/themes/south-street/theme.css | 0 .../themes/start/images/animated-overlay.gif | Bin .../images/ui-bg_flat_55_999999_40x100.png | Bin .../images/ui-bg_flat_75_aaaaaa_40x100.png | Bin .../images/ui-bg_glass_45_0078ae_1x400.png | Bin .../images/ui-bg_glass_55_f8da4e_1x400.png | Bin .../images/ui-bg_glass_75_79c9ec_1x400.png | Bin .../ui-bg_gloss-wave_45_e14f1c_500x100.png | Bin .../ui-bg_gloss-wave_50_6eac2c_500x100.png | Bin .../ui-bg_gloss-wave_75_2191c0_500x100.png | Bin .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin .../start/images/ui-icons_0078ae_256x240.png | Bin .../start/images/ui-icons_056b93_256x240.png | Bin .../start/images/ui-icons_d8e7f3_256x240.png | Bin .../start/images/ui-icons_e0fdff_256x240.png | Bin .../start/images/ui-icons_f5e175_256x240.png | Bin .../start/images/ui-icons_f7a50d_256x240.png | Bin .../start/images/ui-icons_fcd113_256x240.png | Bin .../jquery-ui/themes/start/jquery-ui.css | 0 .../jquery-ui/themes/start/jquery-ui.min.css | 0 .../jquery-ui/themes/start/theme.css | 0 .../themes/sunny/images/animated-overlay.gif | Bin ...ui-bg_diagonals-medium_20_d34d17_40x40.png | Bin .../images/ui-bg_flat_30_cccccc_40x100.png | Bin .../images/ui-bg_flat_50_5c5c5c_40x100.png | Bin .../ui-bg_gloss-wave_45_817865_500x100.png | Bin .../ui-bg_gloss-wave_60_fece2f_500x100.png | Bin .../ui-bg_gloss-wave_70_ffdd57_500x100.png | Bin .../ui-bg_gloss-wave_90_fff9e5_500x100.png | Bin .../ui-bg_highlight-soft_100_feeebd_1x100.png | Bin .../ui-bg_inset-soft_30_ffffff_1x100.png | Bin .../sunny/images/ui-icons_3d3d3d_256x240.png | Bin .../sunny/images/ui-icons_bd7b00_256x240.png | Bin .../sunny/images/ui-icons_d19405_256x240.png | Bin .../sunny/images/ui-icons_eb990f_256x240.png | Bin .../sunny/images/ui-icons_ed9f26_256x240.png | Bin .../sunny/images/ui-icons_fadc7a_256x240.png | Bin .../sunny/images/ui-icons_ffe180_256x240.png | Bin .../jquery-ui/themes/sunny/jquery-ui.css | 0 .../jquery-ui/themes/sunny/jquery-ui.min.css | 0 .../jquery-ui/themes/sunny/theme.css | 0 .../swanky-purse/images/animated-overlay.gif | Bin .../images/ui-bg_diamond_10_4f4221_10x8.png | Bin .../images/ui-bg_diamond_20_372806_10x8.png | Bin .../images/ui-bg_diamond_25_675423_10x8.png | Bin .../images/ui-bg_diamond_25_d5ac5d_10x8.png | Bin .../images/ui-bg_diamond_8_261803_10x8.png | Bin .../images/ui-bg_diamond_8_443113_10x8.png | Bin .../images/ui-bg_flat_75_ddd4b0_40x100.png | Bin .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin .../images/ui-icons_070603_256x240.png | Bin .../images/ui-icons_e8e2b5_256x240.png | Bin .../images/ui-icons_e9cd86_256x240.png | Bin .../images/ui-icons_efec9f_256x240.png | Bin .../images/ui-icons_f2ec64_256x240.png | Bin .../images/ui-icons_f9f2bd_256x240.png | Bin .../images/ui-icons_ff7519_256x240.png | Bin .../themes/swanky-purse/jquery-ui.css | 0 .../themes/swanky-purse/jquery-ui.min.css | 0 .../jquery-ui/themes/swanky-purse/theme.css | 0 .../trontastic/images/animated-overlay.gif | Bin .../ui-bg_diagonals-small_50_262626_40x40.png | Bin .../images/ui-bg_flat_0_303030_40x100.png | Bin .../images/ui-bg_flat_0_4c4c4c_40x100.png | Bin .../images/ui-bg_glass_40_0a0a0a_1x400.png | Bin .../images/ui-bg_glass_55_f1fbe5_1x400.png | Bin .../images/ui-bg_glass_60_000000_1x400.png | Bin .../ui-bg_gloss-wave_55_000000_500x100.png | Bin .../ui-bg_gloss-wave_85_9fda58_500x100.png | Bin .../ui-bg_gloss-wave_95_f6ecd5_500x100.png | Bin .../images/ui-icons_000000_256x240.png | Bin .../images/ui-icons_1f1f1f_256x240.png | Bin .../images/ui-icons_9fda58_256x240.png | Bin .../images/ui-icons_b8ec79_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../jquery-ui/themes/trontastic/jquery-ui.css | 0 .../themes/trontastic/jquery-ui.min.css | 0 .../jquery-ui/themes/trontastic/theme.css | 0 .../ui-darkness/images/animated-overlay.gif | Bin .../images/ui-bg_flat_30_cccccc_40x100.png | Bin .../images/ui-bg_flat_50_5c5c5c_40x100.png | Bin .../images/ui-bg_glass_20_555555_1x400.png | Bin .../images/ui-bg_glass_40_0078a3_1x400.png | Bin .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin .../ui-bg_gloss-wave_25_333333_500x100.png | Bin .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin .../ui-bg_inset-soft_25_000000_1x100.png | Bin .../ui-bg_inset-soft_30_f58400_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_4b8e0b_256x240.png | Bin .../images/ui-icons_a83300_256x240.png | Bin .../images/ui-icons_cccccc_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../themes/ui-darkness/jquery-ui.css | 0 .../themes/ui-darkness/jquery-ui.min.css | 0 .../jquery-ui/themes/ui-darkness/theme.css | 0 .../ui-lightness/images/animated-overlay.gif | Bin .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin .../images/ui-bg_flat_10_000000_40x100.png | Bin .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_228ef1_256x240.png | Bin .../images/ui-icons_ef8c08_256x240.png | Bin .../images/ui-icons_ffd27a_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../themes/ui-lightness/jquery-ui.css | 0 .../themes/ui-lightness/jquery-ui.min.css | 0 .../jquery-ui/themes/ui-lightness/theme.css | 0 .../themes/vader/images/animated-overlay.gif | Bin .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_gloss-wave_16_121212_500x100.png | Bin .../ui-bg_highlight-hard_15_888888_1x100.png | Bin .../ui-bg_highlight-hard_55_555555_1x100.png | Bin .../ui-bg_highlight-soft_35_adadad_1x100.png | Bin .../ui-bg_highlight-soft_60_dddddd_1x100.png | Bin .../ui-bg_inset-soft_15_121212_1x100.png | Bin .../vader/images/ui-icons_666666_256x240.png | Bin .../vader/images/ui-icons_aaaaaa_256x240.png | Bin .../vader/images/ui-icons_bbbbbb_256x240.png | Bin .../vader/images/ui-icons_c98000_256x240.png | Bin .../vader/images/ui-icons_cccccc_256x240.png | Bin .../vader/images/ui-icons_cd0a0a_256x240.png | Bin .../vader/images/ui-icons_f29a00_256x240.png | Bin .../jquery-ui/themes/vader/jquery-ui.css | 0 .../jquery-ui/themes/vader/jquery-ui.min.css | 0 .../jquery-ui/themes/vader/theme.css | 0 .../bower_components/jquery-ui/ui/.jshintrc | 0 .../jquery-ui/ui/accordion.js | 0 .../jquery-ui/ui/autocomplete.js | 0 .../bower_components/jquery-ui/ui/button.js | 0 .../bower_components/jquery-ui/ui/core.js | 0 .../jquery-ui/ui/datepicker.js | 0 .../bower_components/jquery-ui/ui/dialog.js | 0 .../jquery-ui/ui/draggable.js | 0 .../jquery-ui/ui/droppable.js | 0 .../jquery-ui/ui/effect-blind.js | 0 .../jquery-ui/ui/effect-bounce.js | 0 .../jquery-ui/ui/effect-clip.js | 0 .../jquery-ui/ui/effect-drop.js | 0 .../jquery-ui/ui/effect-explode.js | 0 .../jquery-ui/ui/effect-fade.js | 0 .../jquery-ui/ui/effect-fold.js | 0 .../jquery-ui/ui/effect-highlight.js | 0 .../jquery-ui/ui/effect-puff.js | 0 .../jquery-ui/ui/effect-pulsate.js | 0 .../jquery-ui/ui/effect-scale.js | 0 .../jquery-ui/ui/effect-shake.js | 0 .../jquery-ui/ui/effect-size.js | 0 .../jquery-ui/ui/effect-slide.js | 0 .../jquery-ui/ui/effect-transfer.js | 0 .../bower_components/jquery-ui/ui/effect.js | 0 .../jquery-ui/ui/i18n/datepicker-af.js | 0 .../jquery-ui/ui/i18n/datepicker-ar-DZ.js | 0 .../jquery-ui/ui/i18n/datepicker-ar.js | 0 .../jquery-ui/ui/i18n/datepicker-az.js | 0 .../jquery-ui/ui/i18n/datepicker-be.js | 0 .../jquery-ui/ui/i18n/datepicker-bg.js | 0 .../jquery-ui/ui/i18n/datepicker-bs.js | 0 .../jquery-ui/ui/i18n/datepicker-ca.js | 0 .../jquery-ui/ui/i18n/datepicker-cs.js | 0 .../jquery-ui/ui/i18n/datepicker-cy-GB.js | 0 .../jquery-ui/ui/i18n/datepicker-da.js | 0 .../jquery-ui/ui/i18n/datepicker-de.js | 0 .../jquery-ui/ui/i18n/datepicker-el.js | 0 .../jquery-ui/ui/i18n/datepicker-en-AU.js | 0 .../jquery-ui/ui/i18n/datepicker-en-GB.js | 0 .../jquery-ui/ui/i18n/datepicker-en-NZ.js | 0 .../jquery-ui/ui/i18n/datepicker-eo.js | 0 .../jquery-ui/ui/i18n/datepicker-es.js | 0 .../jquery-ui/ui/i18n/datepicker-et.js | 0 .../jquery-ui/ui/i18n/datepicker-eu.js | 0 .../jquery-ui/ui/i18n/datepicker-fa.js | 0 .../jquery-ui/ui/i18n/datepicker-fi.js | 0 .../jquery-ui/ui/i18n/datepicker-fo.js | 0 .../jquery-ui/ui/i18n/datepicker-fr-CA.js | 0 .../jquery-ui/ui/i18n/datepicker-fr-CH.js | 0 .../jquery-ui/ui/i18n/datepicker-fr.js | 0 .../jquery-ui/ui/i18n/datepicker-gl.js | 0 .../jquery-ui/ui/i18n/datepicker-he.js | 0 .../jquery-ui/ui/i18n/datepicker-hi.js | 0 .../jquery-ui/ui/i18n/datepicker-hr.js | 0 .../jquery-ui/ui/i18n/datepicker-hu.js | 0 .../jquery-ui/ui/i18n/datepicker-hy.js | 0 .../jquery-ui/ui/i18n/datepicker-id.js | 0 .../jquery-ui/ui/i18n/datepicker-is.js | 0 .../jquery-ui/ui/i18n/datepicker-it-CH.js | 0 .../jquery-ui/ui/i18n/datepicker-it.js | 0 .../jquery-ui/ui/i18n/datepicker-ja.js | 0 .../jquery-ui/ui/i18n/datepicker-ka.js | 0 .../jquery-ui/ui/i18n/datepicker-kk.js | 0 .../jquery-ui/ui/i18n/datepicker-km.js | 0 .../jquery-ui/ui/i18n/datepicker-ko.js | 0 .../jquery-ui/ui/i18n/datepicker-ky.js | 0 .../jquery-ui/ui/i18n/datepicker-lb.js | 0 .../jquery-ui/ui/i18n/datepicker-lt.js | 0 .../jquery-ui/ui/i18n/datepicker-lv.js | 0 .../jquery-ui/ui/i18n/datepicker-mk.js | 0 .../jquery-ui/ui/i18n/datepicker-ml.js | 0 .../jquery-ui/ui/i18n/datepicker-ms.js | 0 .../jquery-ui/ui/i18n/datepicker-nb.js | 0 .../jquery-ui/ui/i18n/datepicker-nl-BE.js | 0 .../jquery-ui/ui/i18n/datepicker-nl.js | 0 .../jquery-ui/ui/i18n/datepicker-nn.js | 0 .../jquery-ui/ui/i18n/datepicker-no.js | 0 .../jquery-ui/ui/i18n/datepicker-pl.js | 0 .../jquery-ui/ui/i18n/datepicker-pt-BR.js | 0 .../jquery-ui/ui/i18n/datepicker-pt.js | 0 .../jquery-ui/ui/i18n/datepicker-rm.js | 0 .../jquery-ui/ui/i18n/datepicker-ro.js | 0 .../jquery-ui/ui/i18n/datepicker-ru.js | 0 .../jquery-ui/ui/i18n/datepicker-sk.js | 0 .../jquery-ui/ui/i18n/datepicker-sl.js | 0 .../jquery-ui/ui/i18n/datepicker-sq.js | 0 .../jquery-ui/ui/i18n/datepicker-sr-SR.js | 0 .../jquery-ui/ui/i18n/datepicker-sr.js | 0 .../jquery-ui/ui/i18n/datepicker-sv.js | 0 .../jquery-ui/ui/i18n/datepicker-ta.js | 0 .../jquery-ui/ui/i18n/datepicker-th.js | 0 .../jquery-ui/ui/i18n/datepicker-tj.js | 0 .../jquery-ui/ui/i18n/datepicker-tr.js | 0 .../jquery-ui/ui/i18n/datepicker-uk.js | 0 .../jquery-ui/ui/i18n/datepicker-vi.js | 0 .../jquery-ui/ui/i18n/datepicker-zh-CN.js | 0 .../jquery-ui/ui/i18n/datepicker-zh-HK.js | 0 .../jquery-ui/ui/i18n/datepicker-zh-TW.js | 0 .../bower_components/jquery-ui/ui/menu.js | 0 .../jquery-ui/ui/minified/accordion.min.js | 0 .../jquery-ui/ui/minified/autocomplete.min.js | 0 .../jquery-ui/ui/minified/button.min.js | 0 .../jquery-ui/ui/minified/core.min.js | 0 .../jquery-ui/ui/minified/datepicker.min.js | 0 .../jquery-ui/ui/minified/dialog.min.js | 0 .../jquery-ui/ui/minified/draggable.min.js | 0 .../jquery-ui/ui/minified/droppable.min.js | 0 .../jquery-ui/ui/minified/effect-blind.min.js | 0 .../ui/minified/effect-bounce.min.js | 0 .../jquery-ui/ui/minified/effect-clip.min.js | 0 .../jquery-ui/ui/minified/effect-drop.min.js | 0 .../ui/minified/effect-explode.min.js | 0 .../jquery-ui/ui/minified/effect-fade.min.js | 0 .../jquery-ui/ui/minified/effect-fold.min.js | 0 .../ui/minified/effect-highlight.min.js | 0 .../jquery-ui/ui/minified/effect-puff.min.js | 0 .../ui/minified/effect-pulsate.min.js | 0 .../jquery-ui/ui/minified/effect-scale.min.js | 0 .../jquery-ui/ui/minified/effect-shake.min.js | 0 .../jquery-ui/ui/minified/effect-size.min.js | 0 .../jquery-ui/ui/minified/effect-slide.min.js | 0 .../ui/minified/effect-transfer.min.js | 0 .../jquery-ui/ui/minified/effect.min.js | 0 .../ui/minified/i18n/datepicker-af.min.js | 0 .../ui/minified/i18n/datepicker-ar-DZ.min.js | 0 .../ui/minified/i18n/datepicker-ar.min.js | 0 .../ui/minified/i18n/datepicker-az.min.js | 0 .../ui/minified/i18n/datepicker-be.min.js | 0 .../ui/minified/i18n/datepicker-bg.min.js | 0 .../ui/minified/i18n/datepicker-bs.min.js | 0 .../ui/minified/i18n/datepicker-ca.min.js | 0 .../ui/minified/i18n/datepicker-cs.min.js | 0 .../ui/minified/i18n/datepicker-cy-GB.min.js | 0 .../ui/minified/i18n/datepicker-da.min.js | 0 .../ui/minified/i18n/datepicker-de.min.js | 0 .../ui/minified/i18n/datepicker-el.min.js | 0 .../ui/minified/i18n/datepicker-en-AU.min.js | 0 .../ui/minified/i18n/datepicker-en-GB.min.js | 0 .../ui/minified/i18n/datepicker-en-NZ.min.js | 0 .../ui/minified/i18n/datepicker-eo.min.js | 0 .../ui/minified/i18n/datepicker-es.min.js | 0 .../ui/minified/i18n/datepicker-et.min.js | 0 .../ui/minified/i18n/datepicker-eu.min.js | 0 .../ui/minified/i18n/datepicker-fa.min.js | 0 .../ui/minified/i18n/datepicker-fi.min.js | 0 .../ui/minified/i18n/datepicker-fo.min.js | 0 .../ui/minified/i18n/datepicker-fr-CA.min.js | 0 .../ui/minified/i18n/datepicker-fr-CH.min.js | 0 .../ui/minified/i18n/datepicker-fr.min.js | 0 .../ui/minified/i18n/datepicker-gl.min.js | 0 .../ui/minified/i18n/datepicker-he.min.js | 0 .../ui/minified/i18n/datepicker-hi.min.js | 0 .../ui/minified/i18n/datepicker-hr.min.js | 0 .../ui/minified/i18n/datepicker-hu.min.js | 0 .../ui/minified/i18n/datepicker-hy.min.js | 0 .../ui/minified/i18n/datepicker-id.min.js | 0 .../ui/minified/i18n/datepicker-is.min.js | 0 .../ui/minified/i18n/datepicker-it-CH.min.js | 0 .../ui/minified/i18n/datepicker-it.min.js | 0 .../ui/minified/i18n/datepicker-ja.min.js | 0 .../ui/minified/i18n/datepicker-ka.min.js | 0 .../ui/minified/i18n/datepicker-kk.min.js | 0 .../ui/minified/i18n/datepicker-km.min.js | 0 .../ui/minified/i18n/datepicker-ko.min.js | 0 .../ui/minified/i18n/datepicker-ky.min.js | 0 .../ui/minified/i18n/datepicker-lb.min.js | 0 .../ui/minified/i18n/datepicker-lt.min.js | 0 .../ui/minified/i18n/datepicker-lv.min.js | 0 .../ui/minified/i18n/datepicker-mk.min.js | 0 .../ui/minified/i18n/datepicker-ml.min.js | 0 .../ui/minified/i18n/datepicker-ms.min.js | 0 .../ui/minified/i18n/datepicker-nb.min.js | 0 .../ui/minified/i18n/datepicker-nl-BE.min.js | 0 .../ui/minified/i18n/datepicker-nl.min.js | 0 .../ui/minified/i18n/datepicker-nn.min.js | 0 .../ui/minified/i18n/datepicker-no.min.js | 0 .../ui/minified/i18n/datepicker-pl.min.js | 0 .../ui/minified/i18n/datepicker-pt-BR.min.js | 0 .../ui/minified/i18n/datepicker-pt.min.js | 0 .../ui/minified/i18n/datepicker-rm.min.js | 0 .../ui/minified/i18n/datepicker-ro.min.js | 0 .../ui/minified/i18n/datepicker-ru.min.js | 0 .../ui/minified/i18n/datepicker-sk.min.js | 0 .../ui/minified/i18n/datepicker-sl.min.js | 0 .../ui/minified/i18n/datepicker-sq.min.js | 0 .../ui/minified/i18n/datepicker-sr-SR.min.js | 0 .../ui/minified/i18n/datepicker-sr.min.js | 0 .../ui/minified/i18n/datepicker-sv.min.js | 0 .../ui/minified/i18n/datepicker-ta.min.js | 0 .../ui/minified/i18n/datepicker-th.min.js | 0 .../ui/minified/i18n/datepicker-tj.min.js | 0 .../ui/minified/i18n/datepicker-tr.min.js | 0 .../ui/minified/i18n/datepicker-uk.min.js | 0 .../ui/minified/i18n/datepicker-vi.min.js | 0 .../ui/minified/i18n/datepicker-zh-CN.min.js | 0 .../ui/minified/i18n/datepicker-zh-HK.min.js | 0 .../ui/minified/i18n/datepicker-zh-TW.min.js | 0 .../jquery-ui/ui/minified/menu.min.js | 0 .../jquery-ui/ui/minified/mouse.min.js | 0 .../jquery-ui/ui/minified/position.min.js | 0 .../jquery-ui/ui/minified/progressbar.min.js | 0 .../jquery-ui/ui/minified/resizable.min.js | 0 .../jquery-ui/ui/minified/selectable.min.js | 0 .../jquery-ui/ui/minified/selectmenu.min.js | 0 .../jquery-ui/ui/minified/slider.min.js | 0 .../jquery-ui/ui/minified/sortable.min.js | 0 .../jquery-ui/ui/minified/spinner.min.js | 0 .../jquery-ui/ui/minified/tabs.min.js | 0 .../jquery-ui/ui/minified/tooltip.min.js | 0 .../jquery-ui/ui/minified/widget.min.js | 0 .../bower_components/jquery-ui/ui/mouse.js | 0 .../bower_components/jquery-ui/ui/position.js | 0 .../jquery-ui/ui/progressbar.js | 0 .../jquery-ui/ui/resizable.js | 0 .../jquery-ui/ui/selectable.js | 0 .../jquery-ui/ui/selectmenu.js | 0 .../bower_components/jquery-ui/ui/slider.js | 0 .../bower_components/jquery-ui/ui/sortable.js | 0 .../bower_components/jquery-ui/ui/spinner.js | 0 .../bower_components/jquery-ui/ui/tabs.js | 0 .../bower_components/jquery-ui/ui/tooltip.js | 0 .../bower_components/jquery-ui/ui/widget.js | 0 .../bower_components/jquery/.bower.json | 0 .../bower_components/jquery/AUTHORS.txt | 0 .../bower_components/jquery/LICENSE.txt | 0 .../bower_components/jquery/README.md | 0 .../bower_components/jquery/bower.json | 0 .../bower_components/jquery/dist/core.js | 0 .../bower_components/jquery/dist/jquery.js | 0 .../jquery/dist/jquery.min.js | 0 .../jquery/dist/jquery.min.map | 0 .../jquery/dist/jquery.slim.js | 0 .../jquery/dist/jquery.slim.min.js | 0 .../jquery/dist/jquery.slim.min.map | 0 .../jquery/external/sizzle/LICENSE.txt | 0 .../jquery/external/sizzle/dist/sizzle.js | 0 .../jquery/external/sizzle/dist/sizzle.min.js | 0 .../external/sizzle/dist/sizzle.min.map | 0 .../jquery/src/.eslintrc.json | 0 .../bower_components/jquery/src/ajax.js | 0 .../bower_components/jquery/src/ajax/jsonp.js | 0 .../bower_components/jquery/src/ajax/load.js | 0 .../jquery/src/ajax/parseXML.js | 0 .../jquery/src/ajax/script.js | 0 .../jquery/src/ajax/var/location.js | 0 .../jquery/src/ajax/var/nonce.js | 0 .../jquery/src/ajax/var/rquery.js | 0 .../bower_components/jquery/src/ajax/xhr.js | 0 .../bower_components/jquery/src/attributes.js | 0 .../jquery/src/attributes/attr.js | 0 .../jquery/src/attributes/classes.js | 0 .../jquery/src/attributes/prop.js | 0 .../jquery/src/attributes/support.js | 0 .../jquery/src/attributes/val.js | 0 .../bower_components/jquery/src/callbacks.js | 0 .../bower_components/jquery/src/core.js | 0 .../jquery/src/core/DOMEval.js | 0 .../jquery/src/core/access.js | 0 .../bower_components/jquery/src/core/init.js | 0 .../jquery/src/core/nodeName.js | 0 .../jquery/src/core/parseHTML.js | 0 .../jquery/src/core/ready-no-deferred.js | 0 .../bower_components/jquery/src/core/ready.js | 0 .../jquery/src/core/readyException.js | 0 .../jquery/src/core/stripAndCollapse.js | 0 .../jquery/src/core/support.js | 0 .../jquery/src/core/var/rsingleTag.js | 0 .../bower_components/jquery/src/css.js | 0 .../jquery/src/css/addGetHookIf.js | 0 .../jquery/src/css/adjustCSS.js | 0 .../bower_components/jquery/src/css/curCSS.js | 0 .../jquery/src/css/hiddenVisibleSelectors.js | 0 .../jquery/src/css/showHide.js | 0 .../jquery/src/css/support.js | 0 .../jquery/src/css/var/cssExpand.js | 0 .../jquery/src/css/var/getStyles.js | 0 .../jquery/src/css/var/isHiddenWithinTree.js | 0 .../jquery/src/css/var/rmargin.js | 0 .../jquery/src/css/var/rnumnonpx.js | 0 .../jquery/src/css/var/swap.js | 0 .../bower_components/jquery/src/data.js | 0 .../bower_components/jquery/src/data/Data.js | 0 .../jquery/src/data/var/acceptData.js | 0 .../jquery/src/data/var/dataPriv.js | 0 .../jquery/src/data/var/dataUser.js | 0 .../bower_components/jquery/src/deferred.js | 0 .../jquery/src/deferred/exceptionHook.js | 0 .../bower_components/jquery/src/deprecated.js | 0 .../bower_components/jquery/src/dimensions.js | 0 .../bower_components/jquery/src/effects.js | 0 .../jquery/src/effects/Tween.js | 0 .../jquery/src/effects/animatedSelector.js | 0 .../bower_components/jquery/src/event.js | 0 .../bower_components/jquery/src/event/ajax.js | 0 .../jquery/src/event/alias.js | 0 .../jquery/src/event/focusin.js | 0 .../jquery/src/event/support.js | 0 .../jquery/src/event/trigger.js | 0 .../jquery/src/exports/amd.js | 0 .../jquery/src/exports/global.js | 0 .../bower_components/jquery/src/jquery.js | 0 .../jquery/src/manipulation.js | 0 .../jquery/src/manipulation/_evalUrl.js | 0 .../jquery/src/manipulation/buildFragment.js | 0 .../jquery/src/manipulation/getAll.js | 0 .../jquery/src/manipulation/setGlobalEval.js | 0 .../jquery/src/manipulation/support.js | 0 .../src/manipulation/var/rcheckableType.js | 0 .../src/manipulation/var/rscriptType.js | 0 .../jquery/src/manipulation/var/rtagName.js | 0 .../jquery/src/manipulation/wrapMap.js | 0 .../bower_components/jquery/src/offset.js | 0 .../bower_components/jquery/src/queue.js | 0 .../jquery/src/queue/delay.js | 0 .../jquery/src/selector-native.js | 0 .../jquery/src/selector-sizzle.js | 0 .../bower_components/jquery/src/selector.js | 0 .../bower_components/jquery/src/serialize.js | 0 .../bower_components/jquery/src/traversing.js | 0 .../jquery/src/traversing/findFilter.js | 0 .../jquery/src/traversing/var/dir.js | 0 .../src/traversing/var/rneedsContext.js | 0 .../jquery/src/traversing/var/siblings.js | 0 .../jquery/src/var/ObjectFunctionString.js | 0 .../bower_components/jquery/src/var/arr.js | 0 .../jquery/src/var/class2type.js | 0 .../bower_components/jquery/src/var/concat.js | 0 .../jquery/src/var/document.js | 0 .../jquery/src/var/documentElement.js | 0 .../jquery/src/var/fnToString.js | 0 .../jquery/src/var/getProto.js | 0 .../bower_components/jquery/src/var/hasOwn.js | 0 .../jquery/src/var/indexOf.js | 0 .../bower_components/jquery/src/var/pnum.js | 0 .../bower_components/jquery/src/var/push.js | 0 .../jquery/src/var/rcssNum.js | 0 .../jquery/src/var/rnothtmlwhite.js | 0 .../bower_components/jquery/src/var/slice.js | 0 .../jquery/src/var/support.js | 0 .../jquery/src/var/toString.js | 0 .../bower_components/jquery/src/wrap.js | 0 .../bower_components/jvectormap/.bower.json | 0 .../bower_components/jvectormap/.gitignore | 0 .../bower_components/jvectormap/LICENSE-AGPL | 0 .../jvectormap/LICENSE-COMMERCIAL | 0 .../bower_components/jvectormap/README.md | 0 .../bower_components/jvectormap/build.sh | 0 .../jvectormap/converter/converter.py | 0 .../jvectormap/converter/processor.py | 0 .../jvectormap/converter/simplifier.py | 0 .../jvectormap/jquery-jvectormap.css | 0 .../jvectormap/jquery-jvectormap.js | 0 .../jvectormap/jvectormap.jquery.json | 0 .../jvectormap/lib/jquery-mousewheel.js | 0 .../jvectormap/src/abstract-canvas-element.js | 0 .../jvectormap/src/abstract-element.js | 0 .../jvectormap/src/abstract-shape-element.js | 0 .../jvectormap/src/color-scale.js | 0 .../jvectormap/src/data-series.js | 0 .../jvectormap/src/jvectormap.js | 0 .../bower_components/jvectormap/src/legend.js | 0 .../jvectormap/src/map-object.js | 0 .../bower_components/jvectormap/src/map.js | 0 .../bower_components/jvectormap/src/marker.js | 0 .../jvectormap/src/multimap.js | 0 .../jvectormap/src/numeric-scale.js | 0 .../jvectormap/src/ordinal-scale.js | 0 .../bower_components/jvectormap/src/proj.js | 0 .../bower_components/jvectormap/src/region.js | 0 .../jvectormap/src/simple-scale.js | 0 .../jvectormap/src/svg-canvas-element.js | 0 .../jvectormap/src/svg-circle-element.js | 0 .../jvectormap/src/svg-element.js | 0 .../jvectormap/src/svg-group-element.js | 0 .../jvectormap/src/svg-image-element.js | 0 .../jvectormap/src/svg-path-element.js | 0 .../jvectormap/src/svg-shape-element.js | 0 .../jvectormap/src/svg-text-element.js | 0 .../jvectormap/src/vector-canvas.js | 0 .../jvectormap/src/vml-canvas-element.js | 0 .../jvectormap/src/vml-circle-element.js | 0 .../jvectormap/src/vml-element.js | 0 .../jvectormap/src/vml-group-element.js | 0 .../jvectormap/src/vml-image-element.js | 0 .../jvectormap/src/vml-path-element.js | 0 .../jvectormap/src/vml-shape-element.js | 0 .../jvectormap/tests/assets/bg-red-green.png | Bin .../tests/assets/bg-yellow-blue.png | Bin .../jvectormap/tests/assets/icon-bank.png | Bin .../jvectormap/tests/assets/icon-factory.png | Bin .../jvectormap/tests/assets/jquery-1.8.2.js | 0 .../jquery-jvectormap-data-us-lcc-en.js | 0 .../tests/assets/jquery-jvectormap-map.js | 0 .../assets/jquery-jvectormap-us-aea-en.js | 0 .../assets/jquery-jvectormap-us-lcc-en.js | 0 .../assets/jquery-jvectormap-us-merc-en.js | 0 .../assets/jquery-jvectormap-us-mill-en.js | 0 .../assets/jquery-jvectormap-world-mill-en.js | 0 .../us/jquery-jvectormap-data-us-ak-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-al-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ar-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-az-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ca-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-co-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ct-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-dc-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-de-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-fl-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ga-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-hi-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ia-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-id-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-il-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-in-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ks-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ky-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-la-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ma-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-md-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-me-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-mi-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-mn-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-mo-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ms-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-mt-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nc-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nd-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ne-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nh-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nj-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nm-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-nv-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ny-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-oh-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ok-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-or-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-pa-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ri-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-sc-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-sd-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-tn-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-tx-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-ut-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-va-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-vt-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-wa-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-wi-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-wv-lcc-en.js | 0 .../us/jquery-jvectormap-data-us-wy-lcc-en.js | 0 .../jvectormap/tests/basic.html | 0 .../jvectormap/tests/build.html | 0 .../jvectormap/tests/custom.html | 0 .../jvectormap/tests/drill-down.html | 0 .../jvectormap/tests/hidden.html | 0 .../jvectormap/tests/markers.html | 0 .../jvectormap/tests/memory.html | 0 .../tests/processor/continents.json | 0 .../tests/processor/continents_wb.json | 0 .../tests/processor/france_regions_2016.json | 0 .../jvectormap/tests/processor/russia.json | 0 .../jvectormap/tests/processor/russia_fd.json | 0 .../jvectormap/tests/processor/tz.json | 0 .../jvectormap/tests/reverse-projection.html | 0 .../bower_components/jvectormap/tests/us.json | 0 .../jvectormap/tests/world.json | 0 .../bower_components/mocha/.bower.json | 0 .../bower_components/mocha/History.md | 0 .../bower_components/mocha/LICENSE | 0 .../bower_components/mocha/Readme.md | 0 .../bower_components/mocha/bower.json | 0 .../bower_components/mocha/media/logo.svg | 0 .../bower_components/mocha/mocha.css | 0 .../bower_components/mocha/mocha.js | 0 .../bower_components/moment/.bower.json | 0 .../bower_components/moment/CHANGELOG.md | 0 .../bower_components/moment/LICENSE | 0 .../bower_components/moment/README.md | 0 .../bower_components/moment/bower.json | 0 .../bower_components/moment/locale/af.js | 0 .../bower_components/moment/locale/ar-dz.js | 0 .../bower_components/moment/locale/ar-kw.js | 0 .../bower_components/moment/locale/ar-ly.js | 0 .../bower_components/moment/locale/ar-ma.js | 0 .../bower_components/moment/locale/ar-sa.js | 0 .../bower_components/moment/locale/ar-tn.js | 0 .../bower_components/moment/locale/ar.js | 0 .../bower_components/moment/locale/az.js | 0 .../bower_components/moment/locale/be.js | 0 .../bower_components/moment/locale/bg.js | 0 .../bower_components/moment/locale/bn.js | 0 .../bower_components/moment/locale/bo.js | 0 .../bower_components/moment/locale/br.js | 0 .../bower_components/moment/locale/bs.js | 0 .../bower_components/moment/locale/ca.js | 0 .../bower_components/moment/locale/cs.js | 0 .../bower_components/moment/locale/cv.js | 0 .../bower_components/moment/locale/cy.js | 0 .../bower_components/moment/locale/da.js | 0 .../bower_components/moment/locale/de-at.js | 0 .../bower_components/moment/locale/de-ch.js | 0 .../bower_components/moment/locale/de.js | 0 .../bower_components/moment/locale/dv.js | 0 .../bower_components/moment/locale/el.js | 0 .../bower_components/moment/locale/en-au.js | 0 .../bower_components/moment/locale/en-ca.js | 0 .../bower_components/moment/locale/en-gb.js | 0 .../bower_components/moment/locale/en-ie.js | 0 .../bower_components/moment/locale/en-nz.js | 0 .../bower_components/moment/locale/eo.js | 0 .../bower_components/moment/locale/es-do.js | 0 .../bower_components/moment/locale/es.js | 0 .../bower_components/moment/locale/et.js | 0 .../bower_components/moment/locale/eu.js | 0 .../bower_components/moment/locale/fa.js | 0 .../bower_components/moment/locale/fi.js | 0 .../bower_components/moment/locale/fo.js | 0 .../bower_components/moment/locale/fr-ca.js | 0 .../bower_components/moment/locale/fr-ch.js | 0 .../bower_components/moment/locale/fr.js | 0 .../bower_components/moment/locale/fy.js | 0 .../bower_components/moment/locale/gd.js | 0 .../bower_components/moment/locale/gl.js | 0 .../moment/locale/gom-latn.js | 0 .../bower_components/moment/locale/he.js | 0 .../bower_components/moment/locale/hi.js | 0 .../bower_components/moment/locale/hr.js | 0 .../bower_components/moment/locale/hu.js | 0 .../bower_components/moment/locale/hy-am.js | 0 .../bower_components/moment/locale/id.js | 0 .../bower_components/moment/locale/is.js | 0 .../bower_components/moment/locale/it.js | 0 .../bower_components/moment/locale/ja.js | 0 .../bower_components/moment/locale/jv.js | 0 .../bower_components/moment/locale/ka.js | 0 .../bower_components/moment/locale/kk.js | 0 .../bower_components/moment/locale/km.js | 0 .../bower_components/moment/locale/kn.js | 0 .../bower_components/moment/locale/ko.js | 0 .../bower_components/moment/locale/ky.js | 0 .../bower_components/moment/locale/lb.js | 0 .../bower_components/moment/locale/lo.js | 0 .../bower_components/moment/locale/lt.js | 0 .../bower_components/moment/locale/lv.js | 0 .../bower_components/moment/locale/me.js | 0 .../bower_components/moment/locale/mi.js | 0 .../bower_components/moment/locale/mk.js | 0 .../bower_components/moment/locale/ml.js | 0 .../bower_components/moment/locale/mr.js | 0 .../bower_components/moment/locale/ms-my.js | 0 .../bower_components/moment/locale/ms.js | 0 .../bower_components/moment/locale/my.js | 0 .../bower_components/moment/locale/nb.js | 0 .../bower_components/moment/locale/ne.js | 0 .../bower_components/moment/locale/nl-be.js | 0 .../bower_components/moment/locale/nl.js | 0 .../bower_components/moment/locale/nn.js | 0 .../bower_components/moment/locale/pa-in.js | 0 .../bower_components/moment/locale/pl.js | 0 .../bower_components/moment/locale/pt-br.js | 0 .../bower_components/moment/locale/pt.js | 0 .../bower_components/moment/locale/ro.js | 0 .../bower_components/moment/locale/ru.js | 0 .../bower_components/moment/locale/sd.js | 0 .../bower_components/moment/locale/se.js | 0 .../bower_components/moment/locale/si.js | 0 .../bower_components/moment/locale/sk.js | 0 .../bower_components/moment/locale/sl.js | 0 .../bower_components/moment/locale/sq.js | 0 .../bower_components/moment/locale/sr-cyrl.js | 0 .../bower_components/moment/locale/sr.js | 0 .../bower_components/moment/locale/ss.js | 0 .../bower_components/moment/locale/sv.js | 0 .../bower_components/moment/locale/sw.js | 0 .../bower_components/moment/locale/ta.js | 0 .../bower_components/moment/locale/te.js | 0 .../bower_components/moment/locale/tet.js | 0 .../bower_components/moment/locale/th.js | 0 .../bower_components/moment/locale/tl-ph.js | 0 .../bower_components/moment/locale/tlh.js | 0 .../bower_components/moment/locale/tr.js | 0 .../bower_components/moment/locale/tzl.js | 0 .../moment/locale/tzm-latn.js | 0 .../bower_components/moment/locale/tzm.js | 0 .../bower_components/moment/locale/uk.js | 0 .../bower_components/moment/locale/ur.js | 0 .../bower_components/moment/locale/uz-latn.js | 0 .../bower_components/moment/locale/uz.js | 0 .../bower_components/moment/locale/vi.js | 0 .../moment/locale/x-pseudo.js | 0 .../bower_components/moment/locale/yo.js | 0 .../bower_components/moment/locale/zh-cn.js | 0 .../bower_components/moment/locale/zh-hk.js | 0 .../bower_components/moment/locale/zh-tw.js | 0 .../bower_components/moment/min/locales.js | 0 .../moment/min/locales.min.js | 0 .../moment/min/moment-with-locales.js | 0 .../moment/min/moment-with-locales.min.js | 0 .../bower_components/moment/min/moment.min.js | 0 .../bower_components/moment/min/tests.js | 0 .../bower_components/moment/moment.d.ts | 0 .../bower_components/moment/moment.js | 0 .../moment/src/lib/create/check-overflow.js | 0 .../moment/src/lib/create/date-from-array.js | 0 .../moment/src/lib/create/from-anything.js | 0 .../moment/src/lib/create/from-array.js | 0 .../moment/src/lib/create/from-object.js | 0 .../src/lib/create/from-string-and-array.js | 0 .../src/lib/create/from-string-and-format.js | 0 .../moment/src/lib/create/from-string.js | 0 .../moment/src/lib/create/local.js | 0 .../moment/src/lib/create/parsing-flags.js | 0 .../moment/src/lib/create/utc.js | 0 .../moment/src/lib/create/valid.js | 0 .../moment/src/lib/duration/abs.js | 0 .../moment/src/lib/duration/add-subtract.js | 0 .../moment/src/lib/duration/as.js | 0 .../moment/src/lib/duration/bubble.js | 0 .../moment/src/lib/duration/constructor.js | 0 .../moment/src/lib/duration/create.js | 0 .../moment/src/lib/duration/duration.js | 0 .../moment/src/lib/duration/get.js | 0 .../moment/src/lib/duration/humanize.js | 0 .../moment/src/lib/duration/iso-string.js | 0 .../moment/src/lib/duration/prototype.js | 0 .../moment/src/lib/duration/valid.js | 0 .../moment/src/lib/format/format.js | 0 .../moment/src/lib/locale/base-config.js | 0 .../moment/src/lib/locale/calendar.js | 0 .../moment/src/lib/locale/constructor.js | 0 .../moment/src/lib/locale/en.js | 0 .../moment/src/lib/locale/formats.js | 0 .../moment/src/lib/locale/invalid.js | 0 .../moment/src/lib/locale/lists.js | 0 .../moment/src/lib/locale/locale.js | 0 .../moment/src/lib/locale/locales.js | 0 .../moment/src/lib/locale/ordinal.js | 0 .../moment/src/lib/locale/pre-post-format.js | 0 .../moment/src/lib/locale/prototype.js | 0 .../moment/src/lib/locale/relative.js | 0 .../moment/src/lib/locale/set.js | 0 .../moment/src/lib/moment/add-subtract.js | 0 .../moment/src/lib/moment/calendar.js | 0 .../moment/src/lib/moment/clone.js | 0 .../moment/src/lib/moment/compare.js | 0 .../moment/src/lib/moment/constructor.js | 0 .../moment/src/lib/moment/creation-data.js | 0 .../moment/src/lib/moment/diff.js | 0 .../moment/src/lib/moment/format.js | 0 .../moment/src/lib/moment/from.js | 0 .../moment/src/lib/moment/get-set.js | 0 .../moment/src/lib/moment/locale.js | 0 .../moment/src/lib/moment/min-max.js | 0 .../moment/src/lib/moment/moment.js | 0 .../moment/src/lib/moment/now.js | 0 .../moment/src/lib/moment/prototype.js | 0 .../moment/src/lib/moment/start-end-of.js | 0 .../moment/src/lib/moment/to-type.js | 0 .../moment/src/lib/moment/to.js | 0 .../moment/src/lib/moment/valid.js | 0 .../moment/src/lib/parse/regex.js | 0 .../moment/src/lib/parse/token.js | 0 .../moment/src/lib/units/aliases.js | 0 .../moment/src/lib/units/constants.js | 0 .../moment/src/lib/units/day-of-month.js | 0 .../moment/src/lib/units/day-of-week.js | 0 .../moment/src/lib/units/day-of-year.js | 0 .../moment/src/lib/units/hour.js | 0 .../moment/src/lib/units/millisecond.js | 0 .../moment/src/lib/units/minute.js | 0 .../moment/src/lib/units/month.js | 0 .../moment/src/lib/units/offset.js | 0 .../moment/src/lib/units/priorities.js | 0 .../moment/src/lib/units/quarter.js | 0 .../moment/src/lib/units/second.js | 0 .../moment/src/lib/units/timestamp.js | 0 .../moment/src/lib/units/timezone.js | 0 .../moment/src/lib/units/units.js | 0 .../src/lib/units/week-calendar-utils.js | 0 .../moment/src/lib/units/week-year.js | 0 .../moment/src/lib/units/week.js | 0 .../moment/src/lib/units/year.js | 0 .../moment/src/lib/utils/abs-ceil.js | 0 .../moment/src/lib/utils/abs-floor.js | 0 .../moment/src/lib/utils/abs-round.js | 0 .../moment/src/lib/utils/compare-arrays.js | 0 .../moment/src/lib/utils/defaults.js | 0 .../moment/src/lib/utils/deprecate.js | 0 .../moment/src/lib/utils/extend.js | 0 .../moment/src/lib/utils/has-own-prop.js | 0 .../moment/src/lib/utils/hooks.js | 0 .../moment/src/lib/utils/index-of.js | 0 .../moment/src/lib/utils/is-array.js | 0 .../moment/src/lib/utils/is-date.js | 0 .../moment/src/lib/utils/is-function.js | 0 .../moment/src/lib/utils/is-number.js | 0 .../moment/src/lib/utils/is-object-empty.js | 0 .../moment/src/lib/utils/is-object.js | 0 .../moment/src/lib/utils/is-undefined.js | 0 .../moment/src/lib/utils/keys.js | 0 .../moment/src/lib/utils/map.js | 0 .../moment/src/lib/utils/some.js | 0 .../moment/src/lib/utils/to-int.js | 0 .../moment/src/lib/utils/zero-fill.js | 0 .../bower_components/moment/src/locale/af.js | 0 .../moment/src/locale/ar-dz.js | 0 .../moment/src/locale/ar-kw.js | 0 .../moment/src/locale/ar-ly.js | 0 .../moment/src/locale/ar-ma.js | 0 .../moment/src/locale/ar-sa.js | 0 .../moment/src/locale/ar-tn.js | 0 .../bower_components/moment/src/locale/ar.js | 0 .../bower_components/moment/src/locale/az.js | 0 .../bower_components/moment/src/locale/be.js | 0 .../bower_components/moment/src/locale/bg.js | 0 .../bower_components/moment/src/locale/bn.js | 0 .../bower_components/moment/src/locale/bo.js | 0 .../bower_components/moment/src/locale/br.js | 0 .../bower_components/moment/src/locale/bs.js | 0 .../bower_components/moment/src/locale/ca.js | 0 .../bower_components/moment/src/locale/cs.js | 0 .../bower_components/moment/src/locale/cv.js | 0 .../bower_components/moment/src/locale/cy.js | 0 .../bower_components/moment/src/locale/da.js | 0 .../moment/src/locale/de-at.js | 0 .../moment/src/locale/de-ch.js | 0 .../bower_components/moment/src/locale/de.js | 0 .../bower_components/moment/src/locale/dv.js | 0 .../bower_components/moment/src/locale/el.js | 0 .../moment/src/locale/en-au.js | 0 .../moment/src/locale/en-ca.js | 0 .../moment/src/locale/en-gb.js | 0 .../moment/src/locale/en-ie.js | 0 .../moment/src/locale/en-nz.js | 0 .../bower_components/moment/src/locale/eo.js | 0 .../moment/src/locale/es-do.js | 0 .../bower_components/moment/src/locale/es.js | 0 .../bower_components/moment/src/locale/et.js | 0 .../bower_components/moment/src/locale/eu.js | 0 .../bower_components/moment/src/locale/fa.js | 0 .../bower_components/moment/src/locale/fi.js | 0 .../bower_components/moment/src/locale/fo.js | 0 .../moment/src/locale/fr-ca.js | 0 .../moment/src/locale/fr-ch.js | 0 .../bower_components/moment/src/locale/fr.js | 0 .../bower_components/moment/src/locale/fy.js | 0 .../bower_components/moment/src/locale/gd.js | 0 .../bower_components/moment/src/locale/gl.js | 0 .../moment/src/locale/gom-latn.js | 0 .../bower_components/moment/src/locale/he.js | 0 .../bower_components/moment/src/locale/hi.js | 0 .../bower_components/moment/src/locale/hr.js | 0 .../bower_components/moment/src/locale/hu.js | 0 .../moment/src/locale/hy-am.js | 0 .../bower_components/moment/src/locale/id.js | 0 .../bower_components/moment/src/locale/is.js | 0 .../bower_components/moment/src/locale/it.js | 0 .../bower_components/moment/src/locale/ja.js | 0 .../bower_components/moment/src/locale/jv.js | 0 .../bower_components/moment/src/locale/ka.js | 0 .../bower_components/moment/src/locale/kk.js | 0 .../bower_components/moment/src/locale/km.js | 0 .../bower_components/moment/src/locale/kn.js | 0 .../bower_components/moment/src/locale/ko.js | 0 .../bower_components/moment/src/locale/ky.js | 0 .../bower_components/moment/src/locale/lb.js | 0 .../bower_components/moment/src/locale/lo.js | 0 .../bower_components/moment/src/locale/lt.js | 0 .../bower_components/moment/src/locale/lv.js | 0 .../bower_components/moment/src/locale/me.js | 0 .../bower_components/moment/src/locale/mi.js | 0 .../bower_components/moment/src/locale/mk.js | 0 .../bower_components/moment/src/locale/ml.js | 0 .../bower_components/moment/src/locale/mr.js | 0 .../moment/src/locale/ms-my.js | 0 .../bower_components/moment/src/locale/ms.js | 0 .../bower_components/moment/src/locale/my.js | 0 .../bower_components/moment/src/locale/nb.js | 0 .../bower_components/moment/src/locale/ne.js | 0 .../moment/src/locale/nl-be.js | 0 .../bower_components/moment/src/locale/nl.js | 0 .../bower_components/moment/src/locale/nn.js | 0 .../moment/src/locale/pa-in.js | 0 .../bower_components/moment/src/locale/pl.js | 0 .../moment/src/locale/pt-br.js | 0 .../bower_components/moment/src/locale/pt.js | 0 .../bower_components/moment/src/locale/ro.js | 0 .../bower_components/moment/src/locale/ru.js | 0 .../bower_components/moment/src/locale/sd.js | 0 .../bower_components/moment/src/locale/se.js | 0 .../bower_components/moment/src/locale/si.js | 0 .../bower_components/moment/src/locale/sk.js | 0 .../bower_components/moment/src/locale/sl.js | 0 .../bower_components/moment/src/locale/sq.js | 0 .../moment/src/locale/sr-cyrl.js | 0 .../bower_components/moment/src/locale/sr.js | 0 .../bower_components/moment/src/locale/ss.js | 0 .../bower_components/moment/src/locale/sv.js | 0 .../bower_components/moment/src/locale/sw.js | 0 .../bower_components/moment/src/locale/ta.js | 0 .../bower_components/moment/src/locale/te.js | 0 .../bower_components/moment/src/locale/tet.js | 0 .../bower_components/moment/src/locale/th.js | 0 .../moment/src/locale/tl-ph.js | 0 .../bower_components/moment/src/locale/tlh.js | 0 .../bower_components/moment/src/locale/tr.js | 0 .../bower_components/moment/src/locale/tzl.js | 0 .../moment/src/locale/tzm-latn.js | 0 .../bower_components/moment/src/locale/tzm.js | 0 .../bower_components/moment/src/locale/uk.js | 0 .../bower_components/moment/src/locale/ur.js | 0 .../moment/src/locale/uz-latn.js | 0 .../bower_components/moment/src/locale/uz.js | 0 .../bower_components/moment/src/locale/vi.js | 0 .../moment/src/locale/x-pseudo.js | 0 .../bower_components/moment/src/locale/yo.js | 0 .../moment/src/locale/zh-cn.js | 0 .../moment/src/locale/zh-hk.js | 0 .../moment/src/locale/zh-tw.js | 0 .../bower_components/moment/src/moment.js | 0 .../moment/templates/default.js | 0 .../moment/templates/locale-header.js | 0 .../moment/templates/test-header.js | 0 .../bower_components/morris.js/.bower.json | 0 .../bower_components/morris.js/.gitignore | 0 .../bower_components/morris.js/.travis.yml | 0 .../bower_components/morris.js/Gruntfile.js | 0 .../bower_components/morris.js/README.md | 0 .../bower_components/morris.js/bower.json | 0 .../morris.js/bower.travis.json | 0 .../morris.js/examples/_template.html | 0 .../morris.js/examples/area-as-line.html | 0 .../morris.js/examples/area.html | 0 .../morris.js/examples/bar-colors.html | 0 .../morris.js/examples/bar-no-axes.html | 0 .../morris.js/examples/bar.html | 0 .../morris.js/examples/days.html | 0 .../examples/decimal-custom-hover.html | 0 .../examples/diagonal-xlabels-bar.html | 0 .../morris.js/examples/diagonal-xlabels.html | 0 .../morris.js/examples/donut-colors.html | 0 .../morris.js/examples/donut-formatter.html | 0 .../morris.js/examples/donut.html | 0 .../morris.js/examples/dst.html | 0 .../morris.js/examples/events.html | 0 .../morris.js/examples/goals.html | 0 .../morris.js/examples/lib/example.css | 0 .../morris.js/examples/lib/example.js | 0 .../morris.js/examples/months-no-smooth.html | 0 .../morris.js/examples/negative.html | 0 .../morris.js/examples/no-grid.html | 0 .../morris.js/examples/non-continuous.html | 0 .../morris.js/examples/non-date.html | 0 .../morris.js/examples/quarters.html | 0 .../morris.js/examples/resize.html | 0 .../morris.js/examples/stacked_bars.html | 0 .../morris.js/examples/timestamps.html | 0 .../morris.js/examples/updating.html | 0 .../morris.js/examples/weeks.html | 0 .../morris.js/examples/years.html | 0 .../morris.js/less/morris.core.less | 0 .../morris.js/lib/morris.area.coffee | 0 .../morris.js/lib/morris.bar.coffee | 0 .../morris.js/lib/morris.coffee | 0 .../morris.js/lib/morris.donut.coffee | 0 .../morris.js/lib/morris.grid.coffee | 0 .../morris.js/lib/morris.hover.coffee | 0 .../morris.js/lib/morris.line.coffee | 0 .../bower_components/morris.js/morris.css | 0 .../bower_components/morris.js/morris.js | 0 .../bower_components/morris.js/morris.min.js | 0 .../bower_components/morris.js/package.json | 0 .../morris.js/spec/lib/area/area_spec.coffee | 0 .../morris.js/spec/lib/bar/bar_spec.coffee | 0 .../morris.js/spec/lib/bar/colours.coffee | 0 .../morris.js/spec/lib/commas_spec.coffee | 0 .../spec/lib/donut/donut_spec.coffee | 0 .../spec/lib/grid/auto_grid_lines_spec.coffee | 0 .../spec/lib/grid/set_data_spec.coffee | 0 .../spec/lib/grid/y_label_format_spec.coffee | 0 .../morris.js/spec/lib/hover_spec.coffee | 0 .../spec/lib/label_series_spec.coffee | 0 .../morris.js/spec/lib/line/line_spec.coffee | 0 .../morris.js/spec/lib/pad_spec.coffee | 0 .../morris.js/spec/lib/parse_time_spec.coffee | 0 .../morris.js/spec/specs.html | 0 .../morris.js/spec/support/placeholder.coffee | 0 .../morris.js/spec/viz/examples.js | 0 .../morris.js/spec/viz/exemplary/area0.png | Bin .../morris.js/spec/viz/exemplary/bar0.png | Bin .../morris.js/spec/viz/exemplary/line0.png | Bin .../spec/viz/exemplary/stacked_bar0.png | Bin .../morris.js/spec/viz/run.sh | 0 .../morris.js/spec/viz/visual_specs.js | 0 .../bower_components/raphael/.bower.json | 0 .../bower_components/raphael/bower.json | 0 .../bower_components/raphael/dev/banner.txt | 0 .../raphael/dev/raphael.amd.js | 0 .../raphael/dev/raphael.core.js | 0 .../raphael/dev/raphael.svg.js | 0 .../raphael/dev/raphael.vml.js | 0 .../raphael/dev/test/svg/dom.js | 0 .../raphael/dev/test/vml/dom.js | 0 .../bower_components/raphael/license.txt | 0 .../bower_components/raphael/raphael.js | 0 .../bower_components/raphael/raphael.min.js | 0 .../raphael/raphael.no-deps.js | 0 .../raphael/raphael.no-deps.min.js | 0 .../raphael/webpack.config.js | 0 .../bower_components/raphael/yarn.lock | 0 .../bower_components/select2/.bower.json | 0 .../bower_components/select2/.editorconfig | 0 .../select2/.github/CONTRIBUTING.md | 0 .../select2/.github/ISSUE_TEMPLATE.md | 0 .../select2/.github/PULL_REQUEST_TEMPLATE.md | 0 .../bower_components/select2/.gitignore | 0 .../bower_components/select2/.jshintignore | 0 .../bower_components/select2/.jshintrc | 0 .../bower_components/select2/.travis.yml | 0 .../bower_components/select2/CHANGELOG.md | 0 .../bower_components/select2/Gruntfile.js | 0 .../bower_components/select2/LICENSE.md | 0 .../bower_components/select2/README.md | 0 .../bower_components/select2/bower.json | 0 .../bower_components/select2/component.json | 0 .../bower_components/select2/composer.json | 0 .../select2/dist/css/select2.css | 0 .../select2/dist/css/select2.min.css | 0 .../select2/dist/js/i18n/ar.js | 0 .../select2/dist/js/i18n/az.js | 0 .../select2/dist/js/i18n/bg.js | 0 .../select2/dist/js/i18n/ca.js | 0 .../select2/dist/js/i18n/cs.js | 0 .../select2/dist/js/i18n/da.js | 0 .../select2/dist/js/i18n/de.js | 0 .../select2/dist/js/i18n/el.js | 0 .../select2/dist/js/i18n/en.js | 0 .../select2/dist/js/i18n/es.js | 0 .../select2/dist/js/i18n/et.js | 0 .../select2/dist/js/i18n/eu.js | 0 .../select2/dist/js/i18n/fa.js | 0 .../select2/dist/js/i18n/fi.js | 0 .../select2/dist/js/i18n/fr.js | 0 .../select2/dist/js/i18n/gl.js | 0 .../select2/dist/js/i18n/he.js | 0 .../select2/dist/js/i18n/hi.js | 0 .../select2/dist/js/i18n/hr.js | 0 .../select2/dist/js/i18n/hu.js | 0 .../select2/dist/js/i18n/hy.js | 0 .../select2/dist/js/i18n/id.js | 0 .../select2/dist/js/i18n/is.js | 0 .../select2/dist/js/i18n/it.js | 0 .../select2/dist/js/i18n/ja.js | 0 .../select2/dist/js/i18n/km.js | 0 .../select2/dist/js/i18n/ko.js | 0 .../select2/dist/js/i18n/lt.js | 0 .../select2/dist/js/i18n/lv.js | 0 .../select2/dist/js/i18n/mk.js | 0 .../select2/dist/js/i18n/ms.js | 0 .../select2/dist/js/i18n/nb.js | 0 .../select2/dist/js/i18n/nl.js | 0 .../select2/dist/js/i18n/pl.js | 0 .../select2/dist/js/i18n/pt-BR.js | 0 .../select2/dist/js/i18n/pt.js | 0 .../select2/dist/js/i18n/ro.js | 0 .../select2/dist/js/i18n/ru.js | 0 .../select2/dist/js/i18n/sk.js | 0 .../select2/dist/js/i18n/sl.js | 0 .../select2/dist/js/i18n/sr-Cyrl.js | 0 .../select2/dist/js/i18n/sr.js | 0 .../select2/dist/js/i18n/sv.js | 0 .../select2/dist/js/i18n/th.js | 0 .../select2/dist/js/i18n/tr.js | 0 .../select2/dist/js/i18n/uk.js | 0 .../select2/dist/js/i18n/vi.js | 0 .../select2/dist/js/i18n/zh-CN.js | 0 .../select2/dist/js/i18n/zh-TW.js | 0 .../select2/dist/js/select2.full.js | 0 .../select2/dist/js/select2.full.min.js | 0 .../select2/dist/js/select2.js | 0 .../select2/dist/js/select2.min.js | 0 .../bower_components/select2/docs/README.md | 0 .../select2/docs/announcements-4.0.html | 0 .../select2/docs/community.html | 0 .../select2/docs/examples.html | 0 .../bower_components/select2/docs/index.html | 0 .../select2/docs/options-old.html | 0 .../select2/docs/options.html | 0 .../bower_components/select2/package.json | 0 .../select2/select2.jquery.json | 0 .../select2/src/js/banner.end.js | 0 .../select2/src/js/banner.start.js | 0 .../select2/src/js/jquery.mousewheel.shim.js | 0 .../select2/src/js/jquery.select2.js | 0 .../select2/src/js/jquery.shim.js | 0 .../src/js/select2/compat/containerCss.js | 0 .../src/js/select2/compat/dropdownCss.js | 0 .../src/js/select2/compat/initSelection.js | 0 .../src/js/select2/compat/inputData.js | 0 .../select2/src/js/select2/compat/matcher.js | 0 .../select2/src/js/select2/compat/query.js | 0 .../select2/src/js/select2/compat/utils.js | 0 .../select2/src/js/select2/core.js | 0 .../select2/src/js/select2/data/ajax.js | 0 .../select2/src/js/select2/data/array.js | 0 .../select2/src/js/select2/data/base.js | 0 .../src/js/select2/data/maximumInputLength.js | 0 .../js/select2/data/maximumSelectionLength.js | 0 .../src/js/select2/data/minimumInputLength.js | 0 .../select2/src/js/select2/data/select.js | 0 .../select2/src/js/select2/data/tags.js | 0 .../select2/src/js/select2/data/tokenizer.js | 0 .../select2/src/js/select2/defaults.js | 0 .../select2/src/js/select2/diacritics.js | 0 .../select2/src/js/select2/dropdown.js | 0 .../src/js/select2/dropdown/attachBody.js | 0 .../js/select2/dropdown/attachContainer.js | 0 .../src/js/select2/dropdown/closeOnSelect.js | 0 .../js/select2/dropdown/hidePlaceholder.js | 0 .../src/js/select2/dropdown/infiniteScroll.js | 0 .../dropdown/minimumResultsForSearch.js | 0 .../select2/src/js/select2/dropdown/search.js | 0 .../src/js/select2/dropdown/selectOnClose.js | 0 .../js/select2/dropdown/stopPropagation.js | 0 .../select2/src/js/select2/i18n/ar.js | 0 .../select2/src/js/select2/i18n/az.js | 0 .../select2/src/js/select2/i18n/bg.js | 0 .../select2/src/js/select2/i18n/ca.js | 0 .../select2/src/js/select2/i18n/cs.js | 0 .../select2/src/js/select2/i18n/da.js | 0 .../select2/src/js/select2/i18n/de.js | 0 .../select2/src/js/select2/i18n/el.js | 0 .../select2/src/js/select2/i18n/en.js | 0 .../select2/src/js/select2/i18n/es.js | 0 .../select2/src/js/select2/i18n/et.js | 0 .../select2/src/js/select2/i18n/eu.js | 0 .../select2/src/js/select2/i18n/fa.js | 0 .../select2/src/js/select2/i18n/fi.js | 0 .../select2/src/js/select2/i18n/fr.js | 0 .../select2/src/js/select2/i18n/gl.js | 0 .../select2/src/js/select2/i18n/he.js | 0 .../select2/src/js/select2/i18n/hi.js | 0 .../select2/src/js/select2/i18n/hr.js | 0 .../select2/src/js/select2/i18n/hu.js | 0 .../select2/src/js/select2/i18n/hy.js | 0 .../select2/src/js/select2/i18n/id.js | 0 .../select2/src/js/select2/i18n/is.js | 0 .../select2/src/js/select2/i18n/it.js | 0 .../select2/src/js/select2/i18n/ja.js | 0 .../select2/src/js/select2/i18n/km.js | 0 .../select2/src/js/select2/i18n/ko.js | 0 .../select2/src/js/select2/i18n/lt.js | 0 .../select2/src/js/select2/i18n/lv.js | 0 .../select2/src/js/select2/i18n/mk.js | 0 .../select2/src/js/select2/i18n/ms.js | 0 .../select2/src/js/select2/i18n/nb.js | 0 .../select2/src/js/select2/i18n/nl.js | 0 .../select2/src/js/select2/i18n/pl.js | 0 .../select2/src/js/select2/i18n/pt-BR.js | 0 .../select2/src/js/select2/i18n/pt.js | 0 .../select2/src/js/select2/i18n/ro.js | 0 .../select2/src/js/select2/i18n/ru.js | 0 .../select2/src/js/select2/i18n/sk.js | 0 .../select2/src/js/select2/i18n/sl.js | 0 .../select2/src/js/select2/i18n/sr-Cyrl.js | 0 .../select2/src/js/select2/i18n/sr.js | 0 .../select2/src/js/select2/i18n/sv.js | 0 .../select2/src/js/select2/i18n/th.js | 0 .../select2/src/js/select2/i18n/tr.js | 0 .../select2/src/js/select2/i18n/uk.js | 0 .../select2/src/js/select2/i18n/vi.js | 0 .../select2/src/js/select2/i18n/zh-CN.js | 0 .../select2/src/js/select2/i18n/zh-TW.js | 0 .../select2/src/js/select2/keys.js | 0 .../select2/src/js/select2/options.js | 0 .../select2/src/js/select2/results.js | 0 .../src/js/select2/selection/allowClear.js | 0 .../select2/src/js/select2/selection/base.js | 0 .../src/js/select2/selection/clickMask.js | 0 .../src/js/select2/selection/eventRelay.js | 0 .../src/js/select2/selection/multiple.js | 0 .../src/js/select2/selection/placeholder.js | 0 .../src/js/select2/selection/search.js | 0 .../src/js/select2/selection/single.js | 0 .../js/select2/selection/stopPropagation.js | 0 .../select2/src/js/select2/translation.js | 0 .../select2/src/js/select2/utils.js | 0 .../select2/src/js/wrapper.end.js | 0 .../select2/src/js/wrapper.start.js | 0 .../select2/src/scss/_dropdown.scss | 0 .../select2/src/scss/_multiple.scss | 0 .../select2/src/scss/_single.scss | 0 .../select2/src/scss/core.scss | 0 .../select2/src/scss/mixins/_gradients.scss | 0 .../src/scss/theme/classic/_defaults.scss | 0 .../src/scss/theme/classic/_multiple.scss | 0 .../src/scss/theme/classic/_single.scss | 0 .../src/scss/theme/classic/layout.scss | 0 .../src/scss/theme/default/_multiple.scss | 0 .../src/scss/theme/default/_single.scss | 0 .../src/scss/theme/default/layout.scss | 0 .../select2/tests/a11y/search-tests.js | 0 .../select2/tests/a11y/selection-tests.js | 0 .../select2/tests/data/array-tests.js | 0 .../select2/tests/data/base-tests.js | 0 .../select2/tests/data/inputData-tests.js | 0 .../tests/data/maximumInputLength-tests.js | 0 .../data/maximumSelectionLength-tests.js | 0 .../tests/data/minimumInputLength-tests.js | 0 .../select2/tests/data/select-tests.js | 0 .../select2/tests/data/tags-tests.js | 0 .../select2/tests/data/tokenizer-tests.js | 0 .../tests/dropdown/dropdownCss-tests.js | 0 .../tests/dropdown/positioning-tests.js | 0 .../tests/dropdown/selectOnClose-tests.js | 0 .../tests/dropdown/stopPropagation-tests.js | 0 .../bower_components/select2/tests/helpers.js | 0 .../select2/tests/integration.html | 0 .../select2/tests/integration/dom-changes.js | 0 .../select2/tests/integration/jquery-calls.js | 0 .../tests/integration/select2-methods.js | 0 .../select2/tests/options/ajax-tests.js | 0 .../select2/tests/options/data-tests.js | 0 .../select2/tests/options/deprecated-tests.js | 0 .../tests/options/translation-tests.js | 0 .../select2/tests/options/width-tests.js | 0 .../select2/tests/results/focusing-tests.js | 0 .../tests/selection/allowClear-tests.js | 0 .../tests/selection/containerCss-tests.js | 0 .../select2/tests/selection/multiple-tests.js | 0 .../tests/selection/placeholder-tests.js | 0 .../select2/tests/selection/search-tests.js | 0 .../select2/tests/selection/single-tests.js | 0 .../tests/selection/stopPropagation-tests.js | 0 .../bower_components/select2/tests/unit.html | 0 .../select2/tests/utils/decorator-tests.js | 0 .../select2/tests/utils/escapeMarkup-tests.js | 0 .../select2/tests/vendor/jquery-1.7.2.js | 0 .../select2/tests/vendor/qunit-1.23.1.css | 0 .../select2/tests/vendor/qunit-1.23.1.js | 0 .../select2/vendor/jquery-2.1.0.js | 0 .../build/bootstrap-less/.csscomb.json | 0 .../build/bootstrap-less/.csslintrc | 0 .../build/bootstrap-less/alerts.less | 0 .../build/bootstrap-less/badges.less | 0 .../build/bootstrap-less/bootstrap.less | 0 .../build/bootstrap-less/breadcrumbs.less | 0 .../build/bootstrap-less/button-groups.less | 0 .../build/bootstrap-less/buttons.less | 0 .../build/bootstrap-less/carousel.less | 0 .../build/bootstrap-less/close.less | 0 .../build/bootstrap-less/code.less | 0 .../bootstrap-less/component-animations.less | 0 .../build/bootstrap-less/dropdowns.less | 0 .../build/bootstrap-less/forms.less | 0 .../build/bootstrap-less/glyphicons.less | 0 .../build/bootstrap-less/grid.less | 0 .../build/bootstrap-less/input-groups.less | 0 .../build/bootstrap-less/jumbotron.less | 0 .../build/bootstrap-less/labels.less | 0 .../build/bootstrap-less/list-group.less | 0 .../build/bootstrap-less/media.less | 0 .../build/bootstrap-less/mixins.less | 0 .../build/bootstrap-less/mixins/alerts.less | 0 .../mixins/background-variant.less | 0 .../bootstrap-less/mixins/border-radius.less | 0 .../build/bootstrap-less/mixins/buttons.less | 0 .../bootstrap-less/mixins/center-block.less | 0 .../build/bootstrap-less/mixins/clearfix.less | 0 .../build/bootstrap-less/mixins/forms.less | 0 .../bootstrap-less/mixins/gradients.less | 0 .../bootstrap-less/mixins/grid-framework.less | 0 .../build/bootstrap-less/mixins/grid.less | 0 .../bootstrap-less/mixins/hide-text.less | 0 .../build/bootstrap-less/mixins/image.less | 0 .../build/bootstrap-less/mixins/labels.less | 0 .../bootstrap-less/mixins/list-group.less | 0 .../bootstrap-less/mixins/nav-divider.less | 0 .../mixins/nav-vertical-align.less | 0 .../build/bootstrap-less/mixins/opacity.less | 0 .../bootstrap-less/mixins/pagination.less | 0 .../build/bootstrap-less/mixins/panels.less | 0 .../bootstrap-less/mixins/progress-bar.less | 0 .../bootstrap-less/mixins/reset-filter.less | 0 .../bootstrap-less/mixins/reset-text.less | 0 .../build/bootstrap-less/mixins/resize.less | 0 .../mixins/responsive-visibility.less | 0 .../build/bootstrap-less/mixins/size.less | 0 .../bootstrap-less/mixins/tab-focus.less | 0 .../bootstrap-less/mixins/table-row.less | 0 .../bootstrap-less/mixins/text-emphasis.less | 0 .../bootstrap-less/mixins/text-overflow.less | 0 .../mixins/vendor-prefixes.less | 0 .../build/bootstrap-less/modals.less | 0 .../build/bootstrap-less/navbar.less | 0 .../build/bootstrap-less/navs.less | 0 .../build/bootstrap-less/normalize.less | 0 .../build/bootstrap-less/pager.less | 0 .../build/bootstrap-less/pagination.less | 0 .../build/bootstrap-less/panels.less | 0 .../build/bootstrap-less/popovers.less | 0 .../build/bootstrap-less/print.less | 0 .../build/bootstrap-less/progress-bars.less | 0 .../bootstrap-less/responsive-embed.less | 0 .../bootstrap-less/responsive-utilities.less | 0 .../build/bootstrap-less/scaffolding.less | 0 .../build/bootstrap-less/tables.less | 0 .../build/bootstrap-less/theme.less | 0 .../build/bootstrap-less/thumbnails.less | 0 .../build/bootstrap-less/tooltip.less | 0 .../build/bootstrap-less/type.less | 0 .../build/bootstrap-less/utilities.less | 0 .../build/bootstrap-less/variables.less | 0 .../build/bootstrap-less/wells.less | 0 .../assets => assets}/build/grunt/.jshintrc | 0 {public/assets => assets}/build/js/.jscsrc | 0 {public/assets => assets}/build/js/.jshintrc | 0 .../assets => assets}/build/js/BoxRefresh.js | 0 .../assets => assets}/build/js/BoxWidget.js | 0 .../build/js/ControlSidebar.js | 0 .../assets => assets}/build/js/DirectChat.js | 0 {public/assets => assets}/build/js/Layout.js | 0 .../assets => assets}/build/js/PushMenu.js | 0 .../assets => assets}/build/js/TodoList.js | 0 {public/assets => assets}/build/js/Tree.js | 0 .../assets => assets}/build/less/.csslintrc | 0 .../build/less/404_500_errors.less | 0 .../build/less/AdminLTE-without-plugins.less | 0 .../build/less/AdminLTE.less | 0 .../assets => assets}/build/less/alerts.less | 0 .../build/less/bootstrap-social.less | 0 .../assets => assets}/build/less/boxes.less | 0 .../assets => assets}/build/less/buttons.less | 0 .../assets => assets}/build/less/callout.less | 0 .../build/less/carousel.less | 0 .../build/less/control-sidebar.less | 0 .../assets => assets}/build/less/core.less | 0 .../build/less/datepicker.less | 0 .../build/less/direct-chat.less | 0 .../build/less/dropdown.less | 0 .../assets => assets}/build/less/forms.less | 0 .../build/less/fullcalendar.less | 0 .../assets => assets}/build/less/header.less | 0 .../build/less/info-box.less | 0 .../assets => assets}/build/less/invoice.less | 0 .../assets => assets}/build/less/labels.less | 0 .../build/less/lockscreen.less | 0 .../build/less/login_and_register.less | 0 .../assets => assets}/build/less/mailbox.less | 0 .../build/less/miscellaneous.less | 0 .../assets => assets}/build/less/mixins.less | 0 .../assets => assets}/build/less/modal.less | 0 .../assets => assets}/build/less/navs.less | 0 .../assets => assets}/build/less/plugins.less | 0 .../assets => assets}/build/less/print.less | 0 .../build/less/products.less | 0 .../assets => assets}/build/less/profile.less | 0 .../build/less/progress-bars.less | 0 .../assets => assets}/build/less/select2.less | 0 .../build/less/sidebar-mini.less | 0 .../assets => assets}/build/less/sidebar.less | 0 .../build/less/skins/_all-skins.less | 0 .../build/less/skins/skin-black-light.less | 0 .../build/less/skins/skin-black.less | 0 .../build/less/skins/skin-blue-light.less | 0 .../build/less/skins/skin-blue.less | 0 .../build/less/skins/skin-green-light.less | 0 .../build/less/skins/skin-green.less | 0 .../build/less/skins/skin-purple-light.less | 0 .../build/less/skins/skin-purple.less | 0 .../build/less/skins/skin-red-light.less | 0 .../build/less/skins/skin-red.less | 0 .../build/less/skins/skin-yellow-light.less | 0 .../build/less/skins/skin-yellow.less | 0 .../build/less/small-box.less | 0 .../build/less/social-widgets.less | 0 .../assets => assets}/build/less/table.less | 0 .../build/less/timeline.less | 0 .../build/less/treeview.less | 0 .../build/less/users-list.less | 0 .../build/less/variables.less | 0 {public/assets => assets}/dist/.DS_Store | Bin .../assets => assets}/dist/css/AdminLTE.css | 0 .../dist/css/AdminLTE.min.css | 0 .../dist/css/adminlte.css.map | 0 .../dist/css/adminlte.min.css.map | 0 .../css/alt/AdminLTE-bootstrap-social.css | 0 .../css/alt/AdminLTE-bootstrap-social.min.css | 0 .../dist/css/alt/AdminLTE-fullcalendar.css | 0 .../css/alt/AdminLTE-fullcalendar.min.css | 0 .../dist/css/alt/AdminLTE-select2.css | 0 .../dist/css/alt/AdminLTE-select2.min.css | 0 .../dist/css/alt/AdminLTE-without-plugins.css | 0 .../css/alt/AdminLTE-without-plugins.min.css | 0 .../dist/css/skins/_all-skins.css | 0 .../dist/css/skins/_all-skins.min.css | 0 .../dist/css/skins/skin-black-light.css | 0 .../dist/css/skins/skin-black-light.min.css | 0 .../dist/css/skins/skin-black.css | 0 .../dist/css/skins/skin-black.min.css | 0 .../dist/css/skins/skin-blue-light.css | 0 .../dist/css/skins/skin-blue-light.min.css | 0 .../dist/css/skins/skin-blue.css | 0 .../dist/css/skins/skin-blue.min.css | 0 .../dist/css/skins/skin-green-light.css | 0 .../dist/css/skins/skin-green-light.min.css | 0 .../dist/css/skins/skin-green.css | 0 .../dist/css/skins/skin-green.min.css | 0 .../dist/css/skins/skin-purple-light.css | 0 .../dist/css/skins/skin-purple-light.min.css | 0 .../dist/css/skins/skin-purple.css | 0 .../dist/css/skins/skin-purple.min.css | 0 .../dist/css/skins/skin-red-light.css | 0 .../dist/css/skins/skin-red-light.min.css | 0 .../dist/css/skins/skin-red.css | 0 .../dist/css/skins/skin-red.min.css | 0 .../dist/css/skins/skin-yellow-light.css | 0 .../dist/css/skins/skin-yellow-light.min.css | 0 .../dist/css/skins/skin-yellow.css | 0 .../dist/css/skins/skin-yellow.min.css | 0 {public/assets => assets}/dist/img/avatar.png | Bin .../assets => assets}/dist/img/avatar04.png | Bin .../assets => assets}/dist/img/avatar2.png | Bin .../assets => assets}/dist/img/avatar3.png | Bin .../assets => assets}/dist/img/avatar5.png | Bin .../assets => assets}/dist/img/boxed-bg.jpg | Bin .../assets => assets}/dist/img/boxed-bg.png | Bin .../dist/img/credit/american-express.png | Bin .../dist/img/credit/cirrus.png | Bin .../dist/img/credit/mastercard.png | Bin .../dist/img/credit/mestro.png | Bin .../dist/img/credit/paypal.png | Bin .../dist/img/credit/paypal2.png | Bin .../dist/img/credit/visa.png | Bin .../dist/img/default-50x50.gif | Bin {public/assets => assets}/dist/img/icons.png | Bin {public/assets => assets}/dist/img/photo1.png | Bin {public/assets => assets}/dist/img/photo2.png | Bin {public/assets => assets}/dist/img/photo3.jpg | Bin {public/assets => assets}/dist/img/photo4.jpg | Bin .../dist/img/user1-128x128.jpg | Bin .../dist/img/user2-160x160.jpg | Bin .../dist/img/user3-128x128.jpg | Bin .../dist/img/user4-128x128.jpg | Bin .../dist/img/user5-128x128.jpg | Bin .../dist/img/user6-128x128.jpg | Bin .../dist/img/user7-128x128.jpg | Bin .../dist/img/user8-128x128.jpg | Bin {public/assets => assets}/dist/js/adminlte.js | 0 .../assets => assets}/dist/js/adminlte.min.js | 0 {public/assets => assets}/dist/js/demo.js | 0 .../dist/js/pages/dashboard.js | 0 .../dist/js/pages/dashboard2.js | 0 .../images/product_image/5a86a444a5f73.jpg | Bin .../images/product_image/5a86b2fda0108.jpg | Bin .../images/product_image/5a86b3b05b913.jpg | Bin .../images/product_image/5a86b3f4bef00.jpg | Bin .../images/product_image/5a86b434cd4ff.jpg | Bin .../images/product_image/5a86b44ac4001.jpg | Bin .../images/product_image/5a86b471b2dd1.jpg | Bin .../images/product_image/5a86b4a495be7.jpg | Bin .../images/product_image/5a87f3369adc6.jpg | Bin .../images/product_image/5a87f33b663c4.jpg | Bin .../images/product_image/5a87f387955d1.jpg | Bin .../images/product_image/5a8d7b2b9c623.jpg | Bin .../images/screenshots/dashboard.PNG | Bin .../images/screenshots/database.PNG | Bin .../images/screenshots/login.PNG | Bin .../bootstrap-slider/bootstrap-slider.js | 0 .../plugins/bootstrap-slider/slider.css | 0 .../bootstrap3-wysihtml5.all.js | 0 .../bootstrap3-wysihtml5.all.min.js | 0 .../bootstrap3-wysihtml5.css | 0 .../bootstrap3-wysihtml5.min.css | 0 .../plugins/fileinput/fileinput.min.css | 0 .../plugins/fileinput/fileinput.min.js | 0 .../assets => assets}/plugins/iCheck/all.css | 0 .../plugins/iCheck/flat/_all.css | 0 .../plugins/iCheck/flat/aero.css | 0 .../plugins/iCheck/flat/aero.png | Bin .../plugins/iCheck/flat/aero@2x.png | Bin .../plugins/iCheck/flat/blue.css | 0 .../plugins/iCheck/flat/blue.png | Bin .../plugins/iCheck/flat/blue@2x.png | Bin .../plugins/iCheck/flat/flat.css | 0 .../plugins/iCheck/flat/flat.png | Bin .../plugins/iCheck/flat/flat@2x.png | Bin .../plugins/iCheck/flat/green.css | 0 .../plugins/iCheck/flat/green.png | Bin .../plugins/iCheck/flat/green@2x.png | Bin .../plugins/iCheck/flat/grey.css | 0 .../plugins/iCheck/flat/grey.png | Bin .../plugins/iCheck/flat/grey@2x.png | Bin .../plugins/iCheck/flat/orange.css | 0 .../plugins/iCheck/flat/orange.png | Bin .../plugins/iCheck/flat/orange@2x.png | Bin .../plugins/iCheck/flat/pink.css | 0 .../plugins/iCheck/flat/pink.png | Bin .../plugins/iCheck/flat/pink@2x.png | Bin .../plugins/iCheck/flat/purple.css | 0 .../plugins/iCheck/flat/purple.png | Bin .../plugins/iCheck/flat/purple@2x.png | Bin .../plugins/iCheck/flat/red.css | 0 .../plugins/iCheck/flat/red.png | Bin .../plugins/iCheck/flat/red@2x.png | Bin .../plugins/iCheck/flat/yellow.css | 0 .../plugins/iCheck/flat/yellow.png | Bin .../plugins/iCheck/flat/yellow@2x.png | Bin .../plugins/iCheck/futurico/futurico.css | 0 .../plugins/iCheck/futurico/futurico.png | Bin .../plugins/iCheck/futurico/futurico@2x.png | Bin .../plugins/iCheck/icheck.js | 0 .../plugins/iCheck/icheck.min.js | 0 .../plugins/iCheck/line/_all.css | 0 .../plugins/iCheck/line/aero.css | 0 .../plugins/iCheck/line/blue.css | 0 .../plugins/iCheck/line/green.css | 0 .../plugins/iCheck/line/grey.css | 0 .../plugins/iCheck/line/line.css | 0 .../plugins/iCheck/line/line.png | Bin .../plugins/iCheck/line/line@2x.png | Bin .../plugins/iCheck/line/orange.css | 0 .../plugins/iCheck/line/pink.css | 0 .../plugins/iCheck/line/purple.css | 0 .../plugins/iCheck/line/red.css | 0 .../plugins/iCheck/line/yellow.css | 0 .../plugins/iCheck/minimal/_all.css | 0 .../plugins/iCheck/minimal/aero.css | 0 .../plugins/iCheck/minimal/aero.png | Bin .../plugins/iCheck/minimal/aero@2x.png | Bin .../plugins/iCheck/minimal/blue.css | 0 .../plugins/iCheck/minimal/blue.png | Bin .../plugins/iCheck/minimal/blue@2x.png | Bin .../plugins/iCheck/minimal/green.css | 0 .../plugins/iCheck/minimal/green.png | Bin .../plugins/iCheck/minimal/green@2x.png | Bin .../plugins/iCheck/minimal/grey.css | 0 .../plugins/iCheck/minimal/grey.png | Bin .../plugins/iCheck/minimal/grey@2x.png | Bin .../plugins/iCheck/minimal/minimal.css | 0 .../plugins/iCheck/minimal/minimal.png | Bin .../plugins/iCheck/minimal/minimal@2x.png | Bin .../plugins/iCheck/minimal/orange.css | 0 .../plugins/iCheck/minimal/orange.png | Bin .../plugins/iCheck/minimal/orange@2x.png | Bin .../plugins/iCheck/minimal/pink.css | 0 .../plugins/iCheck/minimal/pink.png | Bin .../plugins/iCheck/minimal/pink@2x.png | Bin .../plugins/iCheck/minimal/purple.css | 0 .../plugins/iCheck/minimal/purple.png | Bin .../plugins/iCheck/minimal/purple@2x.png | Bin .../plugins/iCheck/minimal/red.css | 0 .../plugins/iCheck/minimal/red.png | Bin .../plugins/iCheck/minimal/red@2x.png | Bin .../plugins/iCheck/minimal/yellow.css | 0 .../plugins/iCheck/minimal/yellow.png | Bin .../plugins/iCheck/minimal/yellow@2x.png | Bin .../plugins/iCheck/polaris/polaris.css | 0 .../plugins/iCheck/polaris/polaris.png | Bin .../plugins/iCheck/polaris/polaris@2x.png | Bin .../plugins/iCheck/square/_all.css | 0 .../plugins/iCheck/square/aero.css | 0 .../plugins/iCheck/square/aero.png | Bin .../plugins/iCheck/square/aero@2x.png | Bin .../plugins/iCheck/square/blue.css | 0 .../plugins/iCheck/square/blue.png | Bin .../plugins/iCheck/square/blue@2x.png | Bin .../plugins/iCheck/square/green.css | 0 .../plugins/iCheck/square/green.png | Bin .../plugins/iCheck/square/green@2x.png | Bin .../plugins/iCheck/square/grey.css | 0 .../plugins/iCheck/square/grey.png | Bin .../plugins/iCheck/square/grey@2x.png | Bin .../plugins/iCheck/square/orange.css | 0 .../plugins/iCheck/square/orange.png | Bin .../plugins/iCheck/square/orange@2x.png | Bin .../plugins/iCheck/square/pink.css | 0 .../plugins/iCheck/square/pink.png | Bin .../plugins/iCheck/square/pink@2x.png | Bin .../plugins/iCheck/square/purple.css | 0 .../plugins/iCheck/square/purple.png | Bin .../plugins/iCheck/square/purple@2x.png | Bin .../plugins/iCheck/square/red.css | 0 .../plugins/iCheck/square/red.png | Bin .../plugins/iCheck/square/red@2x.png | Bin .../plugins/iCheck/square/square.css | 0 .../plugins/iCheck/square/square.png | Bin .../plugins/iCheck/square/square@2x.png | Bin .../plugins/iCheck/square/yellow.css | 0 .../plugins/iCheck/square/yellow.png | Bin .../plugins/iCheck/square/yellow@2x.png | Bin .../jquery.inputmask.date.extensions.js | 0 .../input-mask/jquery.inputmask.extensions.js | 0 .../plugins/input-mask/jquery.inputmask.js | 0 .../jquery.inputmask.numeric.extensions.js | 0 .../jquery.inputmask.phone.extensions.js | 0 .../jquery.inputmask.regex.extensions.js | 0 .../input-mask/phone-codes/phone-be.json | 0 .../input-mask/phone-codes/phone-codes.json | 0 .../plugins/input-mask/phone-codes/readme.txt | 0 .../plugins/jQueryUI/jquery-ui.js | 0 .../plugins/jQueryUI/jquery-ui.min.js | 0 .../jvectormap/jquery-jvectormap-1.2.2.css | 0 .../jvectormap/jquery-jvectormap-1.2.2.min.js | 0 .../jvectormap/jquery-jvectormap-usa-en.js | 0 .../jquery-jvectormap-world-mill-en.js | 0 .../assets => assets}/plugins/pace/pace.css | 0 .../assets => assets}/plugins/pace/pace.js | 0 .../plugins/pace/pace.min.css | 0 .../plugins/pace/pace.min.js | 0 .../timepicker/bootstrap-timepicker.css | 0 .../timepicker/bootstrap-timepicker.js | 0 .../timepicker/bootstrap-timepicker.min.css | 0 .../timepicker/bootstrap-timepicker.min.js | 0 composer.json | 47 +- contributing.md | 95 + env | 101 - index.php | 315 ++ phpunit.xml.dist | 60 - public/.htaccess | 48 - .../datatables.net/i18n/it.json | 25 - public/favicon.ico | Bin 5430 -> 0 bytes public/index.php | 45 - public/robots.txt | 2 - spark | 61 - system/.htaccess | 2 +- system/API/ResponseTrait.php | 430 -- system/Autoloader/Autoloader.php | 435 -- system/Autoloader/FileLocator.php | 505 --- system/CLI/BaseCommand.php | 269 -- system/CLI/CLI.php | 1169 ------ system/CLI/CommandRunner.php | 119 - system/CLI/Commands.php | 181 - system/CLI/Console.php | 106 - system/Cache/CacheFactory.php | 117 - system/Cache/CacheInterface.php | 154 - system/Cache/Exceptions/CacheException.php | 87 - system/Cache/Handlers/DummyHandler.php | 185 - system/Cache/Handlers/FileHandler.php | 535 --- system/Cache/Handlers/MemcachedHandler.php | 388 -- system/Cache/Handlers/PredisHandler.php | 306 -- system/Cache/Handlers/RedisHandler.php | 352 -- system/Cache/Handlers/WincacheHandler.php | 263 -- system/CodeIgniter.php | 1129 ------ system/Commands/Cache/ClearCache.php | 73 - system/Commands/Database/CreateMigration.php | 186 - system/Commands/Database/CreateSeeder.php | 169 - system/Commands/Database/Migrate.php | 167 - system/Commands/Database/MigrateRefresh.php | 127 - system/Commands/Database/MigrateRollback.php | 151 - system/Commands/Database/MigrateStatus.php | 192 - system/Commands/Database/Seed.php | 132 - system/Commands/Help.php | 121 - system/Commands/ListCommands.php | 196 - system/Commands/Server/Serve.php | 168 - system/Commands/Server/rewrite.php | 35 - system/Commands/Sessions/CreateMigration.php | 136 - .../Commands/Sessions/Views/migration.tpl.php | 52 - system/Commands/Utilities/Namespaces.php | 131 - system/Commands/Utilities/Routes.php | 150 - system/Common.php | 1142 ------ system/ComposerScripts.php | 248 -- system/Config/AutoloadConfig.php | 113 - system/Config/BaseConfig.php | 247 -- system/Config/BaseService.php | 300 -- system/Config/Config.php | 161 - system/Config/DotEnv.php | 325 -- system/Config/ForeignCharacters.php | 143 - system/Config/Routes.php | 66 - system/Config/Services.php | 944 ----- system/Config/View.php | 107 - system/Controller.php | 223 -- system/Database/BaseBuilder.php | 3492 ----------------- system/Database/BaseConnection.php | 1883 --------- system/Database/BasePreparedQuery.php | 274 -- system/Database/BaseResult.php | 631 --- system/Database/BaseUtils.php | 423 -- system/Database/Config.php | 199 - system/Database/ConnectionInterface.php | 225 -- system/Database/Database.php | 138 - system/Database/Exceptions/DataException.php | 65 - .../Exceptions/ExceptionInterface.php | 13 - system/Database/Forge.php | 1328 ------- system/Database/Migration.php | 110 - system/Database/MigrationRunner.php | 1064 ----- system/Database/ModelFactory.php | 111 - system/Database/MySQLi/Connection.php | 742 ---- system/Database/MySQLi/Forge.php | 279 -- system/Database/MySQLi/PreparedQuery.php | 135 - system/Database/MySQLi/Result.php | 211 - system/Database/Postgre/Builder.php | 433 -- system/Database/Postgre/Connection.php | 626 --- system/Database/Postgre/Forge.php | 261 -- system/Database/Postgre/PreparedQuery.php | 158 - system/Database/Postgre/Result.php | 173 - system/Database/PreparedQueryInterface.php | 106 - system/Database/Query.php | 504 --- system/Database/QueryInterface.php | 159 - system/Database/ResultInterface.php | 264 -- system/Database/SQLite3/Builder.php | 109 - system/Database/SQLite3/Connection.php | 566 --- system/Database/SQLite3/Forge.php | 331 -- system/Database/SQLite3/PreparedQuery.php | 143 - system/Database/SQLite3/Result.php | 207 - system/Database/SQLite3/Table.php | 440 --- system/Database/Seeder.php | 231 -- system/Debug/Exceptions.php | 513 --- system/Debug/Iterator.php | 179 - system/Debug/Timer.php | 181 - system/Debug/Toolbar.php | 514 --- .../Toolbar/Collectors/BaseCollector.php | 318 -- system/Debug/Toolbar/Collectors/Config.php | 71 - system/Debug/Toolbar/Collectors/Database.php | 278 -- system/Debug/Toolbar/Collectors/Events.php | 187 - system/Debug/Toolbar/Collectors/Files.php | 151 - system/Debug/Toolbar/Collectors/History.php | 183 - system/Debug/Toolbar/Collectors/Logs.php | 139 - system/Debug/Toolbar/Collectors/Routes.php | 202 - system/Debug/Toolbar/Collectors/Timers.php | 107 - system/Debug/Toolbar/Collectors/Views.php | 192 - system/Debug/Toolbar/Views/_config.tpl | 48 - system/Debug/Toolbar/Views/_database.tpl | 16 - system/Debug/Toolbar/Views/_events.tpl | 18 - system/Debug/Toolbar/Views/_files.tpl | 16 - system/Debug/Toolbar/Views/_history.tpl | 28 - system/Debug/Toolbar/Views/_logs.tpl | 20 - system/Debug/Toolbar/Views/_routes.tpl | 52 - system/Debug/Toolbar/Views/toolbar.css | 609 --- system/Debug/Toolbar/Views/toolbar.js | 661 ---- system/Debug/Toolbar/Views/toolbar.tpl.php | 307 -- .../Debug/Toolbar/Views/toolbarloader.js.php | 90 - system/Email/Email.php | 2188 ----------- system/Encryption/Encryption.php | 208 - .../Exceptions/EncryptionException.php | 41 - system/Encryption/Handlers/BaseHandler.php | 124 - system/Encryption/Handlers/OpenSSLHandler.php | 175 - system/Entity.php | 614 --- system/Events/Events.php | 348 -- system/Exceptions/AlertError.php | 10 - system/Exceptions/CastException.php | 36 - system/Exceptions/ConfigException.php | 21 - system/Exceptions/CriticalError.php | 10 - system/Exceptions/DownloadException.php | 36 - system/Exceptions/EmergencyError.php | 10 - system/Exceptions/ExceptionInterface.php | 12 - system/Exceptions/FrameworkException.php | 38 - system/Exceptions/ModelException.php | 18 - system/Exceptions/PageNotFoundException.php | 31 - system/Files/Exceptions/FileException.php | 13 - .../Exceptions/FileNotFoundException.php | 11 - system/Files/File.php | 248 -- system/Filters/CSRF.php | 117 - system/Filters/DebugToolbar.php | 82 - system/Filters/FilterInterface.php | 85 - system/Filters/Filters.php | 516 --- system/Filters/Honeypot.php | 86 - system/Format/Exceptions/FormatException.php | 22 - system/Format/JSONFormatter.php | 78 - system/Format/XMLFormatter.php | 119 - system/HTTP/CLIRequest.php | 254 -- system/HTTP/CURLRequest.php | 830 ---- system/HTTP/ContentSecurityPolicy.php | 849 ---- system/HTTP/DownloadResponse.php | 549 --- system/HTTP/Exceptions/HTTPException.php | 264 -- system/HTTP/Files/FileCollection.php | 325 -- system/HTTP/Files/UploadedFile.php | 414 -- system/HTTP/Files/UploadedFileInterface.php | 203 - system/HTTP/Header.php | 239 -- system/HTTP/IncomingRequest.php | 822 ---- system/HTTP/Message.php | 402 -- system/HTTP/Negotiate.php | 463 --- system/HTTP/RedirectResponse.php | 231 -- system/HTTP/Request.php | 478 --- system/HTTP/RequestInterface.php | 94 - system/HTTP/Response.php | 1087 ----- system/HTTP/ResponseInterface.php | 274 -- system/HTTP/URI.php | 1194 ------ system/HTTP/UserAgent.php | 502 --- system/Helpers/filesystem_helper.php | 512 --- .../Honeypot/Exceptions/HoneypotException.php | 28 - system/Honeypot/Honeypot.php | 138 - system/I18n/Exceptions/I18nException.php | 128 - system/I18n/Time.php | 1365 ------- system/I18n/TimeDifference.php | 364 -- system/Images/Exceptions/ImageException.php | 57 - system/Images/Handlers/BaseHandler.php | 876 ----- system/Images/Handlers/GDHandler.php | 620 --- system/Images/Handlers/ImageMagickHandler.php | 563 --- system/Images/Image.php | 175 - system/Images/ImageHandlerInterface.php | 210 - system/Language/Language.php | 369 -- system/Language/en/CLI.php | 24 - system/Language/en/Cache.php | 22 - system/Language/en/Cast.php | 23 - system/Language/en/Core.php | 23 - system/Language/en/Database.php | 33 - system/Language/en/Email.php | 36 - system/Language/en/Encryption.php | 23 - system/Language/en/Entity.php | 18 - system/Language/en/Fabricator.php | 20 - system/Language/en/Files.php | 19 - system/Language/en/Filters.php | 20 - system/Language/en/Format.php | 20 - system/Language/en/HTTP.php | 77 - system/Language/en/Images.php | 38 - system/Language/en/Language.php | 19 - system/Language/en/Log.php | 19 - system/Language/en/Migrations.php | 58 - system/Language/en/Number.php | 30 - system/Language/en/Pager.php | 27 - system/Language/en/RESTful.php | 18 - system/Language/en/Redirect.php | 19 - system/Language/en/Router.php | 20 - system/Language/en/Seed.php | 21 - system/Language/en/Session.php | 23 - system/Language/en/Time.php | 36 - system/Language/en/Validation.php | 75 - system/Language/en/View.php | 23 - system/Log/Exceptions/LogException.php | 13 - system/Log/Handlers/BaseHandler.php | 121 - system/Log/Handlers/ChromeLoggerHandler.php | 216 - system/Log/Handlers/FileHandler.php | 164 - system/Log/Handlers/HandlerInterface.php | 85 - system/Log/Logger.php | 541 --- system/Model.php | 1842 --------- system/Pager/Exceptions/PagerException.php | 17 - system/Pager/Pager.php | 580 --- system/Pager/PagerInterface.php | 228 -- system/Pager/PagerRenderer.php | 428 -- system/Pager/Views/default_full.php | 46 - system/Pager/Views/default_head.php | 18 - system/Pager/Views/default_simple.php | 21 - system/RESTful/ResourceController.php | 203 - system/RESTful/ResourcePresenter.php | 206 - system/Router/RouteCollection.php | 1588 -------- system/Router/RouteCollectionInterface.php | 276 -- system/Router/Router.php | 725 ---- system/Router/RouterInterface.php | 115 - .../Security/Exceptions/SecurityException.php | 12 - system/Security/Security.php | 389 -- .../Session/Exceptions/SessionException.php | 32 - system/Session/Handlers/ArrayHandler.php | 150 - system/Session/Handlers/BaseHandler.php | 218 - system/Session/Handlers/DatabaseHandler.php | 430 -- system/Session/Handlers/FileHandler.php | 422 -- system/Session/Handlers/MemcachedHandler.php | 405 -- system/Session/Handlers/RedisHandler.php | 424 -- system/Session/Session.php | 1023 ----- system/Session/SessionInterface.php | 251 -- system/Test/CIDatabaseTestCase.php | 388 -- system/Test/CIUnitTestCase.php | 361 -- system/Test/ControllerResponse.php | 227 -- system/Test/ControllerTester.php | 316 -- system/Test/DOMParser.php | 359 -- system/Test/Fabricator.php | 648 --- system/Test/FeatureResponse.php | 439 --- system/Test/FeatureTestCase.php | 75 - system/Test/FeatureTestTrait.php | 338 -- system/Test/Filters/CITestStreamFilter.php | 81 - system/Test/Interfaces/FabricatorModel.php | 109 - system/Test/Mock/MockAppConfig.php | 34 - system/Test/Mock/MockAutoload.php | 21 - system/Test/Mock/MockBuilder.php | 15 - system/Test/Mock/MockCLIConfig.php | 32 - system/Test/Mock/MockCURLRequest.php | 50 - system/Test/Mock/MockCache.php | 198 - system/Test/Mock/MockCodeIgniter.php | 11 - system/Test/Mock/MockCommon.php | 37 - system/Test/Mock/MockConnection.php | 297 -- system/Test/Mock/MockEmail.php | 31 - system/Test/Mock/MockEvents.php | 66 - system/Test/Mock/MockFileLogger.php | 25 - system/Test/Mock/MockIncomingRequest.php | 17 - system/Test/Mock/MockLanguage.php | 61 - system/Test/Mock/MockLogger.php | 98 - system/Test/Mock/MockQuery.php | 8 - system/Test/Mock/MockResourceController.php | 23 - system/Test/Mock/MockResourcePresenter.php | 23 - system/Test/Mock/MockResponse.php | 30 - system/Test/Mock/MockResult.php | 93 - system/Test/Mock/MockSecurity.php | 17 - system/Test/Mock/MockServices.php | 27 - system/Test/Mock/MockSession.php | 72 - system/Test/Mock/MockTable.php | 16 - system/Test/ReflectionHelper.php | 128 - system/Test/TestLogger.php | 82 - system/Test/bootstrap.php | 67 - system/ThirdParty/Escaper/Escaper.php | 391 -- .../Escaper/Exception/ExceptionInterface.php | 13 - .../Exception/InvalidArgumentException.php | 17 - .../Escaper/Exception/RuntimeException.php | 17 - system/ThirdParty/Kint/CallFinder.php | 473 --- system/ThirdParty/Kint/Kint.php | 756 ---- system/ThirdParty/Kint/Object/BasicObject.php | 248 -- system/ThirdParty/Kint/Object/BlobObject.php | 177 - .../ThirdParty/Kint/Object/ClosureObject.php | 68 - .../ThirdParty/Kint/Object/DateTimeObject.php | 53 - .../ThirdParty/Kint/Object/InstanceObject.php | 78 - .../ThirdParty/Kint/Object/MethodObject.php | 253 -- .../Kint/Object/ParameterObject.php | 100 - .../Representation/ColorRepresentation.php | 576 --- .../DocstringRepresentation.php | 73 - .../MicrotimeRepresentation.php | 71 - .../Object/Representation/Representation.php | 71 - .../Representation/SourceRepresentation.php | 72 - .../SplFileInfoRepresentation.php | 177 - .../ThirdParty/Kint/Object/ResourceObject.php | 49 - .../ThirdParty/Kint/Object/StreamObject.php | 54 - .../Kint/Object/ThrowableObject.php | 54 - .../Kint/Object/TraceFrameObject.php | 100 - system/ThirdParty/Kint/Object/TraceObject.php | 45 - .../Kint/Parser/ArrayObjectPlugin.php | 63 - .../ThirdParty/Kint/Parser/Base64Plugin.php | 95 - .../ThirdParty/Kint/Parser/BinaryPlugin.php | 49 - .../Kint/Parser/BlacklistPlugin.php | 143 - .../Kint/Parser/ClassMethodsPlugin.php | 113 - .../Kint/Parser/ClassStaticsPlugin.php | 122 - .../ThirdParty/Kint/Parser/ClosurePlugin.php | 94 - system/ThirdParty/Kint/Parser/ColorPlugin.php | 63 - .../Kint/Parser/DOMDocumentPlugin.php | 328 -- .../ThirdParty/Kint/Parser/DateTimePlugin.php | 55 - .../ThirdParty/Kint/Parser/FsPathPlugin.php | 72 - .../ThirdParty/Kint/Parser/IteratorPlugin.php | 110 - system/ThirdParty/Kint/Parser/JsonPlugin.php | 73 - .../Kint/Parser/MicrotimePlugin.php | 105 - .../ThirdParty/Kint/Parser/MysqliPlugin.php | 129 - system/ThirdParty/Kint/Parser/Parser.php | 604 --- system/ThirdParty/Kint/Parser/Plugin.php | 55 - system/ThirdParty/Kint/Parser/ProxyPlugin.php | 66 - .../Kint/Parser/SerializePlugin.php | 108 - .../Kint/Parser/SimpleXMLElementPlugin.php | 154 - .../Kint/Parser/SplFileInfoPlugin.php | 55 - .../Kint/Parser/SplObjectStoragePlugin.php | 54 - .../ThirdParty/Kint/Parser/StreamPlugin.php | 78 - system/ThirdParty/Kint/Parser/TablePlugin.php | 87 - .../Kint/Parser/ThrowablePlugin.php | 60 - .../Kint/Parser/TimestampPlugin.php | 71 - .../ThirdParty/Kint/Parser/ToStringPlugin.php | 67 - system/ThirdParty/Kint/Parser/TracePlugin.php | 92 - system/ThirdParty/Kint/Parser/XmlPlugin.php | 150 - .../ThirdParty/Kint/Renderer/CliRenderer.php | 152 - .../Kint/Renderer/PlainRenderer.php | 237 -- system/ThirdParty/Kint/Renderer/Renderer.php | 185 - .../Kint/Renderer/Rich/BinaryPlugin.php | 51 - .../Kint/Renderer/Rich/BlacklistPlugin.php | 36 - .../Kint/Renderer/Rich/CallablePlugin.php | 174 - .../Kint/Renderer/Rich/ClosurePlugin.php | 59 - .../Kint/Renderer/Rich/ColorPlugin.php | 100 - .../Kint/Renderer/Rich/DepthLimitPlugin.php | 36 - .../Kint/Renderer/Rich/DocstringPlugin.php | 70 - .../Kint/Renderer/Rich/MicrotimePlugin.php | 68 - .../Renderer/Rich/ObjectPluginInterface.php | 33 - .../ThirdParty/Kint/Renderer/Rich/Plugin.php | 90 - .../Kint/Renderer/Rich/PluginInterface.php | 33 - .../Kint/Renderer/Rich/RecursionPlugin.php | 36 - .../Renderer/Rich/SimpleXMLElementPlugin.php | 81 - .../Kint/Renderer/Rich/SourcePlugin.php | 79 - .../Kint/Renderer/Rich/TabPluginInterface.php | 33 - .../Kint/Renderer/Rich/TablePlugin.php | 133 - .../Kint/Renderer/Rich/TimestampPlugin.php | 42 - .../Kint/Renderer/Rich/TraceFramePlugin.php | 68 - .../ThirdParty/Kint/Renderer/RichRenderer.php | 612 --- .../Kint/Renderer/Text/BlacklistPlugin.php | 44 - .../Kint/Renderer/Text/DepthLimitPlugin.php | 44 - .../Kint/Renderer/Text/MicrotimePlugin.php | 128 - .../ThirdParty/Kint/Renderer/Text/Plugin.php | 41 - .../Kint/Renderer/Text/RecursionPlugin.php | 44 - .../Kint/Renderer/Text/TracePlugin.php | 111 - .../ThirdParty/Kint/Renderer/TextRenderer.php | 346 -- system/ThirdParty/Kint/Utils.php | 240 -- system/ThirdParty/Kint/init.php | 62 - system/ThirdParty/Kint/init_helpers.php | 84 - .../Kint/resources/compiled/aante-light.css | 1 - .../Kint/resources/compiled/microtime.js | 1 - .../Kint/resources/compiled/original.css | 1 - .../Kint/resources/compiled/plain.css | 1 - .../Kint/resources/compiled/plain.js | 1 - .../Kint/resources/compiled/rich.js | 1 - .../Kint/resources/compiled/shared.js | 1 - .../resources/compiled/solarized-dark.css | 1 - .../Kint/resources/compiled/solarized.css | 1 - system/ThirdParty/PSR/Log/AbstractLogger.php | 120 - .../PSR/Log/InvalidArgumentException.php | 7 - system/ThirdParty/PSR/Log/LogLevel.php | 18 - .../PSR/Log/LoggerAwareInterface.php | 17 - .../ThirdParty/PSR/Log/LoggerAwareTrait.php | 22 - system/ThirdParty/PSR/Log/LoggerInterface.php | 112 - system/ThirdParty/PSR/Log/LoggerTrait.php | 131 - system/ThirdParty/PSR/Log/NullLogger.php | 27 - system/Throttle/Throttler.php | 212 - system/Throttle/ThrottlerInterface.php | 76 - system/Typography/Typography.php | 408 -- system/Validation/CreditCardRules.php | 337 -- .../Exceptions/ValidationException.php | 32 - system/Validation/FileRules.php | 357 -- system/Validation/FormatRules.php | 400 -- system/Validation/Rules.php | 450 --- system/Validation/Validation.php | 868 ---- system/Validation/ValidationInterface.php | 166 - system/Validation/Views/list.php | 9 - system/Validation/Views/single.php | 1 - system/View/Cell.php | 283 -- system/View/Exceptions/ViewException.php | 37 - system/View/Filters.php | 361 -- system/View/Parser.php | 867 ---- system/View/Plugins.php | 169 - system/View/RendererInterface.php | 123 - system/View/Table.php | 580 --- system/View/View.php | 565 --- system/bootstrap.php | 183 - system/core/Benchmark.php | 133 + system/core/CodeIgniter.php | 559 +++ system/core/Common.php | 849 ++++ system/core/Config.php | 379 ++ system/core/Controller.php | 96 + system/core/Exceptions.php | 274 ++ system/core/Hooks.php | 266 ++ system/core/Input.php | 895 +++++ system/core/Lang.php | 203 + system/core/Loader.php | 1409 +++++++ system/core/Log.php | 296 ++ .../FilterException.php => core/Model.php} | 64 +- system/core/Output.php | 842 ++++ system/core/Router.php | 515 +++ system/core/Security.php | 1080 +++++ system/core/URI.php | 643 +++ system/core/Utf8.php | 164 + system/core/compat/hash.php | 254 ++ system/core/compat/index.html | 11 + system/core/compat/mbstring.php | 149 + system/core/compat/password.php | 251 ++ system/core/compat/standard.php | 182 + system/core/index.html | 11 + system/database/DB.php | 218 + system/database/DB_cache.php | 221 ++ system/database/DB_driver.php | 1987 ++++++++++ system/database/DB_forge.php | 1032 +++++ system/database/DB_query_builder.php | 2803 +++++++++++++ system/database/DB_result.php | 666 ++++ system/database/DB_utility.php | 424 ++ .../database/drivers/cubrid/cubrid_driver.php | 405 ++ .../database/drivers/cubrid/cubrid_forge.php | 230 ++ .../database/drivers/cubrid/cubrid_result.php | 177 + .../drivers/cubrid/cubrid_utility.php | 79 + system/database/drivers/cubrid/index.html | 11 + .../database/drivers/ibase/ibase_driver.php | 413 ++ system/database/drivers/ibase/ibase_forge.php | 251 ++ .../database/drivers/ibase/ibase_result.php | 161 + .../drivers/ibase/ibase_utility.php} | 61 +- system/database/drivers/ibase/index.html | 11 + system/database/drivers/index.html | 11 + system/database/drivers/mssql/index.html | 11 + .../database/drivers/mssql/mssql_driver.php | 518 +++ system/database/drivers/mssql/mssql_forge.php | 151 + .../database/drivers/mssql/mssql_result.php | 198 + .../drivers/mssql/mssql_utility.php} | 56 +- system/database/drivers/mysql/index.html | 11 + .../database/drivers/mysql/mysql_driver.php | 494 +++ system/database/drivers/mysql/mysql_forge.php | 243 ++ .../database/drivers/mysql/mysql_result.php | 199 + .../database/drivers/mysql/mysql_utility.php | 211 + system/database/drivers/mysqli/index.html | 11 + .../database/drivers/mysqli/mysqli_driver.php | 544 +++ .../database/drivers/mysqli/mysqli_forge.php | 244 ++ .../database/drivers/mysqli/mysqli_result.php | 240 ++ .../drivers/mysqli/mysqli_utility.php | 215 + system/database/drivers/oci8/index.html | 11 + system/database/drivers/oci8/oci8_driver.php | 688 ++++ system/database/drivers/oci8/oci8_forge.php | 187 + system/database/drivers/oci8/oci8_result.php | 229 ++ .../drivers/oci8/oci8_utility.php} | 51 +- system/database/drivers/odbc/index.html | 11 + system/database/drivers/odbc/odbc_driver.php | 425 ++ .../drivers/odbc/odbc_forge.php} | 78 +- system/database/drivers/odbc/odbc_result.php | 268 ++ system/database/drivers/odbc/odbc_utility.php | 63 + system/database/drivers/pdo/index.html | 11 + system/database/drivers/pdo/pdo_driver.php | 329 ++ .../drivers/pdo/pdo_forge.php} | 45 +- system/database/drivers/pdo/pdo_result.php | 198 + system/database/drivers/pdo/pdo_utility.php | 63 + .../drivers/pdo/subdrivers/index.html | 11 + .../drivers/pdo/subdrivers/pdo_4d_driver.php | 200 + .../drivers/pdo/subdrivers/pdo_4d_forge.php | 217 + .../pdo/subdrivers/pdo_cubrid_driver.php | 209 + .../pdo/subdrivers/pdo_cubrid_forge.php | 230 ++ .../pdo/subdrivers/pdo_dblib_driver.php | 353 ++ .../pdo/subdrivers/pdo_dblib_forge.php | 149 + .../pdo/subdrivers/pdo_firebird_driver.php | 279 ++ .../pdo/subdrivers/pdo_firebird_forge.php | 237 ++ .../drivers/pdo/subdrivers/pdo_ibm_driver.php | 244 ++ .../drivers/pdo/subdrivers/pdo_ibm_forge.php | 154 + .../pdo/subdrivers/pdo_informix_driver.php | 309 ++ .../pdo/subdrivers/pdo_informix_forge.php | 163 + .../pdo/subdrivers/pdo_mysql_driver.php | 374 ++ .../pdo/subdrivers/pdo_mysql_forge.php | 256 ++ .../drivers/pdo/subdrivers/pdo_oci_driver.php | 326 ++ .../drivers/pdo/subdrivers/pdo_oci_forge.php | 176 + .../pdo/subdrivers/pdo_odbc_driver.php | 229 ++ .../pdo/subdrivers/pdo_odbc_forge.php} | 53 +- .../pdo/subdrivers/pdo_pgsql_driver.php | 384 ++ .../pdo/subdrivers/pdo_pgsql_forge.php | 210 + .../pdo/subdrivers/pdo_sqlite_driver.php | 219 ++ .../pdo/subdrivers/pdo_sqlite_forge.php | 238 ++ .../pdo/subdrivers/pdo_sqlsrv_driver.php | 369 ++ .../pdo/subdrivers/pdo_sqlsrv_forge.php | 149 + system/database/drivers/postgre/index.html | 11 + .../drivers/postgre/postgre_driver.php | 620 +++ .../drivers/postgre/postgre_forge.php | 205 + .../drivers/postgre/postgre_result.php | 182 + .../drivers/postgre/postgre_utility.php} | 70 +- system/database/drivers/sqlite/index.html | 11 + .../database/drivers/sqlite/sqlite_driver.php | 330 ++ .../database/drivers/sqlite/sqlite_forge.php | 205 + .../database/drivers/sqlite/sqlite_result.php | 164 + .../drivers/sqlite/sqlite_utility.php} | 42 +- system/database/drivers/sqlite3/index.html | 11 + .../drivers/sqlite3/sqlite3_driver.php | 350 ++ .../drivers/sqlite3/sqlite3_forge.php | 225 ++ .../drivers/sqlite3/sqlite3_result.php | 194 + .../drivers/sqlite3/sqlite3_utility.php} | 45 +- system/database/drivers/sqlsrv/index.html | 11 + .../database/drivers/sqlsrv/sqlsrv_driver.php | 543 +++ .../database/drivers/sqlsrv/sqlsrv_forge.php | 149 + .../database/drivers/sqlsrv/sqlsrv_result.php | 193 + .../drivers/sqlsrv/sqlsrv_utility.php} | 55 +- system/database/index.html | 11 + system/fonts/index.html | 11 + system/fonts/texb.ttf | Bin 0 -> 143830 bytes system/helpers/array_helper.php | 123 +- system/helpers/captcha_helper.php | 341 ++ system/helpers/cookie_helper.php | 106 +- system/helpers/date_helper.php | 708 +++- system/helpers/directory_helper.php | 101 + system/helpers/download_helper.php | 158 + system/helpers/email_helper.php | 84 + system/helpers/file_helper.php | 453 +++ system/helpers/form_helper.php | 900 +++-- system/helpers/html_helper.php | 683 +--- system/helpers/index.html | 11 + system/helpers/inflector_helper.php | 418 +- .../language_helper.php} | 56 +- system/helpers/number_helper.php | 315 +- system/helpers/path_helper.php | 82 + system/helpers/security_helper.php | 110 +- system/helpers/smiley_helper.php | 255 ++ system/helpers/string_helper.php | 304 ++ system/helpers/text_helper.php | 682 +--- system/helpers/typography_helper.php | 104 + system/helpers/url_helper.php | 511 ++- system/helpers/xml_helper.php | 69 +- system/language/english/calendar_lang.php | 84 + system/language/english/date_lang.php | 94 + system/language/english/db_lang.php | 63 + system/language/english/email_lang.php | 58 + .../language/english/form_validation_lang.php | 68 + system/language/english/ftp_lang.php | 51 + system/language/english/imglib_lang.php | 57 + system/language/english/index.html | 11 + system/language/english/migration_lang.php | 47 + .../english/number_lang.php} | 33 +- .../english/pagination_lang.php} | 34 +- system/language/english/profiler_lang.php | 60 + system/language/english/unit_test_lang.php | 58 + system/language/english/upload_lang.php | 55 + system/language/index.html | 11 + system/libraries/Cache/Cache.php | 255 ++ system/libraries/Cache/drivers/Cache_apc.php | 217 + .../libraries/Cache/drivers/Cache_dummy.php | 172 + system/libraries/Cache/drivers/Cache_file.php | 286 ++ .../Cache/drivers/Cache_memcached.php | 303 ++ .../libraries/Cache/drivers/Cache_redis.php | 328 ++ .../Cache/drivers/Cache_wincache.php | 217 + system/libraries/Cache/drivers/index.html | 11 + system/libraries/Cache/index.html | 11 + system/libraries/Calendar.php | 546 +++ system/libraries/Cart.php | 567 +++ system/libraries/Driver.php | 342 ++ system/libraries/Email.php | 2466 ++++++++++++ system/libraries/Encrypt.php | 521 +++ system/libraries/Encryption.php | 943 +++++ system/libraries/Form_validation.php | 1584 ++++++++ system/libraries/Ftp.php | 667 ++++ system/libraries/Image_lib.php | 1839 +++++++++ system/libraries/Javascript.php | 856 ++++ system/libraries/Javascript/Jquery.php | 1076 +++++ system/libraries/Javascript/index.html | 11 + system/libraries/Migration.php | 477 +++ system/libraries/Pagination.php | 701 ++++ system/libraries/Parser.php | 248 ++ system/libraries/Profiler.php | 574 +++ system/libraries/Session/Session.php | 985 +++++ .../Session/SessionHandlerInterface.php | 59 + system/libraries/Session/Session_driver.php | 191 + .../drivers/Session_database_driver.php | 420 ++ .../Session/drivers/Session_files_driver.php | 406 ++ .../drivers/Session_memcached_driver.php | 376 ++ .../Session/drivers/Session_redis_driver.php | 399 ++ system/libraries/Session/drivers/index.html | 11 + system/libraries/Session/index.html | 11 + system/libraries/Table.php | 538 +++ system/libraries/Trackback.php | 556 +++ system/libraries/Typography.php | 424 ++ system/libraries/Unit_test.php | 406 ++ system/libraries/Upload.php | 1328 +++++++ system/libraries/User_agent.php | 681 ++++ system/libraries/Xmlrpc.php | 1920 +++++++++ system/libraries/Xmlrpcs.php | 625 +++ system/libraries/Zip.php | 532 +++ system/libraries/index.html | 11 + writable/.htaccess | 6 - 8632 files changed, 68325 insertions(+), 129795 deletions(-) create mode 100644 .htaccess create mode 100644 __MACOSX/application/controllers/._Attributes.php create mode 100644 __MACOSX/application/controllers/._Brands.php create mode 100644 __MACOSX/application/controllers/._Category.php create mode 100644 __MACOSX/application/controllers/._Company.php create mode 100644 __MACOSX/application/controllers/._Orders.php create mode 100644 __MACOSX/application/controllers/._Products.php create mode 100644 __MACOSX/application/controllers/._Reports.php create mode 100644 __MACOSX/application/controllers/._Stores.php create mode 100644 __MACOSX/application/models/._.DS_Store create mode 100644 __MACOSX/application/models/._Model_attributes.php create mode 100644 __MACOSX/application/models/._Model_brands.php create mode 100644 __MACOSX/application/models/._Model_category.php create mode 100644 __MACOSX/application/models/._Model_company.php create mode 100644 __MACOSX/application/models/._Model_orders.php create mode 100644 __MACOSX/application/models/._Model_products.php create mode 100644 __MACOSX/application/models/._Model_reports.php create mode 100644 __MACOSX/application/models/._Model_stores.php create mode 100644 __MACOSX/application/views/attributes/._addvalue.php create mode 100644 __MACOSX/application/views/attributes/._index.php create mode 100644 __MACOSX/application/views/brands/._index.php create mode 100644 __MACOSX/application/views/category/._index.php create mode 100644 __MACOSX/application/views/company/._index.php create mode 100644 __MACOSX/application/views/orders/._create.php create mode 100644 __MACOSX/application/views/orders/._edit.php create mode 100644 __MACOSX/application/views/orders/._index.php create mode 100644 __MACOSX/application/views/products/._create.php create mode 100644 __MACOSX/application/views/products/._edit.php create mode 100644 __MACOSX/application/views/products/._index.php create mode 100644 __MACOSX/application/views/reports/._index.php create mode 100644 __MACOSX/application/views/stores/._index.php create mode 100644 __MACOSX/assets/plugins/fileinput/._fileinput.min.css create mode 100644 __MACOSX/assets/plugins/fileinput/._fileinput.min.js delete mode 100644 app/Common.php delete mode 100644 app/Config/App.php delete mode 100644 app/Config/Boot/development.php delete mode 100644 app/Config/Boot/production.php delete mode 100644 app/Config/Boot/testing.php delete mode 100644 app/Config/Cache.php delete mode 100644 app/Config/ContentSecurityPolicy.php delete mode 100644 app/Config/Email.php delete mode 100644 app/Config/Encryption.php delete mode 100644 app/Config/Events.php delete mode 100644 app/Config/Exceptions.php delete mode 100644 app/Config/Filters.php delete mode 100644 app/Config/ForeignCharacters.php delete mode 100644 app/Config/Format.php delete mode 100644 app/Config/Honeypot.php delete mode 100644 app/Config/Images.php delete mode 100644 app/Config/Kint.php delete mode 100644 app/Config/Logger.php delete mode 100644 app/Config/Migrations.php delete mode 100644 app/Config/Modules.php delete mode 100644 app/Config/Pager.php delete mode 100644 app/Config/Paths.php delete mode 100644 app/Config/Services.php delete mode 100644 app/Config/Toolbar.php delete mode 100644 app/Config/UserAgents.php delete mode 100644 app/Config/Validation.php delete mode 100644 app/Config/View.php delete mode 100644 app/Controllers/Auth.php delete mode 100644 app/Controllers/Company.php delete mode 100644 app/Controllers/File.php delete mode 100644 app/Controllers/Products.php delete mode 100644 app/Controllers/Users.php delete mode 100644 app/Database/Migrations/.gitkeep delete mode 100644 app/Database/Seeds/.gitkeep delete mode 100644 app/Filters/.gitkeep delete mode 100644 app/Filters/Auth.php delete mode 100644 app/Helpers/.gitkeep delete mode 100644 app/Language/.gitkeep delete mode 100644 app/Language/ar/CLI.php delete mode 100644 app/Language/ar/Cache.php delete mode 100644 app/Language/ar/Cast.php delete mode 100644 app/Language/ar/Core.php delete mode 100644 app/Language/ar/Database.php delete mode 100644 app/Language/ar/Email.php delete mode 100644 app/Language/ar/Encryption.php delete mode 100644 app/Language/ar/Entity.php delete mode 100644 app/Language/ar/Files.php delete mode 100644 app/Language/ar/Filters.php delete mode 100644 app/Language/ar/Format.php delete mode 100644 app/Language/ar/HTTP.php delete mode 100644 app/Language/ar/Images.php delete mode 100644 app/Language/ar/Language.php delete mode 100644 app/Language/ar/Log.php delete mode 100644 app/Language/ar/Migrations.php delete mode 100644 app/Language/ar/Number.php delete mode 100644 app/Language/ar/Pager.php delete mode 100644 app/Language/ar/RESTful.php delete mode 100644 app/Language/ar/Redirect.php delete mode 100644 app/Language/ar/Router.php delete mode 100644 app/Language/ar/Session.php delete mode 100644 app/Language/ar/Time.php delete mode 100644 app/Language/ar/Validation.php delete mode 100644 app/Language/ar/View.php delete mode 100644 app/Language/cs/CLI.php delete mode 100644 app/Language/cs/Cache.php delete mode 100644 app/Language/cs/Cast.php delete mode 100644 app/Language/cs/Core.php delete mode 100644 app/Language/cs/Database.php delete mode 100644 app/Language/cs/Email.php delete mode 100644 app/Language/cs/Encryption.php delete mode 100644 app/Language/cs/Entity.php delete mode 100644 app/Language/cs/Files.php delete mode 100644 app/Language/cs/Filters.php delete mode 100644 app/Language/cs/Format.php delete mode 100644 app/Language/cs/HTTP.php delete mode 100644 app/Language/cs/Images.php delete mode 100644 app/Language/cs/Language.php delete mode 100644 app/Language/cs/Log.php delete mode 100644 app/Language/cs/Migrations.php delete mode 100644 app/Language/cs/Number.php delete mode 100644 app/Language/cs/Pager.php delete mode 100644 app/Language/cs/RESTful.php delete mode 100644 app/Language/cs/Redirect.php delete mode 100644 app/Language/cs/Router.php delete mode 100644 app/Language/cs/Session.php delete mode 100644 app/Language/cs/Time.php delete mode 100644 app/Language/cs/Validation.php delete mode 100644 app/Language/cs/View.php delete mode 100644 app/Language/de/CLI.php delete mode 100644 app/Language/de/Cache.php delete mode 100644 app/Language/de/Cast.php delete mode 100644 app/Language/de/Core.php delete mode 100644 app/Language/de/Database.php delete mode 100644 app/Language/de/Email.php delete mode 100644 app/Language/de/Encryption.php delete mode 100644 app/Language/de/Entity.php delete mode 100644 app/Language/de/Files.php delete mode 100644 app/Language/de/Filters.php delete mode 100644 app/Language/de/Format.php delete mode 100644 app/Language/de/HTTP.php delete mode 100644 app/Language/de/Images.php delete mode 100644 app/Language/de/Language.php delete mode 100644 app/Language/de/Log.php delete mode 100644 app/Language/de/Migrations.php delete mode 100644 app/Language/de/Number.php delete mode 100644 app/Language/de/Pager.php delete mode 100644 app/Language/de/RESTful.php delete mode 100644 app/Language/de/Redirect.php delete mode 100644 app/Language/de/Router.php delete mode 100644 app/Language/de/Session.php delete mode 100644 app/Language/de/Time.php delete mode 100644 app/Language/de/Validation.php delete mode 100644 app/Language/de/View.php delete mode 100644 app/Language/en/Main.php delete mode 100644 app/Language/en/Validation.php delete mode 100644 app/Language/es/CLI.php delete mode 100644 app/Language/es/Cache.php delete mode 100644 app/Language/es/Cast.php delete mode 100644 app/Language/es/Core.php delete mode 100644 app/Language/es/Database.php delete mode 100644 app/Language/es/Email.php delete mode 100644 app/Language/es/Encryption.php delete mode 100644 app/Language/es/Entity.php delete mode 100644 app/Language/es/Files.php delete mode 100644 app/Language/es/Filters.php delete mode 100644 app/Language/es/Format.php delete mode 100644 app/Language/es/HTTP.php delete mode 100644 app/Language/es/Images.php delete mode 100644 app/Language/es/Language.php delete mode 100644 app/Language/es/Log.php delete mode 100644 app/Language/es/Migrations.php delete mode 100644 app/Language/es/Number.php delete mode 100644 app/Language/es/Pager.php delete mode 100644 app/Language/es/RESTful.php delete mode 100644 app/Language/es/Redirect.php delete mode 100644 app/Language/es/Router.php delete mode 100644 app/Language/es/Session.php delete mode 100644 app/Language/es/Time.php delete mode 100644 app/Language/es/Validation.php delete mode 100644 app/Language/es/View.php delete mode 100644 app/Language/fa/CLI.php delete mode 100644 app/Language/fa/Cache.php delete mode 100644 app/Language/fa/Cast.php delete mode 100644 app/Language/fa/Core.php delete mode 100644 app/Language/fa/Database.php delete mode 100644 app/Language/fa/Email.php delete mode 100644 app/Language/fa/Encryption.php delete mode 100644 app/Language/fa/Entity.php delete mode 100644 app/Language/fa/Files.php delete mode 100644 app/Language/fa/Filters.php delete mode 100644 app/Language/fa/Format.php delete mode 100644 app/Language/fa/HTTP.php delete mode 100644 app/Language/fa/Images.php delete mode 100644 app/Language/fa/Language.php delete mode 100644 app/Language/fa/Log.php delete mode 100644 app/Language/fa/Migrations.php delete mode 100644 app/Language/fa/Number.php delete mode 100644 app/Language/fa/Pager.php delete mode 100644 app/Language/fa/RESTful.php delete mode 100644 app/Language/fa/Redirect.php delete mode 100644 app/Language/fa/Router.php delete mode 100644 app/Language/fa/Session.php delete mode 100644 app/Language/fa/Time.php delete mode 100644 app/Language/fa/Validation.php delete mode 100644 app/Language/fa/View.php delete mode 100644 app/Language/fr/CLI.php delete mode 100644 app/Language/fr/Cache.php delete mode 100644 app/Language/fr/Cast.php delete mode 100644 app/Language/fr/Core.php delete mode 100644 app/Language/fr/Database.php delete mode 100644 app/Language/fr/Email.php delete mode 100644 app/Language/fr/Encryption.php delete mode 100644 app/Language/fr/Entity.php delete mode 100644 app/Language/fr/Files.php delete mode 100644 app/Language/fr/Filters.php delete mode 100644 app/Language/fr/Format.php delete mode 100644 app/Language/fr/HTTP.php delete mode 100644 app/Language/fr/Images.php delete mode 100644 app/Language/fr/Language.php delete mode 100644 app/Language/fr/Log.php delete mode 100644 app/Language/fr/Migrations.php delete mode 100644 app/Language/fr/Number.php delete mode 100644 app/Language/fr/Pager.php delete mode 100644 app/Language/fr/RESTful.php delete mode 100644 app/Language/fr/Redirect.php delete mode 100644 app/Language/fr/Router.php delete mode 100644 app/Language/fr/Session.php delete mode 100644 app/Language/fr/Time.php delete mode 100644 app/Language/fr/Validation.php delete mode 100644 app/Language/fr/View.php delete mode 100644 app/Language/id/CLI.php delete mode 100644 app/Language/id/Cache.php delete mode 100644 app/Language/id/Cast.php delete mode 100644 app/Language/id/Core.php delete mode 100644 app/Language/id/Database.php delete mode 100644 app/Language/id/Email.php delete mode 100644 app/Language/id/Encryption.php delete mode 100644 app/Language/id/Entity.php delete mode 100644 app/Language/id/Files.php delete mode 100644 app/Language/id/Filters.php delete mode 100644 app/Language/id/Format.php delete mode 100644 app/Language/id/HTTP.php delete mode 100644 app/Language/id/Images.php delete mode 100644 app/Language/id/Language.php delete mode 100644 app/Language/id/Log.php delete mode 100644 app/Language/id/Migrations.php delete mode 100644 app/Language/id/Number.php delete mode 100644 app/Language/id/Pager.php delete mode 100644 app/Language/id/RESTful.php delete mode 100644 app/Language/id/Redirect.php delete mode 100644 app/Language/id/Router.php delete mode 100644 app/Language/id/Session.php delete mode 100644 app/Language/id/Time.php delete mode 100644 app/Language/id/Validation.php delete mode 100644 app/Language/id/View.php delete mode 100644 app/Language/it/CLI.php delete mode 100644 app/Language/it/Cache.php delete mode 100644 app/Language/it/Cast.php delete mode 100644 app/Language/it/Core.php delete mode 100644 app/Language/it/Database.php delete mode 100644 app/Language/it/Datatables.php delete mode 100644 app/Language/it/Email.php delete mode 100644 app/Language/it/Encryption.php delete mode 100644 app/Language/it/Entity.php delete mode 100644 app/Language/it/Files.php delete mode 100644 app/Language/it/Filters.php delete mode 100644 app/Language/it/Format.php delete mode 100644 app/Language/it/HTTP.php delete mode 100644 app/Language/it/Images.php delete mode 100644 app/Language/it/Language.php delete mode 100644 app/Language/it/Log.php delete mode 100644 app/Language/it/Main.php delete mode 100644 app/Language/it/Migrations.php delete mode 100644 app/Language/it/Number.php delete mode 100644 app/Language/it/Pager.php delete mode 100644 app/Language/it/RESTful.php delete mode 100644 app/Language/it/Redirect.php delete mode 100644 app/Language/it/Router.php delete mode 100644 app/Language/it/Session.php delete mode 100644 app/Language/it/Time.php delete mode 100644 app/Language/it/Validation.php delete mode 100644 app/Language/it/View.php delete mode 100644 app/Language/ja/CLI.php delete mode 100644 app/Language/ja/Cache.php delete mode 100644 app/Language/ja/Cast.php delete mode 100644 app/Language/ja/Core.php delete mode 100644 app/Language/ja/Database.php delete mode 100644 app/Language/ja/Email.php delete mode 100644 app/Language/ja/Encryption.php delete mode 100644 app/Language/ja/Entity.php delete mode 100644 app/Language/ja/Files.php delete mode 100644 app/Language/ja/Filters.php delete mode 100644 app/Language/ja/Format.php delete mode 100644 app/Language/ja/HTTP.php delete mode 100644 app/Language/ja/Images.php delete mode 100644 app/Language/ja/Language.php delete mode 100644 app/Language/ja/Log.php delete mode 100644 app/Language/ja/Migrations.php delete mode 100644 app/Language/ja/Number.php delete mode 100644 app/Language/ja/Pager.php delete mode 100644 app/Language/ja/RESTful.php delete mode 100644 app/Language/ja/Redirect.php delete mode 100644 app/Language/ja/Router.php delete mode 100644 app/Language/ja/Session.php delete mode 100644 app/Language/ja/Time.php delete mode 100644 app/Language/ja/Validation.php delete mode 100644 app/Language/ja/View.php delete mode 100644 app/Language/ko/CLI.php delete mode 100644 app/Language/ko/Cache.php delete mode 100644 app/Language/ko/Cast.php delete mode 100644 app/Language/ko/Core.php delete mode 100644 app/Language/ko/Database.php delete mode 100644 app/Language/ko/Email.php delete mode 100644 app/Language/ko/Encryption.php delete mode 100644 app/Language/ko/Entity.php delete mode 100644 app/Language/ko/Files.php delete mode 100644 app/Language/ko/Filters.php delete mode 100644 app/Language/ko/Format.php delete mode 100644 app/Language/ko/HTTP.php delete mode 100644 app/Language/ko/Images.php delete mode 100644 app/Language/ko/Language.php delete mode 100644 app/Language/ko/Log.php delete mode 100644 app/Language/ko/Migrations.php delete mode 100644 app/Language/ko/Number.php delete mode 100644 app/Language/ko/Pager.php delete mode 100644 app/Language/ko/RESTful.php delete mode 100644 app/Language/ko/Redirect.php delete mode 100644 app/Language/ko/Router.php delete mode 100644 app/Language/ko/Session.php delete mode 100644 app/Language/ko/Time.php delete mode 100644 app/Language/ko/Validation.php delete mode 100644 app/Language/ko/View.php delete mode 100644 app/Language/lt/CLI.php delete mode 100644 app/Language/lt/Cache.php delete mode 100644 app/Language/lt/Cast.php delete mode 100644 app/Language/lt/Core.php delete mode 100644 app/Language/lt/Database.php delete mode 100644 app/Language/lt/Email.php delete mode 100644 app/Language/lt/Encryption.php delete mode 100644 app/Language/lt/Entity.php delete mode 100644 app/Language/lt/Files.php delete mode 100644 app/Language/lt/Filters.php delete mode 100644 app/Language/lt/Format.php delete mode 100644 app/Language/lt/HTTP.php delete mode 100644 app/Language/lt/Images.php delete mode 100644 app/Language/lt/Language.php delete mode 100644 app/Language/lt/Log.php delete mode 100644 app/Language/lt/Migrations.php delete mode 100644 app/Language/lt/Number.php delete mode 100644 app/Language/lt/Pager.php delete mode 100644 app/Language/lt/RESTful.php delete mode 100644 app/Language/lt/Redirect.php delete mode 100644 app/Language/lt/Router.php delete mode 100644 app/Language/lt/Session.php delete mode 100644 app/Language/lt/Time.php delete mode 100644 app/Language/lt/Validation.php delete mode 100644 app/Language/lt/View.php delete mode 100644 app/Language/ml/CLI.php delete mode 100644 app/Language/ml/Cache.php delete mode 100644 app/Language/ml/Cast.php delete mode 100644 app/Language/ml/Core.php delete mode 100644 app/Language/ml/Database.php delete mode 100644 app/Language/ml/Email.php delete mode 100644 app/Language/ml/Encryption.php delete mode 100644 app/Language/ml/Entity.php delete mode 100644 app/Language/ml/Files.php delete mode 100644 app/Language/ml/Filters.php delete mode 100644 app/Language/ml/Format.php delete mode 100644 app/Language/ml/HTTP.php delete mode 100644 app/Language/ml/Images.php delete mode 100644 app/Language/ml/Language.php delete mode 100644 app/Language/ml/Log.php delete mode 100644 app/Language/ml/Migrations.php delete mode 100644 app/Language/ml/Number.php delete mode 100644 app/Language/ml/Pager.php delete mode 100644 app/Language/ml/RESTful.php delete mode 100644 app/Language/ml/Redirect.php delete mode 100644 app/Language/ml/Router.php delete mode 100644 app/Language/ml/Session.php delete mode 100644 app/Language/ml/Time.php delete mode 100644 app/Language/ml/Validation.php delete mode 100644 app/Language/ml/View.php delete mode 100644 app/Language/nl/CLI.php delete mode 100644 app/Language/nl/Cache.php delete mode 100644 app/Language/nl/Cast.php delete mode 100644 app/Language/nl/Core.php delete mode 100644 app/Language/nl/Database.php delete mode 100644 app/Language/nl/Email.php delete mode 100644 app/Language/nl/Encryption.php delete mode 100644 app/Language/nl/Entity.php delete mode 100644 app/Language/nl/Files.php delete mode 100644 app/Language/nl/Filters.php delete mode 100644 app/Language/nl/Format.php delete mode 100644 app/Language/nl/HTTP.php delete mode 100644 app/Language/nl/Images.php delete mode 100644 app/Language/nl/Language.php delete mode 100644 app/Language/nl/Log.php delete mode 100644 app/Language/nl/Migrations.php delete mode 100644 app/Language/nl/Number.php delete mode 100644 app/Language/nl/Pager.php delete mode 100644 app/Language/nl/RESTful.php delete mode 100644 app/Language/nl/Redirect.php delete mode 100644 app/Language/nl/Router.php delete mode 100644 app/Language/nl/Session.php delete mode 100644 app/Language/nl/Time.php delete mode 100644 app/Language/nl/Validation.php delete mode 100644 app/Language/nl/View.php delete mode 100644 app/Language/no/CLI.php delete mode 100644 app/Language/no/Cache.php delete mode 100644 app/Language/no/Cast.php delete mode 100644 app/Language/no/Core.php delete mode 100644 app/Language/no/Database.php delete mode 100644 app/Language/no/Email.php delete mode 100644 app/Language/no/Encryption.php delete mode 100644 app/Language/no/Entity.php delete mode 100644 app/Language/no/Files.php delete mode 100644 app/Language/no/Filters.php delete mode 100644 app/Language/no/Format.php delete mode 100644 app/Language/no/HTTP.php delete mode 100644 app/Language/no/Images.php delete mode 100644 app/Language/no/Language.php delete mode 100644 app/Language/no/Log.php delete mode 100644 app/Language/no/Migrations.php delete mode 100644 app/Language/no/Number.php delete mode 100644 app/Language/no/Pager.php delete mode 100644 app/Language/no/RESTful.php delete mode 100644 app/Language/no/Redirect.php delete mode 100644 app/Language/no/Router.php delete mode 100644 app/Language/no/Session.php delete mode 100644 app/Language/no/Time.php delete mode 100644 app/Language/no/Validation.php delete mode 100644 app/Language/no/View.php delete mode 100644 app/Language/pl/CLI.php delete mode 100644 app/Language/pl/Cache.php delete mode 100644 app/Language/pl/Cast.php delete mode 100644 app/Language/pl/Core.php delete mode 100644 app/Language/pl/Database.php delete mode 100644 app/Language/pl/Email.php delete mode 100644 app/Language/pl/Encryption.php delete mode 100644 app/Language/pl/Entity.php delete mode 100644 app/Language/pl/Files.php delete mode 100644 app/Language/pl/Filters.php delete mode 100644 app/Language/pl/Format.php delete mode 100644 app/Language/pl/HTTP.php delete mode 100644 app/Language/pl/Images.php delete mode 100644 app/Language/pl/Language.php delete mode 100644 app/Language/pl/Log.php delete mode 100644 app/Language/pl/Migrations.php delete mode 100644 app/Language/pl/Number.php delete mode 100644 app/Language/pl/Pager.php delete mode 100644 app/Language/pl/RESTful.php delete mode 100644 app/Language/pl/Redirect.php delete mode 100644 app/Language/pl/Router.php delete mode 100644 app/Language/pl/Session.php delete mode 100644 app/Language/pl/Time.php delete mode 100644 app/Language/pl/Validation.php delete mode 100644 app/Language/pl/View.php delete mode 100644 app/Language/pt-BR/CLI.php delete mode 100644 app/Language/pt-BR/Cache.php delete mode 100644 app/Language/pt-BR/Cast.php delete mode 100644 app/Language/pt-BR/Core.php delete mode 100644 app/Language/pt-BR/Database.php delete mode 100644 app/Language/pt-BR/Email.php delete mode 100644 app/Language/pt-BR/Encryption.php delete mode 100644 app/Language/pt-BR/Entity.php delete mode 100644 app/Language/pt-BR/Files.php delete mode 100644 app/Language/pt-BR/Filters.php delete mode 100644 app/Language/pt-BR/Format.php delete mode 100644 app/Language/pt-BR/HTTP.php delete mode 100644 app/Language/pt-BR/Images.php delete mode 100644 app/Language/pt-BR/Language.php delete mode 100644 app/Language/pt-BR/Log.php delete mode 100644 app/Language/pt-BR/Migrations.php delete mode 100644 app/Language/pt-BR/Number.php delete mode 100644 app/Language/pt-BR/Pager.php delete mode 100644 app/Language/pt-BR/RESTful.php delete mode 100644 app/Language/pt-BR/Redirect.php delete mode 100644 app/Language/pt-BR/Router.php delete mode 100644 app/Language/pt-BR/Session.php delete mode 100644 app/Language/pt-BR/Time.php delete mode 100644 app/Language/pt-BR/Validation.php delete mode 100644 app/Language/pt-BR/View.php delete mode 100644 app/Language/pt/CLI.php delete mode 100644 app/Language/pt/Cache.php delete mode 100644 app/Language/pt/Cast.php delete mode 100644 app/Language/pt/Core.php delete mode 100644 app/Language/pt/Database.php delete mode 100644 app/Language/pt/Email.php delete mode 100644 app/Language/pt/Encryption.php delete mode 100644 app/Language/pt/Entity.php delete mode 100644 app/Language/pt/Files.php delete mode 100644 app/Language/pt/Filters.php delete mode 100644 app/Language/pt/Format.php delete mode 100644 app/Language/pt/HTTP.php delete mode 100644 app/Language/pt/Images.php delete mode 100644 app/Language/pt/Language.php delete mode 100644 app/Language/pt/Log.php delete mode 100644 app/Language/pt/Migrations.php delete mode 100644 app/Language/pt/Number.php delete mode 100644 app/Language/pt/Pager.php delete mode 100644 app/Language/pt/RESTful.php delete mode 100644 app/Language/pt/Redirect.php delete mode 100644 app/Language/pt/Router.php delete mode 100644 app/Language/pt/Session.php delete mode 100644 app/Language/pt/Time.php delete mode 100644 app/Language/pt/Validation.php delete mode 100644 app/Language/pt/View.php delete mode 100644 app/Language/ru/CLI.php delete mode 100644 app/Language/ru/Cache.php delete mode 100644 app/Language/ru/Cast.php delete mode 100644 app/Language/ru/Core.php delete mode 100644 app/Language/ru/Database.php delete mode 100644 app/Language/ru/Email.php delete mode 100644 app/Language/ru/Encryption.php delete mode 100644 app/Language/ru/Entity.php delete mode 100644 app/Language/ru/Fabricator.php delete mode 100644 app/Language/ru/Files.php delete mode 100644 app/Language/ru/Filters.php delete mode 100644 app/Language/ru/Format.php delete mode 100644 app/Language/ru/HTTP.php delete mode 100644 app/Language/ru/Images.php delete mode 100644 app/Language/ru/Language.php delete mode 100644 app/Language/ru/Log.php delete mode 100644 app/Language/ru/Migrations.php delete mode 100644 app/Language/ru/Number.php delete mode 100644 app/Language/ru/Pager.php delete mode 100644 app/Language/ru/RESTful.php delete mode 100644 app/Language/ru/Redirect.php delete mode 100644 app/Language/ru/Router.php delete mode 100644 app/Language/ru/Session.php delete mode 100644 app/Language/ru/Time.php delete mode 100644 app/Language/ru/Validation.php delete mode 100644 app/Language/ru/View.php delete mode 100644 app/Language/sk/CLI.php delete mode 100644 app/Language/sk/Cache.php delete mode 100644 app/Language/sk/Cast.php delete mode 100644 app/Language/sk/Core.php delete mode 100644 app/Language/sk/Database.php delete mode 100644 app/Language/sk/Email.php delete mode 100644 app/Language/sk/Encryption.php delete mode 100644 app/Language/sk/Entity.php delete mode 100644 app/Language/sk/Files.php delete mode 100644 app/Language/sk/Filters.php delete mode 100644 app/Language/sk/Format.php delete mode 100644 app/Language/sk/HTTP.php delete mode 100644 app/Language/sk/Images.php delete mode 100644 app/Language/sk/Language.php delete mode 100644 app/Language/sk/Log.php delete mode 100644 app/Language/sk/Migrations.php delete mode 100644 app/Language/sk/Number.php delete mode 100644 app/Language/sk/Pager.php delete mode 100644 app/Language/sk/RESTful.php delete mode 100644 app/Language/sk/Redirect.php delete mode 100644 app/Language/sk/Router.php delete mode 100644 app/Language/sk/Session.php delete mode 100644 app/Language/sk/Time.php delete mode 100644 app/Language/sk/Validation.php delete mode 100644 app/Language/sk/View.php delete mode 100644 app/Language/tr/CLI.php delete mode 100644 app/Language/tr/Cache.php delete mode 100644 app/Language/tr/Cast.php delete mode 100644 app/Language/tr/Core.php delete mode 100644 app/Language/tr/Database.php delete mode 100644 app/Language/tr/Email.php delete mode 100644 app/Language/tr/Encryption.php delete mode 100644 app/Language/tr/Entity.php delete mode 100644 app/Language/tr/Files.php delete mode 100644 app/Language/tr/Filters.php delete mode 100644 app/Language/tr/Format.php delete mode 100644 app/Language/tr/HTTP.php delete mode 100644 app/Language/tr/Images.php delete mode 100644 app/Language/tr/Language.php delete mode 100644 app/Language/tr/Log.php delete mode 100644 app/Language/tr/Migrations.php delete mode 100644 app/Language/tr/Number.php delete mode 100644 app/Language/tr/Pager.php delete mode 100644 app/Language/tr/RESTful.php delete mode 100644 app/Language/tr/Redirect.php delete mode 100644 app/Language/tr/Router.php delete mode 100644 app/Language/tr/Session.php delete mode 100644 app/Language/tr/Time.php delete mode 100644 app/Language/tr/Validation.php delete mode 100644 app/Language/tr/View.php delete mode 100644 app/Language/uk/CLI.php delete mode 100644 app/Language/uk/Cache.php delete mode 100644 app/Language/uk/Cast.php delete mode 100644 app/Language/uk/Core.php delete mode 100644 app/Language/uk/Database.php delete mode 100644 app/Language/uk/Email.php delete mode 100644 app/Language/uk/Encryption.php delete mode 100644 app/Language/uk/Entity.php delete mode 100644 app/Language/uk/Fabricator.php delete mode 100644 app/Language/uk/Files.php delete mode 100644 app/Language/uk/Filters.php delete mode 100644 app/Language/uk/Format.php delete mode 100644 app/Language/uk/HTTP.php delete mode 100644 app/Language/uk/Images.php delete mode 100644 app/Language/uk/Language.php delete mode 100644 app/Language/uk/Log.php delete mode 100644 app/Language/uk/Migrations.php delete mode 100644 app/Language/uk/Number.php delete mode 100644 app/Language/uk/Pager.php delete mode 100644 app/Language/uk/RESTful.php delete mode 100644 app/Language/uk/Redirect.php delete mode 100644 app/Language/uk/Router.php delete mode 100644 app/Language/uk/Session.php delete mode 100644 app/Language/uk/Time.php delete mode 100644 app/Language/uk/Validation.php delete mode 100644 app/Language/uk/View.php delete mode 100644 app/Language/vi/CLI.php delete mode 100644 app/Language/vi/Cache.php delete mode 100644 app/Language/vi/Cast.php delete mode 100644 app/Language/vi/Core.php delete mode 100644 app/Language/vi/Database.php delete mode 100644 app/Language/vi/Email.php delete mode 100644 app/Language/vi/Encryption.php delete mode 100644 app/Language/vi/Entity.php delete mode 100644 app/Language/vi/Files.php delete mode 100644 app/Language/vi/Filters.php delete mode 100644 app/Language/vi/Format.php delete mode 100644 app/Language/vi/HTTP.php delete mode 100644 app/Language/vi/Images.php delete mode 100644 app/Language/vi/Language.php delete mode 100644 app/Language/vi/Log.php delete mode 100644 app/Language/vi/Migrations.php delete mode 100644 app/Language/vi/Number.php delete mode 100644 app/Language/vi/Pager.php delete mode 100644 app/Language/vi/RESTful.php delete mode 100644 app/Language/vi/Redirect.php delete mode 100644 app/Language/vi/Router.php delete mode 100644 app/Language/vi/Session.php delete mode 100644 app/Language/vi/Time.php delete mode 100644 app/Language/vi/Validation.php delete mode 100644 app/Language/vi/View.php delete mode 100644 app/Language/zh-CN/CLI.php delete mode 100644 app/Language/zh-CN/Cache.php delete mode 100644 app/Language/zh-CN/Cast.php delete mode 100644 app/Language/zh-CN/Core.php delete mode 100644 app/Language/zh-CN/Database.php delete mode 100644 app/Language/zh-CN/Email.php delete mode 100644 app/Language/zh-CN/Encryption.php delete mode 100644 app/Language/zh-CN/Entity.php delete mode 100644 app/Language/zh-CN/Files.php delete mode 100644 app/Language/zh-CN/Filters.php delete mode 100644 app/Language/zh-CN/Format.php delete mode 100644 app/Language/zh-CN/HTTP.php delete mode 100644 app/Language/zh-CN/Images.php delete mode 100644 app/Language/zh-CN/Language.php delete mode 100644 app/Language/zh-CN/Log.php delete mode 100644 app/Language/zh-CN/Migrations.php delete mode 100644 app/Language/zh-CN/Number.php delete mode 100644 app/Language/zh-CN/Pager.php delete mode 100644 app/Language/zh-CN/RESTful.php delete mode 100644 app/Language/zh-CN/Redirect.php delete mode 100644 app/Language/zh-CN/Router.php delete mode 100644 app/Language/zh-CN/Session.php delete mode 100644 app/Language/zh-CN/Time.php delete mode 100644 app/Language/zh-CN/Validation.php delete mode 100644 app/Language/zh-CN/View.php delete mode 100644 app/Language/zh-TW/CLI.php delete mode 100644 app/Language/zh-TW/Cache.php delete mode 100644 app/Language/zh-TW/Cast.php delete mode 100644 app/Language/zh-TW/Core.php delete mode 100644 app/Language/zh-TW/Database.php delete mode 100644 app/Language/zh-TW/Email.php delete mode 100644 app/Language/zh-TW/Encryption.php delete mode 100644 app/Language/zh-TW/Entity.php delete mode 100644 app/Language/zh-TW/Files.php delete mode 100644 app/Language/zh-TW/Filters.php delete mode 100644 app/Language/zh-TW/Format.php delete mode 100644 app/Language/zh-TW/HTTP.php delete mode 100644 app/Language/zh-TW/Images.php delete mode 100644 app/Language/zh-TW/Language.php delete mode 100644 app/Language/zh-TW/Log.php delete mode 100644 app/Language/zh-TW/Migrations.php delete mode 100644 app/Language/zh-TW/Number.php delete mode 100644 app/Language/zh-TW/Pager.php delete mode 100644 app/Language/zh-TW/RESTful.php delete mode 100644 app/Language/zh-TW/Redirect.php delete mode 100644 app/Language/zh-TW/Router.php delete mode 100644 app/Language/zh-TW/Session.php delete mode 100644 app/Language/zh-TW/Time.php delete mode 100644 app/Language/zh-TW/Validation.php delete mode 100644 app/Language/zh-TW/View.php delete mode 100644 app/Libraries/.gitkeep delete mode 100644 app/Models/Model_attributes.php delete mode 100644 app/Models/Model_brands.php delete mode 100644 app/Models/Model_category.php delete mode 100644 app/Models/Model_company.php delete mode 100644 app/Models/Model_groups.php delete mode 100644 app/Models/Model_orders.php delete mode 100644 app/Models/Model_products.php delete mode 100644 app/Models/Model_stores.php delete mode 100644 app/Models/Model_users.php delete mode 100644 app/ThirdParty/.gitkeep delete mode 100644 app/Views/errors/cli/error_404.php delete mode 100644 app/Views/errors/cli/error_exception.php delete mode 100644 app/Views/errors/cli/production.php delete mode 100644 app/Views/errors/html/debug.css delete mode 100644 app/Views/errors/html/debug.js delete mode 100644 app/Views/errors/html/error_404.php delete mode 100644 app/Views/errors/html/error_exception.php delete mode 100644 app/Views/errors/html/production.php delete mode 100644 app/config/autoload.php delete mode 100644 app/config/constants.php delete mode 100644 app/config/database.php delete mode 100644 app/config/doctypes.php delete mode 100644 app/config/mimes.php delete mode 100644 app/config/routes.php create mode 100644 application/.DS_Store rename {app => application}/.htaccess (90%) rename {app/Models => application/cache}/index.html (100%) create mode 100644 application/config/autoload.php create mode 100644 application/config/config.php create mode 100644 application/config/constants.php create mode 100644 application/config/database.php create mode 100644 application/config/doctypes.php create mode 100644 application/config/foreign_chars.php create mode 100644 application/config/hooks.php rename {app/Views/errors/cli => application/config}/index.html (100%) create mode 100644 application/config/memcached.php create mode 100644 application/config/migration.php create mode 100644 application/config/mimes.php create mode 100644 application/config/profiler.php create mode 100644 application/config/routes.php create mode 100644 application/config/smileys.php create mode 100644 application/config/user_agents.php rename {app/Controllers => application/controllers}/Attributes.php (64%) create mode 100644 application/controllers/Auth.php rename {app/Controllers => application/controllers}/Brands.php (69%) rename {app/Controllers => application/controllers}/Category.php (65%) create mode 100644 application/controllers/Company.php rename {app/Controllers => application/controllers}/Dashboard.php (65%) rename {app/Controllers => application/controllers}/Groups.php (51%) rename {app/Controllers => application/controllers}/Orders.php (63%) create mode 100644 application/controllers/Products.php rename {app/Controllers => application/controllers}/Reports.php (76%) rename {app/Controllers => application/controllers}/Stores.php (67%) create mode 100644 application/controllers/Users.php rename {app/Views/errors/html => application/controllers}/index.html (100%) rename app/Controllers/Admin_Controller.php => application/core/MY_Controller.php (79%) rename {app/Views/errors => application/core}/index.html (100%) rename {app/Views => application/helpers}/index.html (100%) rename {app => application/hooks}/index.html (100%) rename {writable/cache => application}/index.html (100%) rename {writable/logs => application/language/english}/index.html (100%) rename {writable/session => application/language}/index.html (100%) rename {writable/uploads => application/libraries}/index.html (100%) create mode 100644 application/logs/index.html rename {app/Models => application/models}/.DS_Store (100%) create mode 100644 application/models/Model_attributes.php rename {app/Models => application/models}/Model_auth.php (68%) create mode 100644 application/models/Model_brands.php create mode 100644 application/models/Model_category.php create mode 100644 application/models/Model_company.php create mode 100644 application/models/Model_groups.php create mode 100644 application/models/Model_orders.php create mode 100644 application/models/Model_products.php rename {app/Models => application/models}/Model_reports.php (80%) create mode 100644 application/models/Model_stores.php create mode 100644 application/models/Model_users.php create mode 100644 application/models/index.html create mode 100644 application/third_party/index.html rename {app/Views => application/views}/attributes/addvalue.php (90%) rename {app/Views => application/views}/attributes/index.php (89%) rename {app/Views => application/views}/brands/index.php (89%) rename {app/Views => application/views}/category/index.php (89%) rename {app/Views => application/views}/company/index.php (80%) rename {app/Views => application/views}/dashboard.php (90%) rename app/Views/errors/cli/error_general.php => application/views/errors/cli/error_404.php (100%) rename {app/Views => application/views}/errors/cli/error_db.php (100%) create mode 100644 application/views/errors/cli/error_exception.php create mode 100644 application/views/errors/cli/error_general.php rename {app/Views => application/views}/errors/cli/error_php.php (89%) create mode 100644 application/views/errors/cli/index.html create mode 100644 application/views/errors/html/error_404.php rename {app/Views => application/views}/errors/html/error_db.php (92%) create mode 100644 application/views/errors/html/error_exception.php rename {app/Views => application/views}/errors/html/error_general.php (92%) rename {app/Views => application/views}/errors/html/error_php.php (91%) create mode 100644 application/views/errors/html/index.html create mode 100644 application/views/errors/index.html rename {app/Views => application/views}/groups/create.php (83%) rename {app/Views => application/views}/groups/delete.php (77%) rename {app/Views => application/views}/groups/edit.php (90%) rename {app/Views => application/views}/groups/index.php (79%) create mode 100644 application/views/index.html rename {app/Views => application/views}/login.php (95%) rename {app/Views => application/views}/orders/create.php (92%) rename {app/Views => application/views}/orders/edit.php (81%) rename {app/Views => application/views}/orders/index.php (86%) rename {app/Views => application/views}/products/create.php (77%) rename {app/Views => application/views}/products/edit.php (67%) rename {app/Views => application/views}/products/index.php (77%) rename {app/Views => application/views}/reports/index.php (95%) rename {app/Views => application/views}/stores/index.php (89%) rename {app/Views => application/views}/templates/footer.php (76%) rename {app/Views => application/views}/templates/header.php (100%) rename {app/Views => application/views}/templates/header_menu.php (76%) rename {app/Views => application/views}/templates/side_menubar.php (79%) rename {app/Views => application/views}/users/create.php (82%) rename {app/Views => application/views}/users/delete.php (77%) rename {app/Views => application/views}/users/edit.php (80%) rename {app/Views => application/views}/users/index.php (76%) rename {app/Views => application/views}/users/profile.php (75%) rename {app/Views => application/views}/users/setting.php (81%) create mode 100644 application/views/welcome_message.php rename {public/assets => assets}/.DS_Store (100%) rename {public/assets => assets}/bower_components/.DS_Store (100%) rename {public/assets => assets}/bower_components/Flot/.bower.json (100%) rename {public/assets => assets}/bower_components/Flot/.gitignore (100%) rename {public/assets => assets}/bower_components/Flot/.travis.yml (100%) rename {public/assets => assets}/bower_components/Flot/API.md (100%) rename {public/assets => assets}/bower_components/Flot/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/Flot/FAQ.md (100%) rename {public/assets => assets}/bower_components/Flot/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/Flot/Makefile (100%) rename {public/assets => assets}/bower_components/Flot/NEWS.md (100%) rename {public/assets => assets}/bower_components/Flot/PLUGINS.md (100%) rename {public/assets => assets}/bower_components/Flot/README.md (100%) rename {public/assets => assets}/bower_components/Flot/component.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth-1.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth-2.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth-3.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth-4.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth-5.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-eu-gdp-growth.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-japan-gdp-growth.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/data-usa-gdp-growth.json (100%) rename {public/assets => assets}/bower_components/Flot/examples/ajax/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/annotating/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-interacting/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-multiple/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/date.js (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/africa (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/antarctica (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/asia (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/australasia (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/backward (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/etcetera (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/europe (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/factory (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/iso3166.tab (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/leapseconds (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/northamerica (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/pacificnew (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/solar87 (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/solar88 (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/solar89 (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/southamerica (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/systemv (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/yearistype.sh (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time-zones/tz/zone.tab (100%) rename {public/assets => assets}/bower_components/Flot/examples/axes-time/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/background.png (100%) rename {public/assets => assets}/bower_components/Flot/examples/basic-options/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/basic-usage/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/canvas/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/categories/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/examples.css (100%) rename {public/assets => assets}/bower_components/Flot/examples/image/hs-2004-27-a-large-web.jpg (100%) rename {public/assets => assets}/bower_components/Flot/examples/image/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/interacting/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/navigate/arrow-down.gif (100%) rename {public/assets => assets}/bower_components/Flot/examples/navigate/arrow-left.gif (100%) rename {public/assets => assets}/bower_components/Flot/examples/navigate/arrow-right.gif (100%) rename {public/assets => assets}/bower_components/Flot/examples/navigate/arrow-up.gif (100%) rename {public/assets => assets}/bower_components/Flot/examples/navigate/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/percentiles/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/realtime/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/resize/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/selection/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/series-errorbars/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/series-pie/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/series-toggle/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/series-types/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/shared/jquery-ui/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/Flot/examples/stacking/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/symbols/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/threshold/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/tracking/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/visitors/index.html (100%) rename {public/assets => assets}/bower_components/Flot/examples/zooming/index.html (100%) rename {public/assets => assets}/bower_components/Flot/excanvas.js (100%) rename {public/assets => assets}/bower_components/Flot/excanvas.min.js (100%) rename {public/assets => assets}/bower_components/Flot/flot.jquery.json (100%) rename {public/assets => assets}/bower_components/Flot/jquery.colorhelpers.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.canvas.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.categories.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.crosshair.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.errorbars.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.fillbetween.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.image.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.navigate.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.pie.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.resize.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.selection.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.stack.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.symbol.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.threshold.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.flot.time.js (100%) rename {public/assets => assets}/bower_components/Flot/jquery.js (100%) rename {public/assets => assets}/bower_components/Flot/package.json (100%) rename {public/assets => assets}/bower_components/Ionicons/.bower.json (100%) rename {public/assets => assets}/bower_components/Ionicons/LICENSE (100%) rename {public/assets => assets}/bower_components/Ionicons/bower.json (100%) rename {public/assets => assets}/bower_components/Ionicons/cheatsheet.html (100%) rename {public/assets => assets}/bower_components/Ionicons/component.json (100%) rename {public/assets => assets}/bower_components/Ionicons/composer.json (100%) rename {public/assets => assets}/bower_components/Ionicons/css/ionicons.css (100%) rename {public/assets => assets}/bower_components/Ionicons/css/ionicons.min.css (100%) rename {public/assets => assets}/bower_components/Ionicons/fonts/ionicons.eot (100%) rename {public/assets => assets}/bower_components/Ionicons/fonts/ionicons.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/fonts/ionicons.ttf (100%) rename {public/assets => assets}/bower_components/Ionicons/fonts/ionicons.woff (100%) rename {public/assets => assets}/bower_components/Ionicons/less/_ionicons-font.less (100%) rename {public/assets => assets}/bower_components/Ionicons/less/_ionicons-icons.less (100%) rename {public/assets => assets}/bower_components/Ionicons/less/_ionicons-variables.less (100%) rename {public/assets => assets}/bower_components/Ionicons/less/ionicons.less (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/alert-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/alert.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-add-contact.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-add.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-alarm.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-archive.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-back.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-down-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-down-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-forward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-up-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-arrow-up-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-battery.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-book.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-calendar.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-call.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-camera.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-chat.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-checkmark.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-clock.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-close.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-contact.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-contacts.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-data.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-developer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-display.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-download.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-drawer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-dropdown.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-earth.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-folder.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-forums.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-friends.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-hand.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-image.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-inbox.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-information.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-keypad.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-lightbulb.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-locate.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-location.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-mail.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-microphone.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-mixer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-more.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-note.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-playstore.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-printer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-promotion.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-reminder.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-remove.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-search.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-send.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-settings.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-share.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-social-user.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-social.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-sort.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-stair-drawer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-star.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-stopwatch.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-storage.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-system-back.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-system-home.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-system-windows.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-timer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-trash.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-user-menu.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-volume.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/android-wifi.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/aperture.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/archive.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-down-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-down-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-down-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-expand.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-graph-down-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-graph-down-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-graph-up-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-graph-up-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-left-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-left-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-left-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-move.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-resize.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-return-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-return-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-right-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-right-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-right-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-shrink.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-swap.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-up-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-up-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/arrow-up-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/asterisk.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/at.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/bag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/battery-charging.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/battery-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/battery-full.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/battery-half.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/battery-low.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/beaker.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/beer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/bluetooth.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/bonfire.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/bookmark.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/briefcase.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/bug.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/calculator.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/calendar.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/camera.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/card.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/cash.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatbox-working.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatbox.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatboxes.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatbubble-working.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatbubble.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chatbubbles.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/checkmark-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/checkmark-round.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/checkmark.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chevron-down.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chevron-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chevron-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/chevron-up.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/clipboard.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/clock.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/close-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/close-round.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/close.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/closed-captioning.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/cloud.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/code-download.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/code-working.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/code.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/coffee.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/compass.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/compose.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/connection-bars.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/contrast.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/cube.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/disc.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/document-text.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/document.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/drag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/earth.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/edit.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/egg.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/eject.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/email.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/eye-disabled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/eye.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/female.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/filing.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/film-marker.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/fireball.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/flag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/flame.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/flash-off.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/flash.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/flask.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/folder.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/fork-repo.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/fork.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/forward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/funnel.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/game-controller-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/game-controller-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/gear-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/gear-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/grid.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/hammer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/happy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/headphone.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/heart-broken.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/heart.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/help-buoy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/help-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/help.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/home.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/icecream.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/icon-social-google-plus-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/icon-social-google-plus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/image.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/images.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/information-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/information.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ionic.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-alarm-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-alarm.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-albums-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-albums.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-americanfootball-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-americanfootball.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-analytics-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-analytics.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-back.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-down.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-forward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-thin-down.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-thin-left.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-thin-right.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-thin-up.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-arrow-up.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-at-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-at.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-barcode-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-barcode.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-baseball-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-baseball.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-basketball-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-basketball.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bell-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bell.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bolt-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bolt.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bookmarks-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-bookmarks.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-box-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-box.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-briefcase-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-briefcase.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-browsers-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-browsers.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-calculator-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-calculator.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-calendar-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-calendar.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-camera-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-camera.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cart-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cart.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-chatboxes-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-chatboxes.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-chatbubble-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-chatbubble.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-checkmark-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-checkmark-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-checkmark.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-circle-filled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-circle-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-clock-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-clock.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-close-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-close-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-close.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud-download-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud-download.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud-upload-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud-upload.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloud.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloudy-night-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloudy-night.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloudy-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cloudy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cog-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-cog.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-compose-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-compose.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-contact-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-contact.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-copy-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-copy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-download-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-download.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-drag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-email-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-email.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-expand.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-eye-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-eye.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-fastforward-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-fastforward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-filing-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-filing.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-film-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-film.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-flag-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-flag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-folder-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-folder.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-football-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-football.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-gear-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-gear.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-glasses-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-glasses.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-heart-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-heart.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-help-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-help-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-help.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-home-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-home.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-infinite-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-infinite.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-information-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-information-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-information.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-ionic-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-keypad-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-keypad.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-lightbulb-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-lightbulb.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-location-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-location.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-locked-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-locked.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-loop-strong.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-loop.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-medkit-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-medkit.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-mic-off.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-mic-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-mic.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-minus-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-minus-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-minus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-monitor-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-monitor.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-moon-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-moon.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-more-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-more.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-musical-note.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-musical-notes.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-navigate-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-navigate.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paper-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paper.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paperplane-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paperplane.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-partlysunny-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-partlysunny.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pause-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pause.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paw-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-paw.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-people-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-people.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-person-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-person.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-personadd-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-personadd.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-photos-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-photos.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pie-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pie.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-play-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-play.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-plus-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-plus-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-plus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pricetag-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pricetag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pricetags-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pricetags.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-printer-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-printer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pulse-strong.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-pulse.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-rainy-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-rainy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-recording-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-recording.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-redo-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-redo.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-refresh-empty.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-refresh-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-refresh.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-reload.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-reverse-camera-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-reverse-camera.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-rewind-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-rewind.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-search-strong.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-search.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-settings-strong.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-settings.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-shrink.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-skipbackward-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-skipbackward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-skipforward-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-skipforward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-snowy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-speedometer-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-speedometer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-star-half.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-star-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-star.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-stopwatch-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-stopwatch.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-sunny-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-sunny.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-telephone-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-telephone.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-tennisball-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-tennisball.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-thunderstorm-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-thunderstorm.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-time-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-time.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-timer-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-timer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-toggle-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-toggle.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-trash-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-trash.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-undo-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-undo.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-unlocked-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-unlocked.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-upload-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-upload.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-videocam-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-videocam.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-volume-high.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-volume-low.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-wineglass-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-wineglass.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-world-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ios7-world.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ipad.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/iphone.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ipod.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/jet.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/key.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/knife.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/laptop.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/leaf.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/levels.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/lightbulb.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/link.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/load-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/load-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/load-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/load-d.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/location.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/locked.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/log-in.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/log-out.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/loop.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/magnet.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/male.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/man.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/map.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/medkit.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/merge.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/mic-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/mic-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/mic-c.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/minus-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/minus-round.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/minus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/model-s.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/monitor.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/more.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/mouse.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/music-note.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/navicon-round.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/navicon.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/navigate.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/network.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/no-smoking.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/nuclear.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/outlet.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/paper-airplane.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/paperclip.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pause.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/person-add.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/person-stalker.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/person.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pie-graph.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pin.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pinpoint.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pizza.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/plane.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/planet.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/play.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/playstation.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/plus-circled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/plus-round.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/plus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/podium.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pound.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/power.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pricetag.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pricetags.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/printer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/pull-request.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/qr-scanner.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/quote.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/radio-waves.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/record.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/refresh.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/reply-all.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/reply.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ribbon-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/ribbon-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/sad.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/scissors.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/search.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/settings.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/share.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/shuffle.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/skip-backward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/skip-forward.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-android-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-android.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-apple-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-apple.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-bitcoin-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-bitcoin.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-buffer-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-buffer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-designernews-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-designernews.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-dribbble-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-dribbble.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-dropbox-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-dropbox.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-facebook-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-facebook.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-foursquare-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-foursquare.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-freebsd-devil.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-github-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-github.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-google-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-google.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-googleplus-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-googleplus.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-hackernews-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-hackernews.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-instagram-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-instagram.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-linkedin-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-linkedin.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-pinterest-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-pinterest.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-reddit-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-reddit.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-rss-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-rss.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-skype-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-skype.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-tumblr-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-tumblr.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-tux.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-twitter-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-twitter.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-usd-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-usd.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-vimeo-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-vimeo.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-windows-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-windows.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-wordpress-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-wordpress.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-yahoo-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-yahoo.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-youtube-outline.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/social-youtube.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/speakerphone.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/speedometer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/spoon.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/star.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/stats-bars.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/steam.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/stop.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/thermometer.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/thumbsdown.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/thumbsup.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/toggle-filled.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/toggle.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/trash-a.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/trash-b.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/trophy.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/umbrella.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/university.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/unlocked.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/upload.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/usb.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/videocamera.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/volume-high.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/volume-low.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/volume-medium.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/volume-mute.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/wand.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/waterdrop.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/wifi.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/wineglass.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/woman.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/wrench.png (100%) rename {public/assets => assets}/bower_components/Ionicons/png/512/xbox.png (100%) rename {public/assets => assets}/bower_components/Ionicons/readme.md (100%) rename {public/assets => assets}/bower_components/Ionicons/scss/_ionicons-font.scss (100%) rename {public/assets => assets}/bower_components/Ionicons/scss/_ionicons-icons.scss (100%) rename {public/assets => assets}/bower_components/Ionicons/scss/_ionicons-variables.scss (100%) rename {public/assets => assets}/bower_components/Ionicons/scss/ionicons.scss (100%) rename {public/assets => assets}/bower_components/Ionicons/src/alert-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/alert.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-add-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-add.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-alarm-clock.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-alert.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-apps.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-archive.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-back.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-down.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropdown-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropdown.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropleft-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropleft.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropright-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropright.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropup-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-dropup.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-forward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-arrow-up.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-attach.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-bar.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-bicycle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-boat.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-bookmark.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-bulb.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-bus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-calendar.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-call.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-camera.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cancel.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-car.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cart.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-chat.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-checkbox-blank.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-checkbox-outline-blank.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-checkbox-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-checkbox.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-checkmark-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-clipboard.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-close.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cloud-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cloud-done.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cloud-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-cloud.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-color-palette.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-compass.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-contact.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-contacts.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-contract.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-create.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-delete.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-desktop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-document.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-done-all.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-done.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-download.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-drafts.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-exit.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-expand.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-favorite-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-favorite.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-film.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-folder-open.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-folder.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-funnel.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-globe.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-hand.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-hangout.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-happy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-home.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-image.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-laptop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-list.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-locate.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-lock.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-mail.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-map.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-menu.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-microphone-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-microphone.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-more-horizontal.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-more-vertical.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-navigate.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-notifications-none.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-notifications-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-notifications.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-open.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-options.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-people.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-person-add.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-person.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-phone-landscape.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-phone-portrait.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-pin.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-plane.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-playstore.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-print.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-radio-button-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-radio-button-on.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-refresh.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-remove-circle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-remove.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-restaurant.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-sad.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-search.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-send.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-settings.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-share-alt.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-share.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-star-half.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-star-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-star.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-stopwatch.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-subway.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-sunny.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-sync.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-textsms.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-time.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-train.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-unlock.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-upload.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-volume-down.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-volume-mute.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-volume-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-volume-up.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-walk.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-warning.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-watch.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/android-wifi.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/aperture.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/archive.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-down-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-down-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-down-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-expand.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-graph-down-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-graph-down-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-graph-up-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-graph-up-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-left-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-left-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-left-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-move.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-resize.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-return-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-return-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-right-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-right-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-right-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-shrink.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-swap.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-up-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-up-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/arrow-up-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/asterisk.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/at.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/backspace-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/backspace.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/battery-charging.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/battery-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/battery-full.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/battery-half.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/battery-low.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/beaker.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/beer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bluetooth.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bonfire.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bookmark.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bowtie.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/briefcase.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/bug.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/calculator.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/calendar.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/camera.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/card.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/cash.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatbox-working.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatbox.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatboxes.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatbubble-working.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatbubble.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chatbubbles.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/checkmark-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/checkmark-round.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/checkmark.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chevron-down.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chevron-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chevron-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/chevron-up.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/clipboard.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/clock.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/close-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/close-round.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/close.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/closed-captioning.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/cloud.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/code-download.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/code-working.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/code.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/coffee.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/compass.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/compose.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/connection-bars.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/contrast.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/crop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/cube.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/disc.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/document-text.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/document.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/drag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/earth.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/easel.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/edit.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/egg.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/eject.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/email-unread.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/email.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/erlenmeyer-flask-bubbles.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/erlenmeyer-flask.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/eye-disabled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/eye.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/female.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/filing.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/film-marker.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/fireball.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/flag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/flame.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/flash-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/flash.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/folder.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/fork-repo.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/fork.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/forward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/funnel.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/gear-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/gear-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/grid.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/hammer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/happy-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/happy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/headphone.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/heart-broken.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/heart.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/help-buoy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/help-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/help.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/home.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/icecream.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/image.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/images.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/information-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/information.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ionic.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-alarm-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-alarm.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-albums-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-albums.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-americanfootball-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-americanfootball.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-analytics-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-analytics.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-back.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-down.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-forward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-thin-down.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-thin-left.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-thin-right.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-thin-up.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-arrow-up.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-at-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-at.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-barcode-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-barcode.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-baseball-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-baseball.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-basketball-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-basketball.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bell-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bell.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-body-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-body.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bolt-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bolt.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-book-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-book.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bookmarks-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-bookmarks.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-box-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-box.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-briefcase-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-briefcase.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-browsers-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-browsers.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-calculator-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-calculator.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-calendar-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-calendar.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-camera-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-camera.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cart-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cart.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-chatboxes-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-chatboxes.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-chatbubble-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-chatbubble.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-checkmark-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-checkmark-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-checkmark.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-circle-filled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-circle-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-clock-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-clock.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-close-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-close-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-close.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud-download-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud-download.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud-upload-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud-upload.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloud.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloudy-night-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloudy-night.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloudy-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cloudy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cog-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-cog.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-color-filter-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-color-filter.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-color-wand-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-color-wand.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-compose-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-compose.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-contact-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-contact.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-copy-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-copy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-crop-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-crop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-download-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-download.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-drag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-email-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-email.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-eye-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-eye.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-fastforward-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-fastforward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-filing-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-filing.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-film-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-film.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flag-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flame-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flame.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flask-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flask.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flower-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-flower.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-folder-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-folder.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-football-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-football.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-game-controller-a-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-game-controller-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-game-controller-b-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-game-controller-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-gear-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-gear.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-glasses-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-glasses.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-grid-view-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-grid-view.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-heart-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-heart.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-help-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-help-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-help.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-home-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-home.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-infinite-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-infinite.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-information-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-information-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-information.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-ionic-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-keypad-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-keypad.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-lightbulb-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-lightbulb.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-list-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-list.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-location-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-location.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-locked-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-locked.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-loop-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-loop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-medical-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-medical.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-medkit-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-medkit.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-mic-off.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-mic-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-mic.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-minus-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-minus-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-minus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-monitor-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-monitor.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-moon-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-moon.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-more-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-more.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-musical-note.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-musical-notes.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-navigate-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-navigate.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-nutrition-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-nutrition.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paper-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paper.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paperplane-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paperplane.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-partlysunny-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-partlysunny.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pause-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pause.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paw-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-paw.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-people-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-people.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-person-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-person.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-personadd-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-personadd.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-photos-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-photos.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pie-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pie.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pint-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pint.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-play-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-play.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-plus-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-plus-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-plus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pricetag-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pricetag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pricetags-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pricetags.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-printer-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-printer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pulse-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-pulse.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rainy-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rainy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-recording-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-recording.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-redo-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-redo.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-refresh-empty.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-refresh-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-refresh.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-reload.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-reverse-camera-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-reverse-camera.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rewind-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rewind.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rose-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-rose.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-search-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-search.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-settings-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-settings.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-shuffle-strong.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-shuffle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-skipbackward-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-skipbackward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-skipforward-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-skipforward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-snowy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-speedometer-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-speedometer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-star-half.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-star-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-star.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-stopwatch-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-stopwatch.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-sunny-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-sunny.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-telephone-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-telephone.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-tennisball-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-tennisball.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-thunderstorm-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-thunderstorm.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-time-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-time.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-timer-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-timer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-toggle-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-toggle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-trash-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-trash.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-undo-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-undo.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-unlocked-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-unlocked.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-upload-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-upload.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-videocam-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-videocam.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-volume-high.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-volume-low.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-wineglass-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-wineglass.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-world-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ios-world.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ipad.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/iphone.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ipod.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/jet.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/key.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/knife.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/laptop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/leaf.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/levels.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/lightbulb.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/link.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/load-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/load-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/load-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/load-d.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/location.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/lock-combination.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/locked.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/log-in.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/log-out.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/loop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/magnet.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/male.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/man.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/map.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/medkit.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/merge.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/mic-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/mic-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/mic-c.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/minus-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/minus-round.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/minus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/model-s.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/monitor.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/more.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/mouse.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/music-note.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/navicon-round.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/navicon.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/navigate.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/network.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/no-smoking.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/nuclear.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/outlet.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/paintbrush.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/paintbucket.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/paper-airplane.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/paperclip.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pause.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/person-add.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/person-stalker.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/person.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pie-graph.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pin.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pinpoint.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pizza.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/plane.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/planet.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/play.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/playstation.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/plus-circled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/plus-round.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/plus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/podium.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pound.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/power.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pricetag.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pricetags.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/printer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/pull-request.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/qr-scanner.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/quote.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/radio-waves.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/record.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/refresh.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/reply-all.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/reply.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ribbon-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/ribbon-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/sad-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/sad.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/scissors.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/search.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/settings.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/share.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/shuffle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/skip-backward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/skip-forward.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-android-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-android.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-angular-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-angular.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-apple-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-apple.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-bitcoin-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-bitcoin.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-buffer-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-buffer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-chrome-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-chrome.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-codepen-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-codepen.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-css3-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-css3.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-designernews-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-designernews.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-dribbble-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-dribbble.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-dropbox-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-dropbox.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-euro-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-euro.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-facebook-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-facebook.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-foursquare-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-foursquare.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-freebsd-devil.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-github-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-github.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-google-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-google.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-googleplus-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-googleplus.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-hackernews-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-hackernews.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-html5-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-html5.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-instagram-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-instagram.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-javascript-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-javascript.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-linkedin-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-linkedin.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-markdown.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-nodejs.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-octocat.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-pinterest-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-pinterest.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-python.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-reddit-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-reddit.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-rss-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-rss.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-sass.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-skype-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-skype.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-snapchat-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-snapchat.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-tumblr-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-tumblr.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-tux.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-twitch-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-twitch.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-twitter-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-twitter.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-usd-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-usd.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-vimeo-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-vimeo.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-whatsapp-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-whatsapp.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-windows-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-windows.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-wordpress-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-wordpress.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-yahoo-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-yahoo.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-yen-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-yen.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-youtube-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/social-youtube.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/soup-can-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/soup-can.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/speakerphone.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/speedometer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/spoon.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/star.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/stats-bars.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/steam.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/stop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/thermometer.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/thumbsdown.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/thumbsup.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/toggle-filled.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/toggle.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/transgender.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/trash-a.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/trash-b.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/trophy.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/tshirt-outline.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/tshirt.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/umbrella.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/university.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/unlocked.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/upload.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/usb.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/videocamera.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/volume-high.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/volume-low.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/volume-medium.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/volume-mute.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/wand.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/waterdrop.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/wifi.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/wineglass.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/woman.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/wrench.svg (100%) rename {public/assets => assets}/bower_components/Ionicons/src/xbox.svg (100%) rename {public/assets => assets}/bower_components/PACE/.bower.json (100%) rename {public/assets => assets}/bower_components/PACE/LICENSE (100%) rename {public/assets => assets}/bower_components/PACE/README.md (100%) rename {public/assets => assets}/bower_components/PACE/bower.json (100%) rename {public/assets => assets}/bower_components/PACE/install.json (100%) rename {public/assets => assets}/bower_components/PACE/pace.coffee (100%) rename {public/assets => assets}/bower_components/PACE/pace.js (100%) rename {public/assets => assets}/bower_components/PACE/pace.min.js (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/black/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/blue/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/green/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/orange/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/pink/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/purple/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/red/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/silver/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/white/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-barber-shop.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-big-counter.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-bounce.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-center-atom.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-center-circle.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-center-radar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-center-simple.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-corner-indicator.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-fill-left.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-flash.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-flat-top.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-loading-bar.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-mac-osx.css (100%) rename {public/assets => assets}/bower_components/PACE/themes/yellow/pace-theme-minimal.css (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/LICENSE (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/img/bootstrap-colorpicker/alpha-horizontal.png (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/img/bootstrap-colorpicker/alpha.png (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/img/bootstrap-colorpicker/hue-horizontal.png (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/img/bootstrap-colorpicker/hue.png (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/img/bootstrap-colorpicker/saturation.png (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/assets/main.css (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/helpers/code/index.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/api.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/example.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/01_basic.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/02_component.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/03_component_options.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/04_events.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/05_transparent.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/06_horizontal.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/07_inline.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/08_palette.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/09_size.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/10_disabled.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/examples/11_modal.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/includes/social.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/layout.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/docs/pages/index.hbs (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/serve.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/js/colorpicker-color.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/js/colorpicker-component.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/js/colorpicker-defaults.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/js/colorpicker-plugin-wrapper.js (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/less/colorpicker.less (100%) rename {public/assets => assets}/bower_components/bootstrap-colorpicker/src/sass/_colorpicker.scss (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.editorconfig (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.github/ISSUE_TEMPLATE.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.github/PULL_REQUEST_TEMPLATE.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.gitignore (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/.travis.yml (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/CODE_OF_CONDUCT.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/Gruntfile.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/LICENSE (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/build/build.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/build/build3.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/build/build_standalone.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/build/build_standalone3.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/composer.json (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.standalone.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.standalone.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.standalone.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.standalone.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.standalone.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.standalone.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker-en-CA.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ar-tn.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ar.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.az.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.bg.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.bn.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.br.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.bs.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ca.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.cs.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.cy.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.da.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.de.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.el.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.en-AU.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.en-GB.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.en-IE.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.en-NZ.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.en-ZA.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.eo.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.es.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.et.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.eu.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.fa.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.fi.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.fo.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.fr-CH.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.fr.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.gl.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.he.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.hi.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.hr.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.hu.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.hy.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.id.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.is.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.it-CH.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.it.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ja.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ka.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.kh.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.kk.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.km.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ko.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.kr.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.lt.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.lv.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.me.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.mk.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.mn.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ms.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.nb.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.nl-BE.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.nl.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.no.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.oc.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.pl.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.pt-BR.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.pt.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ro.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.rs-latin.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.rs.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ru.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.si.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sk.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sl.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sq.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sr-latin.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sr.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sv.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.sw.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.ta.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.tg.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.th.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.tr.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.uk.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.uz-cyrl.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.uz-latn.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.vi.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.zh-CN.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.zh-TW.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/Makefile (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/demo_head.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/markup_component.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/markup_daterange.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/markup_inline.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/markup_input.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_calendarweeks.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_clearbtn.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_daysofweekdisabled.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_enddate.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_language.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_multidate.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_startdate.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_todaybtn.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_todayhighlight.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/option_weekstart.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/script/common.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/script/common.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/script/debug.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/script/html-imports.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_screenshots/script/screenshot.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/demo_head.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/markup_component.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/markup_daterange.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/markup_inline.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/markup_input.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_calendarweeks.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_clearbtn.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_daysofweekdisabled.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_enddate.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_language.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_multidate.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_startdate.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_todaybtn.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_todayhighlight.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/_static/screenshots/option_weekstart.png (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/conf.py (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/events.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/i18n.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/index.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/keyboard.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/make.bat (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/markup.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/methods.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/options.rst (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/docs/requirements.txt (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/grunt/.jshintrc (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/.jscsrc (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/.jshintrc (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/bootstrap-datepicker.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker-en-CA.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ar-tn.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ar.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.az.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.bg.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.bn.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.br.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.bs.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ca.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.cs.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.cy.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.da.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.de.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.el.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.en-AU.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.en-GB.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.en-IE.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.en-NZ.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.en-ZA.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.eo.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.es.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.et.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.eu.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.fa.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.fi.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.fo.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.fr-CH.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.fr.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.gl.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.he.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.hi.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.hr.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.hu.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.hy.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.id.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.is.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.it-CH.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.it.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ja.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ka.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.kh.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.kk.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.km.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ko.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.kr.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.lt.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.lv.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.me.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.mk.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.mn.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ms.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.nb.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.nl-BE.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.nl.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.no.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.oc.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.pl.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt-BR.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ro.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs-latin.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ru.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.si.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sk.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sl.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sq.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sr-latin.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sr.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sv.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.sw.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.ta.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.tg.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.th.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.tr.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.uk.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.uz-cyrl.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.uz-latn.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.vi.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-CN.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-TW.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/less/.csslintrc (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/less/datepicker.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/less/datepicker3.less (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/package.json (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/coverage.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/jquery-1.7.1.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/mock.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/qunit-logging.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/qunit.css (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/qunit.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/assets/utils.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/calendar-weeks.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/component.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/data-api.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/events.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/formats.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/inline.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/keyboard_navigation/2011.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/keyboard_navigation/2012.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/keyboard_navigation/all.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/methods.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/methods_jquery.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/mouse_navigation/2011.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/mouse_navigation/2012.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/mouse_navigation/all.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/noconflict.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/options.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/timezone.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/suites/touch_navigation/all.js (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/tests.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/tests/timezone.html (100%) rename {public/assets => assets}/bower_components/bootstrap-datepicker/yarn.lock (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/daterangepicker.css (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/daterangepicker.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/daterangepicker.scss (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/demo.html (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/drp.png (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/amd/index.html (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/amd/main.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/amd/require.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/browserify/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/browserify/bundle.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/browserify/index.html (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/example/browserify/main.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/package.js (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/package.json (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/website/index.html (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/website/website.css (100%) rename {public/assets => assets}/bower_components/bootstrap-daterangepicker/website/website.js (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/bootstrap-slider.js (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/locks.png (100%) rename {public/assets => assets}/bower_components/bootstrap-slider/slider.css (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/LICENSE (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/css/timepicker.less (100%) rename {public/assets => assets}/bower_components/bootstrap-timepicker/js/bootstrap-timepicker.js (100%) rename {public/assets => assets}/bower_components/bootstrap/.DS_Store (100%) rename {public/assets => assets}/bower_components/bootstrap/.bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/bootstrap/Gemfile (100%) rename {public/assets => assets}/bower_components/bootstrap/Gemfile.lock (100%) rename {public/assets => assets}/bower_components/bootstrap/Gruntfile.js (100%) rename {public/assets => assets}/bower_components/bootstrap/ISSUE_TEMPLATE.md (100%) rename {public/assets => assets}/bower_components/bootstrap/LICENSE (100%) rename {public/assets => assets}/bower_components/bootstrap/README.md (100%) rename {public/assets => assets}/bower_components/bootstrap/bower.json (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap-theme.css (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap-theme.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap-theme.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap.css (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap.min.css (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/css/bootstrap.min.css.map (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/js/bootstrap.js (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/js/bootstrap.min.js (100%) rename {public/assets => assets}/bower_components/bootstrap/dist/js/npm.js (100%) rename {public/assets => assets}/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot (100%) rename {public/assets => assets}/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg (100%) rename {public/assets => assets}/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf (100%) rename {public/assets => assets}/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff (100%) rename {public/assets => assets}/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/.jshintrc (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/bs-commonjs-generator.js (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/bs-lessdoc-parser.js (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/bs-raw-files-generator.js (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/change-version.js (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/configBridge.json (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/npm-shrinkwrap.json (100%) rename {public/assets => assets}/bower_components/bootstrap/grunt/sauce_browsers.yml (100%) rename {public/assets => assets}/bower_components/bootstrap/js/.jscsrc (100%) rename {public/assets => assets}/bower_components/bootstrap/js/.jshintrc (100%) rename {public/assets => assets}/bower_components/bootstrap/js/affix.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/alert.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/button.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/carousel.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/collapse.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/dropdown.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/modal.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/popover.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/scrollspy.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/tab.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/tooltip.js (100%) rename {public/assets => assets}/bower_components/bootstrap/js/transition.js (100%) rename {public/assets => assets}/bower_components/bootstrap/less/.csscomb.json (100%) rename {public/assets => assets}/bower_components/bootstrap/less/.csslintrc (100%) rename {public/assets => assets}/bower_components/bootstrap/less/alerts.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/badges.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/bootstrap.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/breadcrumbs.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/button-groups.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/buttons.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/carousel.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/close.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/code.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/component-animations.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/dropdowns.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/forms.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/glyphicons.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/grid.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/input-groups.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/jumbotron.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/labels.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/list-group.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/media.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/alerts.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/background-variant.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/border-radius.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/buttons.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/center-block.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/clearfix.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/forms.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/gradients.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/grid-framework.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/grid.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/hide-text.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/image.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/labels.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/list-group.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/nav-divider.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/nav-vertical-align.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/opacity.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/pagination.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/panels.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/progress-bar.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/reset-filter.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/reset-text.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/resize.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/responsive-visibility.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/size.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/tab-focus.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/table-row.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/text-emphasis.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/text-overflow.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/mixins/vendor-prefixes.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/modals.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/navbar.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/navs.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/normalize.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/pager.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/pagination.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/panels.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/popovers.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/print.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/progress-bars.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/responsive-embed.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/responsive-utilities.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/scaffolding.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/tables.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/theme.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/thumbnails.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/tooltip.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/type.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/utilities.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/variables.less (100%) rename {public/assets => assets}/bower_components/bootstrap/less/wells.less (100%) rename {public/assets => assets}/bower_components/bootstrap/nuget/MyGet.ps1 (100%) rename {public/assets => assets}/bower_components/bootstrap/nuget/bootstrap.less.nuspec (100%) rename {public/assets => assets}/bower_components/bootstrap/nuget/bootstrap.nuspec (100%) rename {public/assets => assets}/bower_components/bootstrap/package.js (100%) rename {public/assets => assets}/bower_components/bootstrap/package.json (100%) rename {public/assets => assets}/bower_components/chart.js/.bower.json (100%) rename {public/assets => assets}/bower_components/chart.js/.gitignore (100%) rename {public/assets => assets}/bower_components/chart.js/.travis.yml (100%) rename {public/assets => assets}/bower_components/chart.js/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/chart.js/Chart.js (100%) rename {public/assets => assets}/bower_components/chart.js/Chart.min.js (100%) rename {public/assets => assets}/bower_components/chart.js/LICENSE.md (100%) rename {public/assets => assets}/bower_components/chart.js/README.md (100%) rename {public/assets => assets}/bower_components/chart.js/bower.json (100%) rename {public/assets => assets}/bower_components/chart.js/docs/00-Getting-Started.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/01-Line-Chart.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/02-Bar-Chart.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/03-Radar-Chart.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/04-Polar-Area-Chart.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/05-Pie-Doughnut-Chart.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/06-Advanced.md (100%) rename {public/assets => assets}/bower_components/chart.js/docs/07-Notes.md (100%) rename {public/assets => assets}/bower_components/chart.js/gulpfile.js (100%) rename {public/assets => assets}/bower_components/chart.js/package.json (100%) rename {public/assets => assets}/bower_components/chart.js/samples/bar.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/doughnut.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/line-customTooltips.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/line.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/pie-customTooltips.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/pie.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/polar-area.html (100%) rename {public/assets => assets}/bower_components/chart.js/samples/radar.html (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.Bar.js (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.Core.js (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.Doughnut.js (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.Line.js (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.PolarArea.js (100%) rename {public/assets => assets}/bower_components/chart.js/src/Chart.Radar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/.bower.json (100%) rename {public/assets => assets}/bower_components/ckeditor/.github/ISSUE_TEMPLATE (100%) rename {public/assets => assets}/bower_components/ckeditor/CHANGES.md (100%) rename {public/assets => assets}/bower_components/ckeditor/LICENSE.md (100%) rename {public/assets => assets}/bower_components/ckeditor/README.md (100%) rename {public/assets => assets}/bower_components/ckeditor/adapters/jquery.js (100%) rename {public/assets => assets}/bower_components/ckeditor/bower.json (100%) rename {public/assets => assets}/bower_components/ckeditor/ckeditor.js (100%) rename {public/assets => assets}/bower_components/ckeditor/composer.json (100%) rename {public/assets => assets}/bower_components/ckeditor/config.js (100%) rename {public/assets => assets}/bower_components/ckeditor/contents.css (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/_translationstatus.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/package.json (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/about/dialogs/about.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/about/dialogs/logo_ckeditor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/adobeair/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/ajax/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autoembed/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autogrow/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/autolink/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/kama/balloonpanel.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono-lisa/balloonpanel.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono-lisa/images/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono-lisa/images/hidpi/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono/balloonpanel.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono/images/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/balloonpanel/skins/moono/images/hidpi/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bbcode/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/icons/bidiltr.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/icons/bidirtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/icons/hidpi/bidiltr.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/icons/hidpi/bidirtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/bidi/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/dialogs/codesnippet.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/icons/codesnippet.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/icons/hidpi/codesnippet.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/CHANGES.md (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/LICENSE (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/README.ru.md (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/arta.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/ascetic.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-dune.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-forest.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-heath.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-lakeside.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/atelier-seaside.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_paper.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/brown_papersq.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/default.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/docco.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/far.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/foundation.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/github.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/googlecode.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/idea.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/ir_black.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/magula.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/mono-blue.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/monokai_sublime.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/obsidian.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/paraiso.light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/pojoaque.jpg (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/railscasts.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/rainbow.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/school_book.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_dark.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/solarized_light.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/sunburst.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-blue.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-bright.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night-eighties.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow-night.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/tomorrow.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/vs.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/xcode.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/lib/highlight/styles/zenburn.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippet/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/codesnippetgeshi/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/icons/bgcolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/icons/hidpi/bgcolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/icons/hidpi/textcolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/icons/textcolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colorbutton/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/dialogs/colordialog.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/dialogs/colordialog.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/colordialog/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/cursors/cursor-disabled.svg (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/cursors/cursor.svg (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/icons/copyformatting.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/icons/hidpi/copyformatting.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/copyformatting/styles/copyformatting.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/_translationstatus.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/devtools/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/dialog/dialogDefinition.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/dialogadvtab/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/dialogs/div.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/icons/creatediv.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/icons/hidpi/creatediv.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/div/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/divarea/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/dialogs/docprops.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/icons/docprops-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/icons/docprops.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/icons/hidpi/docprops-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/icons/hidpi/docprops.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/docprops/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embed/icons/embed.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embed/icons/hidpi/embed.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embed/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/dialogs/embedbase.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedbase/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedsemantic/icons/embedsemantic.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedsemantic/icons/hidpi/embedsemantic.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/embedsemantic/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/filetools/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/dialogs/find.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/find-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/find.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/hidpi/find-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/hidpi/find.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/hidpi/replace.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/icons/replace.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/find/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/dialogs/flash.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/icons/flash.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/icons/hidpi/flash.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/images/placeholder.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/flash/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/font/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/button.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/checkbox.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/form.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/hiddenfield.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/radio.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/select.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/textarea.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/dialogs/textfield.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/button.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/checkbox.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/form.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hiddenfield.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/button.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/checkbox.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/form.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/imagebutton.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/radio.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/select-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/select.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/textarea.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/hidpi/textfield.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/imagebutton.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/radio.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/select-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/select.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/textarea-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/textarea.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/textfield-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/icons/textfield.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/images/hiddenfield.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/forms/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/icons.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/icons_hidpi.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/dialogs/iframe.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/icons/hidpi/iframe.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/icons/iframe.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/images/placeholder.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframe/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/iframedialog/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image/dialogs/image.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image/images/noimage.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/dialogs/image2.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/icons/hidpi/image.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/icons/image.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/image2/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/indentblock/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/hidpi/justifyblock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/hidpi/justifycenter.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/hidpi/justifyleft.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/hidpi/justifyright.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/justifyblock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/justifycenter.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/justifyleft.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/icons/justifyright.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/justify/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/icons/hidpi/language.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/icons/language.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/language/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/lineutils/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/link/dialogs/anchor.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/link/dialogs/link.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/link/images/anchor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/link/images/hidpi/anchor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/dialogs/liststyle.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/liststyle/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/magicline/images/hidpi/icon.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/magicline/images/icon-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/magicline/images/icon.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/dialogs/mathjax.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/icons/hidpi/mathjax.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/icons/mathjax.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/images/loader.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/mathjax/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/icons/hidpi/newpage-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/icons/hidpi/newpage.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/icons/newpage-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/icons/newpage.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/newpage/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/notificationaggregator/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/icons/pagebreak.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/images/pagebreak.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pagebreak/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/panelbutton/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/pastefromword/filter/default.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/dialogs/placeholder.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/icons/placeholder.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/placeholder/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/icons/hidpi/preview.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/icons/preview-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/icons/preview.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/preview/preview.html (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/icons/hidpi/print.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/icons/print.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/print/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/icons/hidpi/save.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/icons/save.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/save/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/LICENSE.md (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/dialogs/dialog.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/dialogs/options.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/dialogs/toolbar.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/icons/hidpi/selectall.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/icons/selectall.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/selectall/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sharedspace/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/icons/showblocks-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/icons/showblocks.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_address.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_blockquote.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_div.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h1.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h2.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h3.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h4.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h5.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_h6.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_p.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/images/block_pre.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/showblocks/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/dialogs/smiley.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/icons/hidpi/smiley.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/icons/smiley.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/angel_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/angel_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/angry_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/angry_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/broken_heart.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/broken_heart.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/confused_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/confused_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/cry_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/cry_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/devil_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/devil_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/embaressed_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/embarrassed_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/embarrassed_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/envelope.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/envelope.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/heart.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/heart.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/kiss.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/kiss.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/lightbulb.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/lightbulb.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/omg_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/omg_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/regular_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/regular_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/sad_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/sad_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/shades_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/shades_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/teeth_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/teeth_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/thumbs_down.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/thumbs_down.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/thumbs_up.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/thumbs_up.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/tongue_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/tongue_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/tounge_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/wink_smile.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/images/wink_smile.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/smiley/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/icons/hidpi/sourcedialog.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/icons/sourcedialog-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/icons/sourcedialog.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/sourcedialog/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/specialchar/dialogs/specialchar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/stylesheetparser/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/table/dialogs/table.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/tableresize/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/tableselection/styles/tableselection.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/tabletools/dialogs/tableCell.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/dialogs/templates.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/dialogs/templates.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/icons/hidpi/templates.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/icons/templates-rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/icons/templates.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/bn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/bs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/en-au.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/en-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/fo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/gu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/hi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/is.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ka.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/lt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/mn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ms.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ro.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sr-latn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/th.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/templates/default.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/templates/images/template1.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/templates/images/template2.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/templates/templates/images/template3.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/dialogs/uicolor.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/dialogs/uicolor.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/icons/hidpi/uicolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/icons/uicolor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/_translationstatus.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/et.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/fr-ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/mk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/si.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uicolor/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadfile/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadimage/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/uploadwidget/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/images/handle.png (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/af.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ar.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/az.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/bg.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ca.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/cs.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/cy.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/da.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/de-ch.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/de.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/el.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/en-gb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/en.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/eo.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/es-mx.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/es.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/eu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/fa.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/fi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/fr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/gl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/he.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/hr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/hu.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/id.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/it.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ja.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/km.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ko.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ku.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/lv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/nb.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/nl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/no.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/oc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/pl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/pt-br.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/pt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ru.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/sk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/sl.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/sq.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/sv.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/tr.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/tt.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/ug.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/uk.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/vi.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/zh-cn.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/lang/zh.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widget/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/widgetselection/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/LICENSE.md (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/dialogs/ciframe.html (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/dialogs/tmpFrameset.html (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/dialogs/wsc.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/dialogs/wsc.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/dialogs/wsc_ie.js (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css (100%) rename {public/assets => assets}/bower_components/ckeditor/plugins/xml/plugin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/css/samples.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/img/github-top.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/img/header-bg.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/img/header-separator.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/img/logo.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/img/navigation-tip.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/index.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/js/sample.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/js/sf.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/ajax.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/api.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/appendto.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/assets/inlineall/logo.png (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/assets/outputxhtml/outputxhtml.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/assets/posteddata.php (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/assets/sample.jpg (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/assets/uilanguages/languages.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/autogrow/autogrow.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/bbcode/bbcode.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/codesnippet/codesnippet.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/datafiltering.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/devtools/devtools.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/dialog/assets/my_dialog.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/dialog/dialog.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/divarea/divarea.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/divreplace.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/docprops/docprops.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/enterkey/enterkey.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.fla (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.swf (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/htmlwriter/assets/outputforflash/swfobject.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/htmlwriter/outputforflash.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/htmlwriter/outputhtml.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/image2/assets/image1.jpg (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/image2/assets/image2.jpg (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/image2/image2.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/index.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/inlineall.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/inlinebycode.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/inlinetextarea.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/jquery.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/magicline/magicline.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/mathjax/mathjax.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/placeholder/placeholder.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/readonly.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/replacebyclass.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/replacebycode.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/sample.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/sample.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/sample_posteddata.php (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/sharedspace/sharedspace.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/sourcedialog/sourcedialog.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/stylesheetparser/assets/sample.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/stylesheetparser/stylesheetparser.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/tabindex.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/tableresize/tableresize.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/toolbar/toolbar.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/uicolor.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/uicolor/uicolor.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/uilanguages.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/wysiwygarea/fullpage.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/old/xhtmlstyle.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/css/fontello.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/config.json (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/fontello.eot (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/fontello.svg (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/fontello.ttf (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/font/fontello.woff (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/index.html (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/js/abstracttoolbarmodifier.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/js/fulltoolbareditor.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/js/toolbarmodifier.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/js/toolbartextmodifier.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/LICENSE (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/codemirror.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/javascript.js (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/neo.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css (100%) rename {public/assets => assets}/bower_components/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.js (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/dialog.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/dialog_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/dialog_ie7.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/dialog_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/dialog_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/editor.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/editor_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/editor_ie7.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/editor_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/editor_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/icons.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/icons_hidpi.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/dialog_sides.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/dialog_sides.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/dialog_sides_rtl.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/mini.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/spinner.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/sprites.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/sprites_ie6.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/images/toolbar_start.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/readme.md (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/kama/skin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/dialog.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/dialog_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/dialog_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/dialog_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/editor.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/editor_gecko.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/editor_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/editor_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/editor_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/icons.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/icons_hidpi.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/arrow.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/hidpi/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/hidpi/lock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/hidpi/refresh.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/lock-open.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/lock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/refresh.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/images/spinner.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono-lisa/readme.md (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/dialog.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/dialog_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/dialog_ie7.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/dialog_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/dialog_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor_gecko.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor_ie.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor_ie7.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor_ie8.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/editor_iequirks.css (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/icons.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/icons_hidpi.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/anchor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/arrow.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/hidpi/anchor.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/hidpi/close.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/hidpi/lock-open.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/hidpi/lock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/hidpi/refresh.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/lock-open.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/lock.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/refresh.png (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/images/spinner.gif (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/readme.md (100%) rename {public/assets => assets}/bower_components/ckeditor/skins/moono/skin.js (100%) rename {public/assets => assets}/bower_components/ckeditor/styles.js (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/.bower.json (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/License.txt (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/Readme.md (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/bower.json (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/css/dataTables.bootstrap.css (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/js/dataTables.bootstrap.js (100%) rename {public/assets => assets}/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js (100%) rename {public/assets => assets}/bower_components/datatables.net/.bower.json (100%) rename {public/assets => assets}/bower_components/datatables.net/License.txt (100%) rename {public/assets => assets}/bower_components/datatables.net/Readme.md (100%) rename {public/assets => assets}/bower_components/datatables.net/bower.json (100%) rename {public/assets => assets}/bower_components/datatables.net/js/jquery.dataTables.js (100%) rename {public/assets => assets}/bower_components/datatables.net/js/jquery.dataTables.min.js (100%) rename {public/assets => assets}/bower_components/eve-raphael/.bower.json (100%) rename {public/assets => assets}/bower_components/eve-raphael/LICENSE (100%) rename {public/assets => assets}/bower_components/eve-raphael/README.md (100%) rename {public/assets => assets}/bower_components/eve-raphael/bower.json (100%) rename {public/assets => assets}/bower_components/eve-raphael/component.json (100%) rename {public/assets => assets}/bower_components/eve-raphael/e.html (100%) rename {public/assets => assets}/bower_components/eve-raphael/eve.js (100%) rename {public/assets => assets}/bower_components/eve-raphael/package.json (100%) rename {public/assets => assets}/bower_components/fastclick/.bower.json (100%) rename {public/assets => assets}/bower_components/fastclick/LICENSE (100%) rename {public/assets => assets}/bower_components/fastclick/README.md (100%) rename {public/assets => assets}/bower_components/fastclick/bower.json (100%) rename {public/assets => assets}/bower_components/fastclick/lib/fastclick.js (100%) rename {public/assets => assets}/bower_components/font-awesome/.bower.json (100%) rename {public/assets => assets}/bower_components/font-awesome/.gitignore (100%) rename {public/assets => assets}/bower_components/font-awesome/.npmignore (100%) rename {public/assets => assets}/bower_components/font-awesome/HELP-US-OUT.txt (100%) rename {public/assets => assets}/bower_components/font-awesome/bower.json (100%) rename {public/assets => assets}/bower_components/font-awesome/css/font-awesome.css (100%) rename {public/assets => assets}/bower_components/font-awesome/css/font-awesome.css.map (100%) rename {public/assets => assets}/bower_components/font-awesome/css/font-awesome.min.css (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/FontAwesome.otf (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/fontawesome-webfont.eot (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/fontawesome-webfont.svg (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/fontawesome-webfont.ttf (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/fontawesome-webfont.woff (100%) rename {public/assets => assets}/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 (100%) rename {public/assets => assets}/bower_components/font-awesome/less/animated.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/bordered-pulled.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/core.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/fixed-width.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/font-awesome.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/icons.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/larger.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/list.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/mixins.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/path.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/rotated-flipped.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/screen-reader.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/stacked.less (100%) rename {public/assets => assets}/bower_components/font-awesome/less/variables.less (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_animated.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_bordered-pulled.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_core.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_fixed-width.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_icons.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_larger.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_list.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_mixins.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_path.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_rotated-flipped.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_screen-reader.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_stacked.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/_variables.scss (100%) rename {public/assets => assets}/bower_components/font-awesome/scss/font-awesome.scss (100%) rename {public/assets => assets}/bower_components/fullcalendar/.bower.json (100%) rename {public/assets => assets}/bower_components/fullcalendar/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/fullcalendar/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/fullcalendar/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/fullcalendar/README.md (100%) rename {public/assets => assets}/bower_components/fullcalendar/bower.json (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.css (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.min.css (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.min.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.print.css (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/fullcalendar.print.min.css (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/gcal.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/gcal.min.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale-all.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/af.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-dz.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-kw.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-ly.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-ma.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-sa.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar-tn.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ar.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/bg.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ca.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/cs.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/da.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/de-at.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/de-ch.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/de.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/el.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/en-au.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/en-ca.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/en-gb.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/en-ie.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/en-nz.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/es-do.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/es.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/et.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/eu.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/fa.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/fi.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/fr-ca.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/fr-ch.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/fr.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/gl.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/he.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/hi.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/hr.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/hu.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/id.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/is.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/it.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ja.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/kk.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ko.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/lb.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/lt.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/lv.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/mk.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ms-my.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ms.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/nb.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/nl-be.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/nl.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/nn.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/pl.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/pt-br.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/pt.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ro.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/ru.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/sk.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/sl.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/sr-cyrl.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/sr.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/sv.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/th.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/tr.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/uk.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/vi.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/zh-cn.js (100%) rename {public/assets => assets}/bower_components/fullcalendar/dist/locale/zh-tw.js (100%) rename {public/assets => assets}/bower_components/inputmask/.bower.json (100%) rename {public/assets => assets}/bower_components/inputmask/bower.json (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/bindings/inputmask.binding.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/global/document.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/global/window.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.date.extensions.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.extensions.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.numeric.extensions.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.phone.extensions.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/inputmask.regex.extensions.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/jquery.inputmask.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/phone-codes/phone-be.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/phone-codes/phone-nl.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/phone-codes/phone-ru.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/phone-codes/phone-uk.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/inputmask/phone-codes/phone.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/jquery.inputmask.bundle.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.date.extensions.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.extensions.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.numeric.extensions.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.phone.extensions.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/inputmask.regex.extensions.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/inputmask/jquery.inputmask.min.js (100%) rename {public/assets => assets}/bower_components/inputmask/dist/min/jquery.inputmask.bundle.min.js (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/.bower.json (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/.gitignore (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/.npmignore (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/License.md (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/_tmp/logo-ion-range-slider.png (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/bower.json (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.skinFlat.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.skinHTML5.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.skinModern.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.skinNice.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/ion.rangeSlider.skinSimple.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/css/normalize.css (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/history.md (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/img/sprite-skin-flat.png (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/img/sprite-skin-modern.png (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/img/sprite-skin-nice.png (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/img/sprite-skin-simple.png (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/index.md (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/js/ion.rangeSlider.js (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/js/ion.rangeSlider.min.js (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/package.json (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/readme.md (100%) rename {public/assets => assets}/bower_components/ion.rangeSlider/readme.ru.md (100%) rename {public/assets => assets}/bower_components/jquery-knob/.bower.json (100%) rename {public/assets => assets}/bower_components/jquery-knob/.gitignore (100%) rename {public/assets => assets}/bower_components/jquery-knob/LICENSE (100%) rename {public/assets => assets}/bower_components/jquery-knob/README.md (100%) rename {public/assets => assets}/bower_components/jquery-knob/bower.json (100%) rename {public/assets => assets}/bower_components/jquery-knob/dist/jquery.knob.min.js (100%) rename {public/assets => assets}/bower_components/jquery-knob/excanvas.js (100%) rename {public/assets => assets}/bower_components/jquery-knob/index.html (100%) rename {public/assets => assets}/bower_components/jquery-knob/js/jquery.knob.js (100%) rename {public/assets => assets}/bower_components/jquery-knob/knob.jquery.json (100%) rename {public/assets => assets}/bower_components/jquery-knob/package.json (100%) rename {public/assets => assets}/bower_components/jquery-knob/secretplan.jpg (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/.bower.json (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/README.md (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/bower.json (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/allow-page-scroll.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/chaining.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/disable-fade-out.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/dynamic-content.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/height-width.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/index.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.css (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.js (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/mouse-wheel.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/multiple-elements.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/navigation.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/nested.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/programmatic-scrolling.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/rail.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/scroll-events.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/scrollbar.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/start-position.html (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/examples/style.css (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/jquery.slimscroll.js (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/jquery.slimscroll.min.js (100%) rename {public/assets => assets}/bower_components/jquery-slimscroll/package.json (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/.bower.json (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/Changelog.txt (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/Makefile (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/README.md (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/bower.json (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/dist/jquery.sparkline.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/minheader.txt (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/sparkline.jquery.json (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/base.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-bar.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-box.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-bullet.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-discrete.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-line.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-pie.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/chart-tristate.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/defaults.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/footer.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/header.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/interact.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/rangemap.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/simpledraw.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/utils.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/vcanvas-base.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/vcanvas-canvas.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/src/vcanvas-vml.js (100%) rename {public/assets => assets}/bower_components/jquery-sparkline/version.txt (100%) rename {public/assets => assets}/bower_components/jquery-ui/.bower.json (100%) rename {public/assets => assets}/bower_components/jquery-ui/.gitignore (100%) rename {public/assets => assets}/bower_components/jquery-ui/AUTHORS.txt (100%) rename {public/assets => assets}/bower_components/jquery-ui/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/jquery-ui/README.md (100%) rename {public/assets => assets}/bower_components/jquery-ui/bower.json (100%) rename {public/assets => assets}/bower_components/jquery-ui/component.json (100%) rename {public/assets => assets}/bower_components/jquery-ui/composer.json (100%) rename {public/assets => assets}/bower_components/jquery-ui/jquery-ui.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/jquery-ui.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/package.json (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/accordion.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/all.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/autocomplete.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/base.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/button.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/core.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/datepicker.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/dialog.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/draggable.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_2e83ff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_444444_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_555555_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_777620_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_777777_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_888888_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_cc0000_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/menu.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/progressbar.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/resizable.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/selectable.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/selectmenu.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/slider.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/sortable.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/spinner.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/tabs.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/base/tooltip.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_diagonals-thick_8_333333_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_flat_65_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_glass_40_111111_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_glass_55_1c1c1c_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-hard_40_aaaaaa_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_highlight-soft_50_aaaaaa_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_inset-hard_45_cd0a0a_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-bg_inset-hard_55_ffeb80_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_4ca300_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_bbbbbb_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ededed_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ffcf29_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/black-tie/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_0_333333_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_65_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-icons_004276_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-icons_cc0000_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/blitzer/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_50_3baae3_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-icons_2694e8_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-icons_2e83ff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-icons_3d80b3_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-icons_72a7cf_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/cupertino/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-bg_loop_25_000000_21x21.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_4b8e0b_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_a83300_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_cccccc_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dark-hive/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-medium_30_0b58a2_4x4.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_20_333333_2x2.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_30_a32d00_2x2.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_dots-small_40_00498f_2x2.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_flat_40_292929_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-bg_gloss-wave_20_111111_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_00498f_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_98d2fb_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_9ccdfc_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/dot-luv/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_55_994d53_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_flat_55_fafafa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_734d99_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_8d78a5_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_a8a3ae_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_ebccce_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/eggplant/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_flat_0_e69700_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_0a82eb_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_0b54d5_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_5fa5e3_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_fcdd4a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/excite-bike/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_0_eeeeee_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_55_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-icons_0073ea_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-icons_666666_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-icons_ff0084_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/flick/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_40_db4865_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_93c3cd_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_50_ff3853_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_diagonals-small_75_ccd232_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_dots-medium_80_ffff38_4x4.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_dots-small_35_35414f_2x2.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_flat_75_ba9217_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-bg_white-lines_85_f7f7ba_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_88a206_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_c02669_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_e1e463_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_ffeb33_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/hot-sneaks/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_25_cb842e_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_glass_70_ede4d4_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_c47a23_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_cb672b_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_f08000_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_f35f07_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_ff7519_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/humanity/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-thick_15_444444_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_diagonals-thick_95_ffdc2e_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_glass_55_fbf5d0_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-hard_30_285c00_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_33_3a8104_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_50_4eb305_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_highlight-soft_60_4ca20b_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-bg_inset-soft_10_285c00_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-icons_4eb305_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-icons_72b42d_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/le-frog/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_9bcc60_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_add978_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_e3ddc9_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_f1fd86_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/mint-choc/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_0_eeeeee_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_55_c0402a_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_flat_55_eeeeee_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_100_f8f8f8_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_35_dddddd_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_glass_60_eeeeee_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_inset-hard_75_999999_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-bg_inset-soft_50_c9c9c9_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-icons_3383bb_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-icons_70b2e1_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-icons_999999_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/images/ui-icons_fbc856_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/overcast/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_20_6e4f1c_10x10.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_diagonal-maze_40_000000_10x10.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_eceadf_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_10_f8f7f6_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_eceadf_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_f7f3de_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_15_ffffff_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_65_654b24_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-bg_fine-grain_68_b83400_60x60.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_3572ac_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_8c291d_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_b83400_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_fbdb93_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/pepper-grinder/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_flat_55_fbec88_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_85_dfeffc_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_217bc0_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_2e83ff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_469bdd_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_6da8d5_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_d8e7f3_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/images/ui-icons_f9bd01_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/redmond/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/smoothness/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_glass_55_fcf0ba_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_gloss-wave_100_ece8da_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_100_f5f3e5_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_100_fafaf4_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_15_459e00_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-hard_95_cccccc_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-soft_25_67b021_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_highlight-soft_95_ffedad_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-bg_inset-soft_15_2b2922_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_808080_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_847e71_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_8DC262_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_eeeeee_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/south-street/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_flat_55_999999_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_flat_75_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_glass_45_0078ae_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_glass_55_f8da4e_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_glass_75_79c9ec_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_0078ae_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_056b93_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_d8e7f3_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_e0fdff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_f5e175_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_f7a50d_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/images/ui-icons_fcd113_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/start/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_diagonals-medium_20_d34d17_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_flat_30_cccccc_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_flat_50_5c5c5c_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_45_817865_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_60_fece2f_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_70_ffdd57_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_gloss-wave_90_fff9e5_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_highlight-soft_100_feeebd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-bg_inset-soft_30_ffffff_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_3d3d3d_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_bd7b00_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_d19405_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_eb990f_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_ed9f26_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_fadc7a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/images/ui-icons_ffe180_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/sunny/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_070603_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_e8e2b5_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_e9cd86_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_efec9f_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_f2ec64_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_f9f2bd_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/images/ui-icons_ff7519_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/swanky-purse/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_diagonals-small_50_262626_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_flat_0_303030_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_flat_0_4c4c4c_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_40_0a0a0a_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_55_f1fbe5_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_glass_60_000000_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_55_000000_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_85_9fda58_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-bg_gloss-wave_95_f6ecd5_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_000000_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_1f1f1f_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_9fda58_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_b8ec79_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/trontastic/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_20_555555_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_4b8e0b_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_a83300_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_cccccc_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-darkness/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_222222_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/ui-lightness/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/animated-overlay.gif (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_gloss-wave_16_121212_500x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-hard_15_888888_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-hard_55_555555_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-soft_35_adadad_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_highlight-soft_60_dddddd_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-bg_inset-soft_15_121212_1x100.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_666666_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_aaaaaa_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_bbbbbb_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_c98000_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_cccccc_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_cd0a0a_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/images/ui-icons_f29a00_256x240.png (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/jquery-ui.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/jquery-ui.min.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/themes/vader/theme.css (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/.jshintrc (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/accordion.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/autocomplete.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/button.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/core.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/datepicker.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/dialog.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/draggable.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/droppable.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-blind.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-bounce.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-clip.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-drop.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-explode.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-fade.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-fold.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-highlight.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-puff.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-pulsate.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-scale.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-shake.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-size.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-slide.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect-transfer.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/effect.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-af.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ar-DZ.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ar.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-az.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-be.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-bg.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-bs.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ca.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-cs.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-cy-GB.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-da.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-de.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-el.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-en-AU.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-en-GB.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-en-NZ.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-eo.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-es.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-et.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-eu.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fa.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fi.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fo.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fr-CA.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fr-CH.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-fr.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-gl.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-he.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-hi.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-hr.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-hu.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-hy.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-id.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-is.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-it-CH.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-it.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ja.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ka.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-kk.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-km.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ko.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ky.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-lb.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-lt.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-lv.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-mk.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ml.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ms.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-nb.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-nl-BE.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-nl.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-nn.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-no.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-pl.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-pt-BR.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-pt.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-rm.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ro.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ru.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sk.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sl.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sq.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sr-SR.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sr.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-sv.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-ta.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-th.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-tj.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-tr.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-uk.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-vi.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-zh-CN.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-zh-HK.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/i18n/datepicker-zh-TW.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/menu.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/accordion.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/autocomplete.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/button.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/core.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/datepicker.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/dialog.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/draggable.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/droppable.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-blind.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-bounce.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-clip.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-drop.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-explode.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-fade.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-fold.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-highlight.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-puff.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-pulsate.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-scale.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-shake.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-size.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-slide.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect-transfer.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/effect.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-af.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ar-DZ.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ar.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-az.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-be.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-bg.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-bs.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ca.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-cs.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-cy-GB.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-da.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-de.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-el.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-AU.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-GB.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-en-NZ.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-eo.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-es.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-et.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-eu.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fa.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fi.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fo.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr-CA.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr-CH.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-fr.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-gl.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-he.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-hi.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-hr.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-hu.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-hy.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-id.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-is.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-it-CH.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-it.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ja.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ka.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-kk.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-km.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ko.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ky.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-lb.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-lt.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-lv.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-mk.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ml.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ms.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-nb.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-nl-BE.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-nl.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-nn.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-no.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-pl.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-pt-BR.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-pt.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-rm.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ro.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ru.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sk.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sl.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sq.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sr-SR.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sr.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-sv.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-ta.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-th.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-tj.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-tr.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-uk.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-vi.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-CN.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-HK.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/i18n/datepicker-zh-TW.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/menu.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/mouse.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/position.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/progressbar.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/resizable.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/selectable.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/selectmenu.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/slider.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/sortable.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/spinner.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/tabs.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/tooltip.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/minified/widget.min.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/mouse.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/position.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/progressbar.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/resizable.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/selectable.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/selectmenu.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/slider.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/sortable.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/spinner.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/tabs.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/tooltip.js (100%) rename {public/assets => assets}/bower_components/jquery-ui/ui/widget.js (100%) rename {public/assets => assets}/bower_components/jquery/.bower.json (100%) rename {public/assets => assets}/bower_components/jquery/AUTHORS.txt (100%) rename {public/assets => assets}/bower_components/jquery/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/jquery/README.md (100%) rename {public/assets => assets}/bower_components/jquery/bower.json (100%) rename {public/assets => assets}/bower_components/jquery/dist/core.js (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.js (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.min.js (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.min.map (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.slim.js (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.slim.min.js (100%) rename {public/assets => assets}/bower_components/jquery/dist/jquery.slim.min.map (100%) rename {public/assets => assets}/bower_components/jquery/external/sizzle/LICENSE.txt (100%) rename {public/assets => assets}/bower_components/jquery/external/sizzle/dist/sizzle.js (100%) rename {public/assets => assets}/bower_components/jquery/external/sizzle/dist/sizzle.min.js (100%) rename {public/assets => assets}/bower_components/jquery/external/sizzle/dist/sizzle.min.map (100%) rename {public/assets => assets}/bower_components/jquery/src/.eslintrc.json (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/jsonp.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/load.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/parseXML.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/script.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/var/location.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/var/nonce.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/var/rquery.js (100%) rename {public/assets => assets}/bower_components/jquery/src/ajax/xhr.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes/attr.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes/classes.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes/prop.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/attributes/val.js (100%) rename {public/assets => assets}/bower_components/jquery/src/callbacks.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/DOMEval.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/access.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/init.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/nodeName.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/parseHTML.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/ready-no-deferred.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/ready.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/readyException.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/stripAndCollapse.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/core/var/rsingleTag.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/addGetHookIf.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/adjustCSS.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/curCSS.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/hiddenVisibleSelectors.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/showHide.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/cssExpand.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/getStyles.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/isHiddenWithinTree.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/rmargin.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/rnumnonpx.js (100%) rename {public/assets => assets}/bower_components/jquery/src/css/var/swap.js (100%) rename {public/assets => assets}/bower_components/jquery/src/data.js (100%) rename {public/assets => assets}/bower_components/jquery/src/data/Data.js (100%) rename {public/assets => assets}/bower_components/jquery/src/data/var/acceptData.js (100%) rename {public/assets => assets}/bower_components/jquery/src/data/var/dataPriv.js (100%) rename {public/assets => assets}/bower_components/jquery/src/data/var/dataUser.js (100%) rename {public/assets => assets}/bower_components/jquery/src/deferred.js (100%) rename {public/assets => assets}/bower_components/jquery/src/deferred/exceptionHook.js (100%) rename {public/assets => assets}/bower_components/jquery/src/deprecated.js (100%) rename {public/assets => assets}/bower_components/jquery/src/dimensions.js (100%) rename {public/assets => assets}/bower_components/jquery/src/effects.js (100%) rename {public/assets => assets}/bower_components/jquery/src/effects/Tween.js (100%) rename {public/assets => assets}/bower_components/jquery/src/effects/animatedSelector.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event/ajax.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event/alias.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event/focusin.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/event/trigger.js (100%) rename {public/assets => assets}/bower_components/jquery/src/exports/amd.js (100%) rename {public/assets => assets}/bower_components/jquery/src/exports/global.js (100%) rename {public/assets => assets}/bower_components/jquery/src/jquery.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/_evalUrl.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/buildFragment.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/getAll.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/setGlobalEval.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/var/rcheckableType.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/var/rscriptType.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/var/rtagName.js (100%) rename {public/assets => assets}/bower_components/jquery/src/manipulation/wrapMap.js (100%) rename {public/assets => assets}/bower_components/jquery/src/offset.js (100%) rename {public/assets => assets}/bower_components/jquery/src/queue.js (100%) rename {public/assets => assets}/bower_components/jquery/src/queue/delay.js (100%) rename {public/assets => assets}/bower_components/jquery/src/selector-native.js (100%) rename {public/assets => assets}/bower_components/jquery/src/selector-sizzle.js (100%) rename {public/assets => assets}/bower_components/jquery/src/selector.js (100%) rename {public/assets => assets}/bower_components/jquery/src/serialize.js (100%) rename {public/assets => assets}/bower_components/jquery/src/traversing.js (100%) rename {public/assets => assets}/bower_components/jquery/src/traversing/findFilter.js (100%) rename {public/assets => assets}/bower_components/jquery/src/traversing/var/dir.js (100%) rename {public/assets => assets}/bower_components/jquery/src/traversing/var/rneedsContext.js (100%) rename {public/assets => assets}/bower_components/jquery/src/traversing/var/siblings.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/ObjectFunctionString.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/arr.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/class2type.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/concat.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/document.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/documentElement.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/fnToString.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/getProto.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/hasOwn.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/indexOf.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/pnum.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/push.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/rcssNum.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/rnothtmlwhite.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/slice.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/support.js (100%) rename {public/assets => assets}/bower_components/jquery/src/var/toString.js (100%) rename {public/assets => assets}/bower_components/jquery/src/wrap.js (100%) rename {public/assets => assets}/bower_components/jvectormap/.bower.json (100%) rename {public/assets => assets}/bower_components/jvectormap/.gitignore (100%) rename {public/assets => assets}/bower_components/jvectormap/LICENSE-AGPL (100%) rename {public/assets => assets}/bower_components/jvectormap/LICENSE-COMMERCIAL (100%) rename {public/assets => assets}/bower_components/jvectormap/README.md (100%) rename {public/assets => assets}/bower_components/jvectormap/build.sh (100%) rename {public/assets => assets}/bower_components/jvectormap/converter/converter.py (100%) rename {public/assets => assets}/bower_components/jvectormap/converter/processor.py (100%) rename {public/assets => assets}/bower_components/jvectormap/converter/simplifier.py (100%) rename {public/assets => assets}/bower_components/jvectormap/jquery-jvectormap.css (100%) rename {public/assets => assets}/bower_components/jvectormap/jquery-jvectormap.js (100%) rename {public/assets => assets}/bower_components/jvectormap/jvectormap.jquery.json (100%) rename {public/assets => assets}/bower_components/jvectormap/lib/jquery-mousewheel.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/abstract-canvas-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/abstract-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/abstract-shape-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/color-scale.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/data-series.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/jvectormap.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/legend.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/map-object.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/map.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/marker.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/multimap.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/numeric-scale.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/ordinal-scale.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/proj.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/region.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/simple-scale.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-canvas-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-circle-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-group-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-image-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-path-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-shape-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/svg-text-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vector-canvas.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-canvas-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-circle-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-group-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-image-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-path-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/src/vml-shape-element.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/bg-red-green.png (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/bg-yellow-blue.png (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/icon-bank.png (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/icon-factory.png (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-1.8.2.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-data-us-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-map.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-us-aea-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-us-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-us-merc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-us-mill-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/jquery-jvectormap-world-mill-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ak-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-al-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ar-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-az-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ca-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-co-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ct-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-dc-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-de-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-fl-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ga-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-hi-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ia-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-id-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-il-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-in-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ks-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ky-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-la-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ma-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-md-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-me-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-mi-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-mn-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-mo-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ms-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-mt-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nc-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nd-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ne-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nh-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nj-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nm-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-nv-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ny-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-oh-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ok-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-or-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-pa-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ri-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-sc-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-sd-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-tn-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-tx-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-ut-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-va-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-vt-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-wa-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-wi-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-wv-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/assets/us/jquery-jvectormap-data-us-wy-lcc-en.js (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/basic.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/build.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/custom.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/drill-down.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/hidden.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/markers.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/memory.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/continents.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/continents_wb.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/france_regions_2016.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/russia.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/russia_fd.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/processor/tz.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/reverse-projection.html (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/us.json (100%) rename {public/assets => assets}/bower_components/jvectormap/tests/world.json (100%) rename {public/assets => assets}/bower_components/mocha/.bower.json (100%) rename {public/assets => assets}/bower_components/mocha/History.md (100%) rename {public/assets => assets}/bower_components/mocha/LICENSE (100%) rename {public/assets => assets}/bower_components/mocha/Readme.md (100%) rename {public/assets => assets}/bower_components/mocha/bower.json (100%) rename {public/assets => assets}/bower_components/mocha/media/logo.svg (100%) rename {public/assets => assets}/bower_components/mocha/mocha.css (100%) rename {public/assets => assets}/bower_components/mocha/mocha.js (100%) rename {public/assets => assets}/bower_components/moment/.bower.json (100%) rename {public/assets => assets}/bower_components/moment/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/moment/LICENSE (100%) rename {public/assets => assets}/bower_components/moment/README.md (100%) rename {public/assets => assets}/bower_components/moment/bower.json (100%) rename {public/assets => assets}/bower_components/moment/locale/af.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-dz.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-kw.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-ly.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-ma.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-sa.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar-tn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ar.js (100%) rename {public/assets => assets}/bower_components/moment/locale/az.js (100%) rename {public/assets => assets}/bower_components/moment/locale/be.js (100%) rename {public/assets => assets}/bower_components/moment/locale/bg.js (100%) rename {public/assets => assets}/bower_components/moment/locale/bn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/bo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/br.js (100%) rename {public/assets => assets}/bower_components/moment/locale/bs.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ca.js (100%) rename {public/assets => assets}/bower_components/moment/locale/cs.js (100%) rename {public/assets => assets}/bower_components/moment/locale/cv.js (100%) rename {public/assets => assets}/bower_components/moment/locale/cy.js (100%) rename {public/assets => assets}/bower_components/moment/locale/da.js (100%) rename {public/assets => assets}/bower_components/moment/locale/de-at.js (100%) rename {public/assets => assets}/bower_components/moment/locale/de-ch.js (100%) rename {public/assets => assets}/bower_components/moment/locale/de.js (100%) rename {public/assets => assets}/bower_components/moment/locale/dv.js (100%) rename {public/assets => assets}/bower_components/moment/locale/el.js (100%) rename {public/assets => assets}/bower_components/moment/locale/en-au.js (100%) rename {public/assets => assets}/bower_components/moment/locale/en-ca.js (100%) rename {public/assets => assets}/bower_components/moment/locale/en-gb.js (100%) rename {public/assets => assets}/bower_components/moment/locale/en-ie.js (100%) rename {public/assets => assets}/bower_components/moment/locale/en-nz.js (100%) rename {public/assets => assets}/bower_components/moment/locale/eo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/es-do.js (100%) rename {public/assets => assets}/bower_components/moment/locale/es.js (100%) rename {public/assets => assets}/bower_components/moment/locale/et.js (100%) rename {public/assets => assets}/bower_components/moment/locale/eu.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fa.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fi.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fr-ca.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fr-ch.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fr.js (100%) rename {public/assets => assets}/bower_components/moment/locale/fy.js (100%) rename {public/assets => assets}/bower_components/moment/locale/gd.js (100%) rename {public/assets => assets}/bower_components/moment/locale/gl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/gom-latn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/he.js (100%) rename {public/assets => assets}/bower_components/moment/locale/hi.js (100%) rename {public/assets => assets}/bower_components/moment/locale/hr.js (100%) rename {public/assets => assets}/bower_components/moment/locale/hu.js (100%) rename {public/assets => assets}/bower_components/moment/locale/hy-am.js (100%) rename {public/assets => assets}/bower_components/moment/locale/id.js (100%) rename {public/assets => assets}/bower_components/moment/locale/is.js (100%) rename {public/assets => assets}/bower_components/moment/locale/it.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ja.js (100%) rename {public/assets => assets}/bower_components/moment/locale/jv.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ka.js (100%) rename {public/assets => assets}/bower_components/moment/locale/kk.js (100%) rename {public/assets => assets}/bower_components/moment/locale/km.js (100%) rename {public/assets => assets}/bower_components/moment/locale/kn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ko.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ky.js (100%) rename {public/assets => assets}/bower_components/moment/locale/lb.js (100%) rename {public/assets => assets}/bower_components/moment/locale/lo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/lt.js (100%) rename {public/assets => assets}/bower_components/moment/locale/lv.js (100%) rename {public/assets => assets}/bower_components/moment/locale/me.js (100%) rename {public/assets => assets}/bower_components/moment/locale/mi.js (100%) rename {public/assets => assets}/bower_components/moment/locale/mk.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ml.js (100%) rename {public/assets => assets}/bower_components/moment/locale/mr.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ms-my.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ms.js (100%) rename {public/assets => assets}/bower_components/moment/locale/my.js (100%) rename {public/assets => assets}/bower_components/moment/locale/nb.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ne.js (100%) rename {public/assets => assets}/bower_components/moment/locale/nl-be.js (100%) rename {public/assets => assets}/bower_components/moment/locale/nl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/nn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/pa-in.js (100%) rename {public/assets => assets}/bower_components/moment/locale/pl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/pt-br.js (100%) rename {public/assets => assets}/bower_components/moment/locale/pt.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ro.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ru.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sd.js (100%) rename {public/assets => assets}/bower_components/moment/locale/se.js (100%) rename {public/assets => assets}/bower_components/moment/locale/si.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sk.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sq.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sr-cyrl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sr.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ss.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sv.js (100%) rename {public/assets => assets}/bower_components/moment/locale/sw.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ta.js (100%) rename {public/assets => assets}/bower_components/moment/locale/te.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tet.js (100%) rename {public/assets => assets}/bower_components/moment/locale/th.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tl-ph.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tlh.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tr.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tzl.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tzm-latn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/tzm.js (100%) rename {public/assets => assets}/bower_components/moment/locale/uk.js (100%) rename {public/assets => assets}/bower_components/moment/locale/ur.js (100%) rename {public/assets => assets}/bower_components/moment/locale/uz-latn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/uz.js (100%) rename {public/assets => assets}/bower_components/moment/locale/vi.js (100%) rename {public/assets => assets}/bower_components/moment/locale/x-pseudo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/yo.js (100%) rename {public/assets => assets}/bower_components/moment/locale/zh-cn.js (100%) rename {public/assets => assets}/bower_components/moment/locale/zh-hk.js (100%) rename {public/assets => assets}/bower_components/moment/locale/zh-tw.js (100%) rename {public/assets => assets}/bower_components/moment/min/locales.js (100%) rename {public/assets => assets}/bower_components/moment/min/locales.min.js (100%) rename {public/assets => assets}/bower_components/moment/min/moment-with-locales.js (100%) rename {public/assets => assets}/bower_components/moment/min/moment-with-locales.min.js (100%) rename {public/assets => assets}/bower_components/moment/min/moment.min.js (100%) rename {public/assets => assets}/bower_components/moment/min/tests.js (100%) rename {public/assets => assets}/bower_components/moment/moment.d.ts (100%) rename {public/assets => assets}/bower_components/moment/moment.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/check-overflow.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/date-from-array.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-anything.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-array.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-object.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-string-and-array.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-string-and-format.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/from-string.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/local.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/parsing-flags.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/utc.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/create/valid.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/abs.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/add-subtract.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/as.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/bubble.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/constructor.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/create.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/duration.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/get.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/humanize.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/iso-string.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/prototype.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/duration/valid.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/format/format.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/base-config.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/calendar.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/constructor.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/en.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/formats.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/invalid.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/lists.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/locale.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/locales.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/ordinal.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/pre-post-format.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/prototype.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/relative.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/locale/set.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/add-subtract.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/calendar.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/clone.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/compare.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/constructor.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/creation-data.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/diff.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/format.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/from.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/get-set.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/locale.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/min-max.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/moment.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/now.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/prototype.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/start-end-of.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/to-type.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/to.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/moment/valid.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/parse/regex.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/parse/token.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/aliases.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/constants.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/day-of-month.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/day-of-week.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/day-of-year.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/hour.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/millisecond.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/minute.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/month.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/offset.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/priorities.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/quarter.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/second.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/timestamp.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/timezone.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/units.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/week-calendar-utils.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/week-year.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/week.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/units/year.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/abs-ceil.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/abs-floor.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/abs-round.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/compare-arrays.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/defaults.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/deprecate.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/extend.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/has-own-prop.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/hooks.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/index-of.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-array.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-date.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-function.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-number.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-object-empty.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-object.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/is-undefined.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/keys.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/map.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/some.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/to-int.js (100%) rename {public/assets => assets}/bower_components/moment/src/lib/utils/zero-fill.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/af.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-dz.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-kw.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-ly.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-ma.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-sa.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar-tn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ar.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/az.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/be.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/bg.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/bn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/bo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/br.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/bs.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ca.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/cs.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/cv.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/cy.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/da.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/de-at.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/de-ch.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/de.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/dv.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/el.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/en-au.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/en-ca.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/en-gb.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/en-ie.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/en-nz.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/eo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/es-do.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/es.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/et.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/eu.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fa.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fi.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fr-ca.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fr-ch.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fr.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/fy.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/gd.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/gl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/gom-latn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/he.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/hi.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/hr.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/hu.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/hy-am.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/id.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/is.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/it.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ja.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/jv.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ka.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/kk.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/km.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/kn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ko.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ky.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/lb.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/lo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/lt.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/lv.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/me.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/mi.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/mk.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ml.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/mr.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ms-my.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ms.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/my.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/nb.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ne.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/nl-be.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/nl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/nn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/pa-in.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/pl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/pt-br.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/pt.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ro.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ru.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sd.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/se.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/si.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sk.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sq.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sr-cyrl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sr.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ss.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sv.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/sw.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ta.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/te.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tet.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/th.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tl-ph.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tlh.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tr.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tzl.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tzm-latn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/tzm.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/uk.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/ur.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/uz-latn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/uz.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/vi.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/x-pseudo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/yo.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/zh-cn.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/zh-hk.js (100%) rename {public/assets => assets}/bower_components/moment/src/locale/zh-tw.js (100%) rename {public/assets => assets}/bower_components/moment/src/moment.js (100%) rename {public/assets => assets}/bower_components/moment/templates/default.js (100%) rename {public/assets => assets}/bower_components/moment/templates/locale-header.js (100%) rename {public/assets => assets}/bower_components/moment/templates/test-header.js (100%) rename {public/assets => assets}/bower_components/morris.js/.bower.json (100%) rename {public/assets => assets}/bower_components/morris.js/.gitignore (100%) rename {public/assets => assets}/bower_components/morris.js/.travis.yml (100%) rename {public/assets => assets}/bower_components/morris.js/Gruntfile.js (100%) rename {public/assets => assets}/bower_components/morris.js/README.md (100%) rename {public/assets => assets}/bower_components/morris.js/bower.json (100%) rename {public/assets => assets}/bower_components/morris.js/bower.travis.json (100%) rename {public/assets => assets}/bower_components/morris.js/examples/_template.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/area-as-line.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/area.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/bar-colors.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/bar-no-axes.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/bar.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/days.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/decimal-custom-hover.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/diagonal-xlabels-bar.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/diagonal-xlabels.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/donut-colors.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/donut-formatter.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/donut.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/dst.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/events.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/goals.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/lib/example.css (100%) rename {public/assets => assets}/bower_components/morris.js/examples/lib/example.js (100%) rename {public/assets => assets}/bower_components/morris.js/examples/months-no-smooth.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/negative.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/no-grid.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/non-continuous.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/non-date.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/quarters.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/resize.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/stacked_bars.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/timestamps.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/updating.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/weeks.html (100%) rename {public/assets => assets}/bower_components/morris.js/examples/years.html (100%) rename {public/assets => assets}/bower_components/morris.js/less/morris.core.less (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.area.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.bar.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.donut.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.grid.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.hover.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/lib/morris.line.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/morris.css (100%) rename {public/assets => assets}/bower_components/morris.js/morris.js (100%) rename {public/assets => assets}/bower_components/morris.js/morris.min.js (100%) rename {public/assets => assets}/bower_components/morris.js/package.json (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/area/area_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/bar/bar_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/bar/colours.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/commas_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/donut/donut_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/grid/auto_grid_lines_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/grid/set_data_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/grid/y_label_format_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/hover_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/label_series_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/line/line_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/pad_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/lib/parse_time_spec.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/specs.html (100%) rename {public/assets => assets}/bower_components/morris.js/spec/support/placeholder.coffee (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/examples.js (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/exemplary/area0.png (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/exemplary/bar0.png (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/exemplary/line0.png (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/exemplary/stacked_bar0.png (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/run.sh (100%) rename {public/assets => assets}/bower_components/morris.js/spec/viz/visual_specs.js (100%) rename {public/assets => assets}/bower_components/raphael/.bower.json (100%) rename {public/assets => assets}/bower_components/raphael/bower.json (100%) rename {public/assets => assets}/bower_components/raphael/dev/banner.txt (100%) rename {public/assets => assets}/bower_components/raphael/dev/raphael.amd.js (100%) rename {public/assets => assets}/bower_components/raphael/dev/raphael.core.js (100%) rename {public/assets => assets}/bower_components/raphael/dev/raphael.svg.js (100%) rename {public/assets => assets}/bower_components/raphael/dev/raphael.vml.js (100%) rename {public/assets => assets}/bower_components/raphael/dev/test/svg/dom.js (100%) rename {public/assets => assets}/bower_components/raphael/dev/test/vml/dom.js (100%) rename {public/assets => assets}/bower_components/raphael/license.txt (100%) rename {public/assets => assets}/bower_components/raphael/raphael.js (100%) rename {public/assets => assets}/bower_components/raphael/raphael.min.js (100%) rename {public/assets => assets}/bower_components/raphael/raphael.no-deps.js (100%) rename {public/assets => assets}/bower_components/raphael/raphael.no-deps.min.js (100%) rename {public/assets => assets}/bower_components/raphael/webpack.config.js (100%) rename {public/assets => assets}/bower_components/raphael/yarn.lock (100%) rename {public/assets => assets}/bower_components/select2/.bower.json (100%) rename {public/assets => assets}/bower_components/select2/.editorconfig (100%) rename {public/assets => assets}/bower_components/select2/.github/CONTRIBUTING.md (100%) rename {public/assets => assets}/bower_components/select2/.github/ISSUE_TEMPLATE.md (100%) rename {public/assets => assets}/bower_components/select2/.github/PULL_REQUEST_TEMPLATE.md (100%) rename {public/assets => assets}/bower_components/select2/.gitignore (100%) rename {public/assets => assets}/bower_components/select2/.jshintignore (100%) rename {public/assets => assets}/bower_components/select2/.jshintrc (100%) rename {public/assets => assets}/bower_components/select2/.travis.yml (100%) rename {public/assets => assets}/bower_components/select2/CHANGELOG.md (100%) rename {public/assets => assets}/bower_components/select2/Gruntfile.js (100%) rename {public/assets => assets}/bower_components/select2/LICENSE.md (100%) rename {public/assets => assets}/bower_components/select2/README.md (100%) rename {public/assets => assets}/bower_components/select2/bower.json (100%) rename {public/assets => assets}/bower_components/select2/component.json (100%) rename {public/assets => assets}/bower_components/select2/composer.json (100%) rename {public/assets => assets}/bower_components/select2/dist/css/select2.css (100%) rename {public/assets => assets}/bower_components/select2/dist/css/select2.min.css (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ar.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/az.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/bg.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ca.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/cs.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/da.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/de.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/el.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/en.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/es.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/et.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/eu.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/fa.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/fi.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/fr.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/gl.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/he.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/hi.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/hr.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/hu.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/hy.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/id.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/is.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/it.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ja.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/km.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ko.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/lt.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/lv.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/mk.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ms.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/nb.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/nl.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/pl.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/pt-BR.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/pt.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ro.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/ru.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/sk.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/sl.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/sr-Cyrl.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/sr.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/sv.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/th.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/tr.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/uk.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/vi.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/zh-CN.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/i18n/zh-TW.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/select2.full.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/select2.full.min.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/select2.js (100%) rename {public/assets => assets}/bower_components/select2/dist/js/select2.min.js (100%) rename {public/assets => assets}/bower_components/select2/docs/README.md (100%) rename {public/assets => assets}/bower_components/select2/docs/announcements-4.0.html (100%) rename {public/assets => assets}/bower_components/select2/docs/community.html (100%) rename {public/assets => assets}/bower_components/select2/docs/examples.html (100%) rename {public/assets => assets}/bower_components/select2/docs/index.html (100%) rename {public/assets => assets}/bower_components/select2/docs/options-old.html (100%) rename {public/assets => assets}/bower_components/select2/docs/options.html (100%) rename {public/assets => assets}/bower_components/select2/package.json (100%) rename {public/assets => assets}/bower_components/select2/select2.jquery.json (100%) rename {public/assets => assets}/bower_components/select2/src/js/banner.end.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/banner.start.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/jquery.mousewheel.shim.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/jquery.select2.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/jquery.shim.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/containerCss.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/dropdownCss.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/initSelection.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/inputData.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/matcher.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/query.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/compat/utils.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/core.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/ajax.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/array.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/base.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/maximumInputLength.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/maximumSelectionLength.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/minimumInputLength.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/select.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/tags.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/data/tokenizer.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/defaults.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/diacritics.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/attachBody.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/attachContainer.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/closeOnSelect.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/hidePlaceholder.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/infiniteScroll.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/minimumResultsForSearch.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/search.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/selectOnClose.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/dropdown/stopPropagation.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ar.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/az.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/bg.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ca.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/cs.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/da.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/de.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/el.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/en.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/es.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/et.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/eu.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/fa.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/fi.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/fr.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/gl.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/he.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/hi.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/hr.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/hu.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/hy.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/id.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/is.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/it.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ja.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/km.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ko.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/lt.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/lv.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/mk.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ms.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/nb.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/nl.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/pl.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/pt-BR.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/pt.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ro.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/ru.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/sk.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/sl.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/sr-Cyrl.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/sr.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/sv.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/th.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/tr.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/uk.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/vi.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/zh-CN.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/i18n/zh-TW.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/keys.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/options.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/results.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/allowClear.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/base.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/clickMask.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/eventRelay.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/multiple.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/placeholder.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/search.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/single.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/selection/stopPropagation.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/translation.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/select2/utils.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/wrapper.end.js (100%) rename {public/assets => assets}/bower_components/select2/src/js/wrapper.start.js (100%) rename {public/assets => assets}/bower_components/select2/src/scss/_dropdown.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/_multiple.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/_single.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/core.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/mixins/_gradients.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/classic/_defaults.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/classic/_multiple.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/classic/_single.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/classic/layout.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/default/_multiple.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/default/_single.scss (100%) rename {public/assets => assets}/bower_components/select2/src/scss/theme/default/layout.scss (100%) rename {public/assets => assets}/bower_components/select2/tests/a11y/search-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/a11y/selection-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/array-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/base-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/inputData-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/maximumInputLength-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/maximumSelectionLength-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/minimumInputLength-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/select-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/tags-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/data/tokenizer-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/dropdown/dropdownCss-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/dropdown/positioning-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/dropdown/selectOnClose-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/dropdown/stopPropagation-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/helpers.js (100%) rename {public/assets => assets}/bower_components/select2/tests/integration.html (100%) rename {public/assets => assets}/bower_components/select2/tests/integration/dom-changes.js (100%) rename {public/assets => assets}/bower_components/select2/tests/integration/jquery-calls.js (100%) rename {public/assets => assets}/bower_components/select2/tests/integration/select2-methods.js (100%) rename {public/assets => assets}/bower_components/select2/tests/options/ajax-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/options/data-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/options/deprecated-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/options/translation-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/options/width-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/results/focusing-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/allowClear-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/containerCss-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/multiple-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/placeholder-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/search-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/single-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/selection/stopPropagation-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/unit.html (100%) rename {public/assets => assets}/bower_components/select2/tests/utils/decorator-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/utils/escapeMarkup-tests.js (100%) rename {public/assets => assets}/bower_components/select2/tests/vendor/jquery-1.7.2.js (100%) rename {public/assets => assets}/bower_components/select2/tests/vendor/qunit-1.23.1.css (100%) rename {public/assets => assets}/bower_components/select2/tests/vendor/qunit-1.23.1.js (100%) rename {public/assets => assets}/bower_components/select2/vendor/jquery-2.1.0.js (100%) rename {public/assets => assets}/build/bootstrap-less/.csscomb.json (100%) rename {public/assets => assets}/build/bootstrap-less/.csslintrc (100%) rename {public/assets => assets}/build/bootstrap-less/alerts.less (100%) rename {public/assets => assets}/build/bootstrap-less/badges.less (100%) rename {public/assets => assets}/build/bootstrap-less/bootstrap.less (100%) rename {public/assets => assets}/build/bootstrap-less/breadcrumbs.less (100%) rename {public/assets => assets}/build/bootstrap-less/button-groups.less (100%) rename {public/assets => assets}/build/bootstrap-less/buttons.less (100%) rename {public/assets => assets}/build/bootstrap-less/carousel.less (100%) rename {public/assets => assets}/build/bootstrap-less/close.less (100%) rename {public/assets => assets}/build/bootstrap-less/code.less (100%) rename {public/assets => assets}/build/bootstrap-less/component-animations.less (100%) rename {public/assets => assets}/build/bootstrap-less/dropdowns.less (100%) rename {public/assets => assets}/build/bootstrap-less/forms.less (100%) rename {public/assets => assets}/build/bootstrap-less/glyphicons.less (100%) rename {public/assets => assets}/build/bootstrap-less/grid.less (100%) rename {public/assets => assets}/build/bootstrap-less/input-groups.less (100%) rename {public/assets => assets}/build/bootstrap-less/jumbotron.less (100%) rename {public/assets => assets}/build/bootstrap-less/labels.less (100%) rename {public/assets => assets}/build/bootstrap-less/list-group.less (100%) rename {public/assets => assets}/build/bootstrap-less/media.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/alerts.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/background-variant.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/border-radius.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/buttons.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/center-block.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/clearfix.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/forms.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/gradients.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/grid-framework.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/grid.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/hide-text.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/image.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/labels.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/list-group.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/nav-divider.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/nav-vertical-align.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/opacity.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/pagination.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/panels.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/progress-bar.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/reset-filter.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/reset-text.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/resize.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/responsive-visibility.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/size.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/tab-focus.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/table-row.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/text-emphasis.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/text-overflow.less (100%) rename {public/assets => assets}/build/bootstrap-less/mixins/vendor-prefixes.less (100%) rename {public/assets => assets}/build/bootstrap-less/modals.less (100%) rename {public/assets => assets}/build/bootstrap-less/navbar.less (100%) rename {public/assets => assets}/build/bootstrap-less/navs.less (100%) rename {public/assets => assets}/build/bootstrap-less/normalize.less (100%) rename {public/assets => assets}/build/bootstrap-less/pager.less (100%) rename {public/assets => assets}/build/bootstrap-less/pagination.less (100%) rename {public/assets => assets}/build/bootstrap-less/panels.less (100%) rename {public/assets => assets}/build/bootstrap-less/popovers.less (100%) rename {public/assets => assets}/build/bootstrap-less/print.less (100%) rename {public/assets => assets}/build/bootstrap-less/progress-bars.less (100%) rename {public/assets => assets}/build/bootstrap-less/responsive-embed.less (100%) rename {public/assets => assets}/build/bootstrap-less/responsive-utilities.less (100%) rename {public/assets => assets}/build/bootstrap-less/scaffolding.less (100%) rename {public/assets => assets}/build/bootstrap-less/tables.less (100%) rename {public/assets => assets}/build/bootstrap-less/theme.less (100%) rename {public/assets => assets}/build/bootstrap-less/thumbnails.less (100%) rename {public/assets => assets}/build/bootstrap-less/tooltip.less (100%) rename {public/assets => assets}/build/bootstrap-less/type.less (100%) rename {public/assets => assets}/build/bootstrap-less/utilities.less (100%) rename {public/assets => assets}/build/bootstrap-less/variables.less (100%) rename {public/assets => assets}/build/bootstrap-less/wells.less (100%) rename {public/assets => assets}/build/grunt/.jshintrc (100%) rename {public/assets => assets}/build/js/.jscsrc (100%) rename {public/assets => assets}/build/js/.jshintrc (100%) rename {public/assets => assets}/build/js/BoxRefresh.js (100%) rename {public/assets => assets}/build/js/BoxWidget.js (100%) rename {public/assets => assets}/build/js/ControlSidebar.js (100%) rename {public/assets => assets}/build/js/DirectChat.js (100%) rename {public/assets => assets}/build/js/Layout.js (100%) rename {public/assets => assets}/build/js/PushMenu.js (100%) rename {public/assets => assets}/build/js/TodoList.js (100%) rename {public/assets => assets}/build/js/Tree.js (100%) rename {public/assets => assets}/build/less/.csslintrc (100%) rename {public/assets => assets}/build/less/404_500_errors.less (100%) rename {public/assets => assets}/build/less/AdminLTE-without-plugins.less (100%) rename {public/assets => assets}/build/less/AdminLTE.less (100%) rename {public/assets => assets}/build/less/alerts.less (100%) rename {public/assets => assets}/build/less/bootstrap-social.less (100%) rename {public/assets => assets}/build/less/boxes.less (100%) rename {public/assets => assets}/build/less/buttons.less (100%) rename {public/assets => assets}/build/less/callout.less (100%) rename {public/assets => assets}/build/less/carousel.less (100%) rename {public/assets => assets}/build/less/control-sidebar.less (100%) rename {public/assets => assets}/build/less/core.less (100%) rename {public/assets => assets}/build/less/datepicker.less (100%) rename {public/assets => assets}/build/less/direct-chat.less (100%) rename {public/assets => assets}/build/less/dropdown.less (100%) rename {public/assets => assets}/build/less/forms.less (100%) rename {public/assets => assets}/build/less/fullcalendar.less (100%) rename {public/assets => assets}/build/less/header.less (100%) rename {public/assets => assets}/build/less/info-box.less (100%) rename {public/assets => assets}/build/less/invoice.less (100%) rename {public/assets => assets}/build/less/labels.less (100%) rename {public/assets => assets}/build/less/lockscreen.less (100%) rename {public/assets => assets}/build/less/login_and_register.less (100%) rename {public/assets => assets}/build/less/mailbox.less (100%) rename {public/assets => assets}/build/less/miscellaneous.less (100%) rename {public/assets => assets}/build/less/mixins.less (100%) rename {public/assets => assets}/build/less/modal.less (100%) rename {public/assets => assets}/build/less/navs.less (100%) rename {public/assets => assets}/build/less/plugins.less (100%) rename {public/assets => assets}/build/less/print.less (100%) rename {public/assets => assets}/build/less/products.less (100%) rename {public/assets => assets}/build/less/profile.less (100%) rename {public/assets => assets}/build/less/progress-bars.less (100%) rename {public/assets => assets}/build/less/select2.less (100%) rename {public/assets => assets}/build/less/sidebar-mini.less (100%) rename {public/assets => assets}/build/less/sidebar.less (100%) rename {public/assets => assets}/build/less/skins/_all-skins.less (100%) rename {public/assets => assets}/build/less/skins/skin-black-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-black.less (100%) rename {public/assets => assets}/build/less/skins/skin-blue-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-blue.less (100%) rename {public/assets => assets}/build/less/skins/skin-green-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-green.less (100%) rename {public/assets => assets}/build/less/skins/skin-purple-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-purple.less (100%) rename {public/assets => assets}/build/less/skins/skin-red-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-red.less (100%) rename {public/assets => assets}/build/less/skins/skin-yellow-light.less (100%) rename {public/assets => assets}/build/less/skins/skin-yellow.less (100%) rename {public/assets => assets}/build/less/small-box.less (100%) rename {public/assets => assets}/build/less/social-widgets.less (100%) rename {public/assets => assets}/build/less/table.less (100%) rename {public/assets => assets}/build/less/timeline.less (100%) rename {public/assets => assets}/build/less/treeview.less (100%) rename {public/assets => assets}/build/less/users-list.less (100%) rename {public/assets => assets}/build/less/variables.less (100%) rename {public/assets => assets}/dist/.DS_Store (100%) rename {public/assets => assets}/dist/css/AdminLTE.css (100%) rename {public/assets => assets}/dist/css/AdminLTE.min.css (100%) rename {public/assets => assets}/dist/css/adminlte.css.map (100%) rename {public/assets => assets}/dist/css/adminlte.min.css.map (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-bootstrap-social.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-bootstrap-social.min.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-fullcalendar.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-fullcalendar.min.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-select2.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-select2.min.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-without-plugins.css (100%) rename {public/assets => assets}/dist/css/alt/AdminLTE-without-plugins.min.css (100%) rename {public/assets => assets}/dist/css/skins/_all-skins.css (100%) rename {public/assets => assets}/dist/css/skins/_all-skins.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-black-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-black-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-black.css (100%) rename {public/assets => assets}/dist/css/skins/skin-black.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-blue-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-blue-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-blue.css (100%) rename {public/assets => assets}/dist/css/skins/skin-blue.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-green-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-green-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-green.css (100%) rename {public/assets => assets}/dist/css/skins/skin-green.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-purple-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-purple-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-purple.css (100%) rename {public/assets => assets}/dist/css/skins/skin-purple.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-red-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-red-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-red.css (100%) rename {public/assets => assets}/dist/css/skins/skin-red.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-yellow-light.css (100%) rename {public/assets => assets}/dist/css/skins/skin-yellow-light.min.css (100%) rename {public/assets => assets}/dist/css/skins/skin-yellow.css (100%) rename {public/assets => assets}/dist/css/skins/skin-yellow.min.css (100%) rename {public/assets => assets}/dist/img/avatar.png (100%) rename {public/assets => assets}/dist/img/avatar04.png (100%) rename {public/assets => assets}/dist/img/avatar2.png (100%) rename {public/assets => assets}/dist/img/avatar3.png (100%) rename {public/assets => assets}/dist/img/avatar5.png (100%) rename {public/assets => assets}/dist/img/boxed-bg.jpg (100%) rename {public/assets => assets}/dist/img/boxed-bg.png (100%) rename {public/assets => assets}/dist/img/credit/american-express.png (100%) rename {public/assets => assets}/dist/img/credit/cirrus.png (100%) rename {public/assets => assets}/dist/img/credit/mastercard.png (100%) rename {public/assets => assets}/dist/img/credit/mestro.png (100%) rename {public/assets => assets}/dist/img/credit/paypal.png (100%) rename {public/assets => assets}/dist/img/credit/paypal2.png (100%) rename {public/assets => assets}/dist/img/credit/visa.png (100%) rename {public/assets => assets}/dist/img/default-50x50.gif (100%) rename {public/assets => assets}/dist/img/icons.png (100%) rename {public/assets => assets}/dist/img/photo1.png (100%) rename {public/assets => assets}/dist/img/photo2.png (100%) rename {public/assets => assets}/dist/img/photo3.jpg (100%) rename {public/assets => assets}/dist/img/photo4.jpg (100%) rename {public/assets => assets}/dist/img/user1-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user2-160x160.jpg (100%) rename {public/assets => assets}/dist/img/user3-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user4-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user5-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user6-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user7-128x128.jpg (100%) rename {public/assets => assets}/dist/img/user8-128x128.jpg (100%) rename {public/assets => assets}/dist/js/adminlte.js (100%) rename {public/assets => assets}/dist/js/adminlte.min.js (100%) rename {public/assets => assets}/dist/js/demo.js (100%) rename {public/assets => assets}/dist/js/pages/dashboard.js (100%) rename {public/assets => assets}/dist/js/pages/dashboard2.js (100%) rename {public/assets => assets}/images/product_image/5a86a444a5f73.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b2fda0108.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b3b05b913.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b3f4bef00.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b434cd4ff.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b44ac4001.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b471b2dd1.jpg (100%) rename {public/assets => assets}/images/product_image/5a86b4a495be7.jpg (100%) rename {public/assets => assets}/images/product_image/5a87f3369adc6.jpg (100%) rename {public/assets => assets}/images/product_image/5a87f33b663c4.jpg (100%) rename {public/assets => assets}/images/product_image/5a87f387955d1.jpg (100%) rename {public/assets => assets}/images/product_image/5a8d7b2b9c623.jpg (100%) rename {public/assets => assets}/images/screenshots/dashboard.PNG (100%) rename {public/assets => assets}/images/screenshots/database.PNG (100%) rename {public/assets => assets}/images/screenshots/login.PNG (100%) rename {public/assets => assets}/plugins/bootstrap-slider/bootstrap-slider.js (100%) rename {public/assets => assets}/plugins/bootstrap-slider/slider.css (100%) rename {public/assets => assets}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.js (100%) rename {public/assets => assets}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js (100%) rename {public/assets => assets}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.css (100%) rename {public/assets => assets}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css (100%) rename {public/assets => assets}/plugins/fileinput/fileinput.min.css (100%) rename {public/assets => assets}/plugins/fileinput/fileinput.min.js (100%) rename {public/assets => assets}/plugins/iCheck/all.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/_all.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/aero.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/aero.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/aero@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/blue.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/blue.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/blue@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/flat.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/flat.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/flat@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/green.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/green.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/green@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/grey.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/grey.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/grey@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/orange.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/orange.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/orange@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/pink.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/pink.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/pink@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/purple.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/purple.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/purple@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/red.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/red.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/red@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/yellow.css (100%) rename {public/assets => assets}/plugins/iCheck/flat/yellow.png (100%) rename {public/assets => assets}/plugins/iCheck/flat/yellow@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/futurico/futurico.css (100%) rename {public/assets => assets}/plugins/iCheck/futurico/futurico.png (100%) rename {public/assets => assets}/plugins/iCheck/futurico/futurico@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/icheck.js (100%) rename {public/assets => assets}/plugins/iCheck/icheck.min.js (100%) rename {public/assets => assets}/plugins/iCheck/line/_all.css (100%) rename {public/assets => assets}/plugins/iCheck/line/aero.css (100%) rename {public/assets => assets}/plugins/iCheck/line/blue.css (100%) rename {public/assets => assets}/plugins/iCheck/line/green.css (100%) rename {public/assets => assets}/plugins/iCheck/line/grey.css (100%) rename {public/assets => assets}/plugins/iCheck/line/line.css (100%) rename {public/assets => assets}/plugins/iCheck/line/line.png (100%) rename {public/assets => assets}/plugins/iCheck/line/line@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/line/orange.css (100%) rename {public/assets => assets}/plugins/iCheck/line/pink.css (100%) rename {public/assets => assets}/plugins/iCheck/line/purple.css (100%) rename {public/assets => assets}/plugins/iCheck/line/red.css (100%) rename {public/assets => assets}/plugins/iCheck/line/yellow.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/_all.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/aero.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/aero.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/aero@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/blue.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/blue.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/blue@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/green.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/green.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/green@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/grey.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/grey.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/grey@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/minimal.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/minimal.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/minimal@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/orange.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/orange.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/orange@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/pink.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/pink.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/pink@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/purple.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/purple.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/purple@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/red.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/red.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/red@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/yellow.css (100%) rename {public/assets => assets}/plugins/iCheck/minimal/yellow.png (100%) rename {public/assets => assets}/plugins/iCheck/minimal/yellow@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/polaris/polaris.css (100%) rename {public/assets => assets}/plugins/iCheck/polaris/polaris.png (100%) rename {public/assets => assets}/plugins/iCheck/polaris/polaris@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/_all.css (100%) rename {public/assets => assets}/plugins/iCheck/square/aero.css (100%) rename {public/assets => assets}/plugins/iCheck/square/aero.png (100%) rename {public/assets => assets}/plugins/iCheck/square/aero@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/blue.css (100%) rename {public/assets => assets}/plugins/iCheck/square/blue.png (100%) rename {public/assets => assets}/plugins/iCheck/square/blue@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/green.css (100%) rename {public/assets => assets}/plugins/iCheck/square/green.png (100%) rename {public/assets => assets}/plugins/iCheck/square/green@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/grey.css (100%) rename {public/assets => assets}/plugins/iCheck/square/grey.png (100%) rename {public/assets => assets}/plugins/iCheck/square/grey@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/orange.css (100%) rename {public/assets => assets}/plugins/iCheck/square/orange.png (100%) rename {public/assets => assets}/plugins/iCheck/square/orange@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/pink.css (100%) rename {public/assets => assets}/plugins/iCheck/square/pink.png (100%) rename {public/assets => assets}/plugins/iCheck/square/pink@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/purple.css (100%) rename {public/assets => assets}/plugins/iCheck/square/purple.png (100%) rename {public/assets => assets}/plugins/iCheck/square/purple@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/red.css (100%) rename {public/assets => assets}/plugins/iCheck/square/red.png (100%) rename {public/assets => assets}/plugins/iCheck/square/red@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/square.css (100%) rename {public/assets => assets}/plugins/iCheck/square/square.png (100%) rename {public/assets => assets}/plugins/iCheck/square/square@2x.png (100%) rename {public/assets => assets}/plugins/iCheck/square/yellow.css (100%) rename {public/assets => assets}/plugins/iCheck/square/yellow.png (100%) rename {public/assets => assets}/plugins/iCheck/square/yellow@2x.png (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.date.extensions.js (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.extensions.js (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.js (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.numeric.extensions.js (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.phone.extensions.js (100%) rename {public/assets => assets}/plugins/input-mask/jquery.inputmask.regex.extensions.js (100%) rename {public/assets => assets}/plugins/input-mask/phone-codes/phone-be.json (100%) rename {public/assets => assets}/plugins/input-mask/phone-codes/phone-codes.json (100%) rename {public/assets => assets}/plugins/input-mask/phone-codes/readme.txt (100%) rename {public/assets => assets}/plugins/jQueryUI/jquery-ui.js (100%) rename {public/assets => assets}/plugins/jQueryUI/jquery-ui.min.js (100%) rename {public/assets => assets}/plugins/jvectormap/jquery-jvectormap-1.2.2.css (100%) rename {public/assets => assets}/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js (100%) rename {public/assets => assets}/plugins/jvectormap/jquery-jvectormap-usa-en.js (100%) rename {public/assets => assets}/plugins/jvectormap/jquery-jvectormap-world-mill-en.js (100%) rename {public/assets => assets}/plugins/pace/pace.css (100%) rename {public/assets => assets}/plugins/pace/pace.js (100%) rename {public/assets => assets}/plugins/pace/pace.min.css (100%) rename {public/assets => assets}/plugins/pace/pace.min.js (100%) rename {public/assets => assets}/plugins/timepicker/bootstrap-timepicker.css (100%) rename {public/assets => assets}/plugins/timepicker/bootstrap-timepicker.js (100%) rename {public/assets => assets}/plugins/timepicker/bootstrap-timepicker.min.css (100%) rename {public/assets => assets}/plugins/timepicker/bootstrap-timepicker.min.js (100%) create mode 100644 contributing.md delete mode 100644 env create mode 100644 index.php delete mode 100644 phpunit.xml.dist delete mode 100644 public/.htaccess delete mode 100644 public/assets/bower_components/datatables.net/i18n/it.json delete mode 100644 public/favicon.ico delete mode 100644 public/index.php delete mode 100644 public/robots.txt delete mode 100644 spark delete mode 100644 system/API/ResponseTrait.php delete mode 100644 system/Autoloader/Autoloader.php delete mode 100644 system/Autoloader/FileLocator.php delete mode 100644 system/CLI/BaseCommand.php delete mode 100644 system/CLI/CLI.php delete mode 100644 system/CLI/CommandRunner.php delete mode 100644 system/CLI/Commands.php delete mode 100644 system/CLI/Console.php delete mode 100644 system/Cache/CacheFactory.php delete mode 100644 system/Cache/CacheInterface.php delete mode 100644 system/Cache/Exceptions/CacheException.php delete mode 100644 system/Cache/Handlers/DummyHandler.php delete mode 100644 system/Cache/Handlers/FileHandler.php delete mode 100644 system/Cache/Handlers/MemcachedHandler.php delete mode 100644 system/Cache/Handlers/PredisHandler.php delete mode 100644 system/Cache/Handlers/RedisHandler.php delete mode 100644 system/Cache/Handlers/WincacheHandler.php delete mode 100644 system/CodeIgniter.php delete mode 100644 system/Commands/Cache/ClearCache.php delete mode 100644 system/Commands/Database/CreateMigration.php delete mode 100644 system/Commands/Database/CreateSeeder.php delete mode 100644 system/Commands/Database/Migrate.php delete mode 100644 system/Commands/Database/MigrateRefresh.php delete mode 100644 system/Commands/Database/MigrateRollback.php delete mode 100644 system/Commands/Database/MigrateStatus.php delete mode 100644 system/Commands/Database/Seed.php delete mode 100644 system/Commands/Help.php delete mode 100644 system/Commands/ListCommands.php delete mode 100644 system/Commands/Server/Serve.php delete mode 100644 system/Commands/Server/rewrite.php delete mode 100644 system/Commands/Sessions/CreateMigration.php delete mode 100644 system/Commands/Sessions/Views/migration.tpl.php delete mode 100644 system/Commands/Utilities/Namespaces.php delete mode 100644 system/Commands/Utilities/Routes.php delete mode 100644 system/Common.php delete mode 100644 system/ComposerScripts.php delete mode 100644 system/Config/AutoloadConfig.php delete mode 100644 system/Config/BaseConfig.php delete mode 100644 system/Config/BaseService.php delete mode 100644 system/Config/Config.php delete mode 100644 system/Config/DotEnv.php delete mode 100644 system/Config/ForeignCharacters.php delete mode 100644 system/Config/Routes.php delete mode 100644 system/Config/Services.php delete mode 100644 system/Config/View.php delete mode 100644 system/Controller.php delete mode 100644 system/Database/BaseBuilder.php delete mode 100644 system/Database/BaseConnection.php delete mode 100644 system/Database/BasePreparedQuery.php delete mode 100644 system/Database/BaseResult.php delete mode 100644 system/Database/BaseUtils.php delete mode 100644 system/Database/Config.php delete mode 100644 system/Database/ConnectionInterface.php delete mode 100644 system/Database/Database.php delete mode 100644 system/Database/Exceptions/DataException.php delete mode 100644 system/Database/Exceptions/ExceptionInterface.php delete mode 100644 system/Database/Forge.php delete mode 100644 system/Database/Migration.php delete mode 100644 system/Database/MigrationRunner.php delete mode 100644 system/Database/ModelFactory.php delete mode 100644 system/Database/MySQLi/Connection.php delete mode 100644 system/Database/MySQLi/Forge.php delete mode 100644 system/Database/MySQLi/PreparedQuery.php delete mode 100644 system/Database/MySQLi/Result.php delete mode 100644 system/Database/Postgre/Builder.php delete mode 100644 system/Database/Postgre/Connection.php delete mode 100644 system/Database/Postgre/Forge.php delete mode 100644 system/Database/Postgre/PreparedQuery.php delete mode 100644 system/Database/Postgre/Result.php delete mode 100644 system/Database/PreparedQueryInterface.php delete mode 100644 system/Database/Query.php delete mode 100644 system/Database/QueryInterface.php delete mode 100644 system/Database/ResultInterface.php delete mode 100644 system/Database/SQLite3/Builder.php delete mode 100644 system/Database/SQLite3/Connection.php delete mode 100644 system/Database/SQLite3/Forge.php delete mode 100644 system/Database/SQLite3/PreparedQuery.php delete mode 100644 system/Database/SQLite3/Result.php delete mode 100644 system/Database/SQLite3/Table.php delete mode 100644 system/Database/Seeder.php delete mode 100644 system/Debug/Exceptions.php delete mode 100644 system/Debug/Iterator.php delete mode 100644 system/Debug/Timer.php delete mode 100644 system/Debug/Toolbar.php delete mode 100644 system/Debug/Toolbar/Collectors/BaseCollector.php delete mode 100644 system/Debug/Toolbar/Collectors/Config.php delete mode 100644 system/Debug/Toolbar/Collectors/Database.php delete mode 100644 system/Debug/Toolbar/Collectors/Events.php delete mode 100644 system/Debug/Toolbar/Collectors/Files.php delete mode 100644 system/Debug/Toolbar/Collectors/History.php delete mode 100644 system/Debug/Toolbar/Collectors/Logs.php delete mode 100644 system/Debug/Toolbar/Collectors/Routes.php delete mode 100644 system/Debug/Toolbar/Collectors/Timers.php delete mode 100644 system/Debug/Toolbar/Collectors/Views.php delete mode 100644 system/Debug/Toolbar/Views/_config.tpl delete mode 100644 system/Debug/Toolbar/Views/_database.tpl delete mode 100644 system/Debug/Toolbar/Views/_events.tpl delete mode 100644 system/Debug/Toolbar/Views/_files.tpl delete mode 100644 system/Debug/Toolbar/Views/_history.tpl delete mode 100644 system/Debug/Toolbar/Views/_logs.tpl delete mode 100644 system/Debug/Toolbar/Views/_routes.tpl delete mode 100644 system/Debug/Toolbar/Views/toolbar.css delete mode 100644 system/Debug/Toolbar/Views/toolbar.js delete mode 100644 system/Debug/Toolbar/Views/toolbar.tpl.php delete mode 100644 system/Debug/Toolbar/Views/toolbarloader.js.php delete mode 100644 system/Email/Email.php delete mode 100644 system/Encryption/Encryption.php delete mode 100644 system/Encryption/Exceptions/EncryptionException.php delete mode 100644 system/Encryption/Handlers/BaseHandler.php delete mode 100644 system/Encryption/Handlers/OpenSSLHandler.php delete mode 100644 system/Entity.php delete mode 100644 system/Events/Events.php delete mode 100644 system/Exceptions/AlertError.php delete mode 100644 system/Exceptions/CastException.php delete mode 100644 system/Exceptions/ConfigException.php delete mode 100644 system/Exceptions/CriticalError.php delete mode 100644 system/Exceptions/DownloadException.php delete mode 100644 system/Exceptions/EmergencyError.php delete mode 100644 system/Exceptions/ExceptionInterface.php delete mode 100644 system/Exceptions/FrameworkException.php delete mode 100644 system/Exceptions/ModelException.php delete mode 100644 system/Exceptions/PageNotFoundException.php delete mode 100644 system/Files/Exceptions/FileException.php delete mode 100644 system/Files/Exceptions/FileNotFoundException.php delete mode 100644 system/Files/File.php delete mode 100644 system/Filters/CSRF.php delete mode 100644 system/Filters/DebugToolbar.php delete mode 100644 system/Filters/FilterInterface.php delete mode 100644 system/Filters/Filters.php delete mode 100644 system/Filters/Honeypot.php delete mode 100644 system/Format/Exceptions/FormatException.php delete mode 100644 system/Format/JSONFormatter.php delete mode 100644 system/Format/XMLFormatter.php delete mode 100644 system/HTTP/CLIRequest.php delete mode 100644 system/HTTP/CURLRequest.php delete mode 100644 system/HTTP/ContentSecurityPolicy.php delete mode 100644 system/HTTP/DownloadResponse.php delete mode 100644 system/HTTP/Exceptions/HTTPException.php delete mode 100644 system/HTTP/Files/FileCollection.php delete mode 100644 system/HTTP/Files/UploadedFile.php delete mode 100644 system/HTTP/Files/UploadedFileInterface.php delete mode 100644 system/HTTP/Header.php delete mode 100644 system/HTTP/IncomingRequest.php delete mode 100644 system/HTTP/Message.php delete mode 100644 system/HTTP/Negotiate.php delete mode 100644 system/HTTP/RedirectResponse.php delete mode 100644 system/HTTP/Request.php delete mode 100644 system/HTTP/RequestInterface.php delete mode 100644 system/HTTP/Response.php delete mode 100644 system/HTTP/ResponseInterface.php delete mode 100644 system/HTTP/URI.php delete mode 100644 system/HTTP/UserAgent.php delete mode 100644 system/Helpers/filesystem_helper.php delete mode 100644 system/Honeypot/Exceptions/HoneypotException.php delete mode 100644 system/Honeypot/Honeypot.php delete mode 100644 system/I18n/Exceptions/I18nException.php delete mode 100644 system/I18n/Time.php delete mode 100644 system/I18n/TimeDifference.php delete mode 100644 system/Images/Exceptions/ImageException.php delete mode 100644 system/Images/Handlers/BaseHandler.php delete mode 100644 system/Images/Handlers/GDHandler.php delete mode 100644 system/Images/Handlers/ImageMagickHandler.php delete mode 100644 system/Images/Image.php delete mode 100644 system/Images/ImageHandlerInterface.php delete mode 100644 system/Language/Language.php delete mode 100644 system/Language/en/CLI.php delete mode 100644 system/Language/en/Cache.php delete mode 100644 system/Language/en/Cast.php delete mode 100644 system/Language/en/Core.php delete mode 100644 system/Language/en/Database.php delete mode 100644 system/Language/en/Email.php delete mode 100644 system/Language/en/Encryption.php delete mode 100644 system/Language/en/Entity.php delete mode 100644 system/Language/en/Fabricator.php delete mode 100644 system/Language/en/Files.php delete mode 100644 system/Language/en/Filters.php delete mode 100644 system/Language/en/Format.php delete mode 100644 system/Language/en/HTTP.php delete mode 100644 system/Language/en/Images.php delete mode 100644 system/Language/en/Language.php delete mode 100644 system/Language/en/Log.php delete mode 100644 system/Language/en/Migrations.php delete mode 100644 system/Language/en/Number.php delete mode 100644 system/Language/en/Pager.php delete mode 100644 system/Language/en/RESTful.php delete mode 100644 system/Language/en/Redirect.php delete mode 100644 system/Language/en/Router.php delete mode 100644 system/Language/en/Seed.php delete mode 100644 system/Language/en/Session.php delete mode 100644 system/Language/en/Time.php delete mode 100644 system/Language/en/Validation.php delete mode 100644 system/Language/en/View.php delete mode 100644 system/Log/Exceptions/LogException.php delete mode 100644 system/Log/Handlers/BaseHandler.php delete mode 100644 system/Log/Handlers/ChromeLoggerHandler.php delete mode 100644 system/Log/Handlers/FileHandler.php delete mode 100644 system/Log/Handlers/HandlerInterface.php delete mode 100644 system/Log/Logger.php delete mode 100644 system/Model.php delete mode 100644 system/Pager/Exceptions/PagerException.php delete mode 100644 system/Pager/Pager.php delete mode 100644 system/Pager/PagerInterface.php delete mode 100644 system/Pager/PagerRenderer.php delete mode 100644 system/Pager/Views/default_full.php delete mode 100644 system/Pager/Views/default_head.php delete mode 100644 system/Pager/Views/default_simple.php delete mode 100644 system/RESTful/ResourceController.php delete mode 100644 system/RESTful/ResourcePresenter.php delete mode 100644 system/Router/RouteCollection.php delete mode 100644 system/Router/RouteCollectionInterface.php delete mode 100644 system/Router/Router.php delete mode 100644 system/Router/RouterInterface.php delete mode 100644 system/Security/Exceptions/SecurityException.php delete mode 100644 system/Security/Security.php delete mode 100644 system/Session/Exceptions/SessionException.php delete mode 100644 system/Session/Handlers/ArrayHandler.php delete mode 100644 system/Session/Handlers/BaseHandler.php delete mode 100644 system/Session/Handlers/DatabaseHandler.php delete mode 100644 system/Session/Handlers/FileHandler.php delete mode 100644 system/Session/Handlers/MemcachedHandler.php delete mode 100644 system/Session/Handlers/RedisHandler.php delete mode 100644 system/Session/Session.php delete mode 100644 system/Session/SessionInterface.php delete mode 100644 system/Test/CIDatabaseTestCase.php delete mode 100644 system/Test/CIUnitTestCase.php delete mode 100644 system/Test/ControllerResponse.php delete mode 100644 system/Test/ControllerTester.php delete mode 100644 system/Test/DOMParser.php delete mode 100644 system/Test/Fabricator.php delete mode 100644 system/Test/FeatureResponse.php delete mode 100644 system/Test/FeatureTestCase.php delete mode 100644 system/Test/FeatureTestTrait.php delete mode 100644 system/Test/Filters/CITestStreamFilter.php delete mode 100644 system/Test/Interfaces/FabricatorModel.php delete mode 100644 system/Test/Mock/MockAppConfig.php delete mode 100644 system/Test/Mock/MockAutoload.php delete mode 100644 system/Test/Mock/MockBuilder.php delete mode 100644 system/Test/Mock/MockCLIConfig.php delete mode 100644 system/Test/Mock/MockCURLRequest.php delete mode 100644 system/Test/Mock/MockCache.php delete mode 100644 system/Test/Mock/MockCodeIgniter.php delete mode 100644 system/Test/Mock/MockCommon.php delete mode 100644 system/Test/Mock/MockConnection.php delete mode 100644 system/Test/Mock/MockEmail.php delete mode 100644 system/Test/Mock/MockEvents.php delete mode 100644 system/Test/Mock/MockFileLogger.php delete mode 100644 system/Test/Mock/MockIncomingRequest.php delete mode 100644 system/Test/Mock/MockLanguage.php delete mode 100644 system/Test/Mock/MockLogger.php delete mode 100644 system/Test/Mock/MockQuery.php delete mode 100644 system/Test/Mock/MockResourceController.php delete mode 100644 system/Test/Mock/MockResourcePresenter.php delete mode 100644 system/Test/Mock/MockResponse.php delete mode 100644 system/Test/Mock/MockResult.php delete mode 100644 system/Test/Mock/MockSecurity.php delete mode 100644 system/Test/Mock/MockServices.php delete mode 100644 system/Test/Mock/MockSession.php delete mode 100644 system/Test/Mock/MockTable.php delete mode 100644 system/Test/ReflectionHelper.php delete mode 100644 system/Test/TestLogger.php delete mode 100644 system/Test/bootstrap.php delete mode 100644 system/ThirdParty/Escaper/Escaper.php delete mode 100644 system/ThirdParty/Escaper/Exception/ExceptionInterface.php delete mode 100644 system/ThirdParty/Escaper/Exception/InvalidArgumentException.php delete mode 100644 system/ThirdParty/Escaper/Exception/RuntimeException.php delete mode 100644 system/ThirdParty/Kint/CallFinder.php delete mode 100644 system/ThirdParty/Kint/Kint.php delete mode 100644 system/ThirdParty/Kint/Object/BasicObject.php delete mode 100644 system/ThirdParty/Kint/Object/BlobObject.php delete mode 100644 system/ThirdParty/Kint/Object/ClosureObject.php delete mode 100644 system/ThirdParty/Kint/Object/DateTimeObject.php delete mode 100644 system/ThirdParty/Kint/Object/InstanceObject.php delete mode 100644 system/ThirdParty/Kint/Object/MethodObject.php delete mode 100644 system/ThirdParty/Kint/Object/ParameterObject.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/Representation.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php delete mode 100644 system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php delete mode 100644 system/ThirdParty/Kint/Object/ResourceObject.php delete mode 100644 system/ThirdParty/Kint/Object/StreamObject.php delete mode 100644 system/ThirdParty/Kint/Object/ThrowableObject.php delete mode 100644 system/ThirdParty/Kint/Object/TraceFrameObject.php delete mode 100644 system/ThirdParty/Kint/Object/TraceObject.php delete mode 100644 system/ThirdParty/Kint/Parser/ArrayObjectPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/Base64Plugin.php delete mode 100644 system/ThirdParty/Kint/Parser/BinaryPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/BlacklistPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ClassMethodsPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ClassStaticsPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ClosurePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ColorPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/DOMDocumentPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/DateTimePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/FsPathPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/IteratorPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/JsonPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/MicrotimePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/MysqliPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/Parser.php delete mode 100644 system/ThirdParty/Kint/Parser/Plugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ProxyPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/SerializePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/SimpleXMLElementPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/SplFileInfoPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/SplObjectStoragePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/StreamPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/TablePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ThrowablePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/TimestampPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/ToStringPlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/TracePlugin.php delete mode 100644 system/ThirdParty/Kint/Parser/XmlPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/CliRenderer.php delete mode 100644 system/ThirdParty/Kint/Renderer/PlainRenderer.php delete mode 100644 system/ThirdParty/Kint/Renderer/Renderer.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/BinaryPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/BlacklistPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/CallablePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/ClosurePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/ColorPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/Plugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/PluginInterface.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/RecursionPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/TablePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/RichRenderer.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/Plugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/Text/TracePlugin.php delete mode 100644 system/ThirdParty/Kint/Renderer/TextRenderer.php delete mode 100644 system/ThirdParty/Kint/Utils.php delete mode 100644 system/ThirdParty/Kint/init.php delete mode 100644 system/ThirdParty/Kint/init_helpers.php delete mode 100644 system/ThirdParty/Kint/resources/compiled/aante-light.css delete mode 100644 system/ThirdParty/Kint/resources/compiled/microtime.js delete mode 100644 system/ThirdParty/Kint/resources/compiled/original.css delete mode 100644 system/ThirdParty/Kint/resources/compiled/plain.css delete mode 100644 system/ThirdParty/Kint/resources/compiled/plain.js delete mode 100644 system/ThirdParty/Kint/resources/compiled/rich.js delete mode 100644 system/ThirdParty/Kint/resources/compiled/shared.js delete mode 100644 system/ThirdParty/Kint/resources/compiled/solarized-dark.css delete mode 100644 system/ThirdParty/Kint/resources/compiled/solarized.css delete mode 100644 system/ThirdParty/PSR/Log/AbstractLogger.php delete mode 100644 system/ThirdParty/PSR/Log/InvalidArgumentException.php delete mode 100644 system/ThirdParty/PSR/Log/LogLevel.php delete mode 100644 system/ThirdParty/PSR/Log/LoggerAwareInterface.php delete mode 100644 system/ThirdParty/PSR/Log/LoggerAwareTrait.php delete mode 100644 system/ThirdParty/PSR/Log/LoggerInterface.php delete mode 100644 system/ThirdParty/PSR/Log/LoggerTrait.php delete mode 100644 system/ThirdParty/PSR/Log/NullLogger.php delete mode 100644 system/Throttle/Throttler.php delete mode 100644 system/Throttle/ThrottlerInterface.php delete mode 100644 system/Typography/Typography.php delete mode 100644 system/Validation/CreditCardRules.php delete mode 100644 system/Validation/Exceptions/ValidationException.php delete mode 100644 system/Validation/FileRules.php delete mode 100644 system/Validation/FormatRules.php delete mode 100644 system/Validation/Rules.php delete mode 100644 system/Validation/Validation.php delete mode 100644 system/Validation/ValidationInterface.php delete mode 100644 system/Validation/Views/list.php delete mode 100644 system/Validation/Views/single.php delete mode 100644 system/View/Cell.php delete mode 100644 system/View/Exceptions/ViewException.php delete mode 100644 system/View/Filters.php delete mode 100644 system/View/Parser.php delete mode 100644 system/View/Plugins.php delete mode 100644 system/View/RendererInterface.php delete mode 100644 system/View/Table.php delete mode 100644 system/View/View.php delete mode 100644 system/bootstrap.php create mode 100644 system/core/Benchmark.php create mode 100644 system/core/CodeIgniter.php create mode 100644 system/core/Common.php create mode 100644 system/core/Config.php create mode 100644 system/core/Controller.php create mode 100644 system/core/Exceptions.php create mode 100644 system/core/Hooks.php create mode 100644 system/core/Input.php create mode 100644 system/core/Lang.php create mode 100644 system/core/Loader.php create mode 100644 system/core/Log.php rename system/{Filters/Exceptions/FilterException.php => core/Model.php} (50%) create mode 100644 system/core/Output.php create mode 100644 system/core/Router.php create mode 100644 system/core/Security.php create mode 100644 system/core/URI.php create mode 100644 system/core/Utf8.php create mode 100644 system/core/compat/hash.php create mode 100644 system/core/compat/index.html create mode 100644 system/core/compat/mbstring.php create mode 100644 system/core/compat/password.php create mode 100644 system/core/compat/standard.php create mode 100644 system/core/index.html create mode 100644 system/database/DB.php create mode 100644 system/database/DB_cache.php create mode 100644 system/database/DB_driver.php create mode 100644 system/database/DB_forge.php create mode 100644 system/database/DB_query_builder.php create mode 100644 system/database/DB_result.php create mode 100644 system/database/DB_utility.php create mode 100644 system/database/drivers/cubrid/cubrid_driver.php create mode 100644 system/database/drivers/cubrid/cubrid_forge.php create mode 100644 system/database/drivers/cubrid/cubrid_result.php create mode 100644 system/database/drivers/cubrid/cubrid_utility.php create mode 100644 system/database/drivers/cubrid/index.html create mode 100644 system/database/drivers/ibase/ibase_driver.php create mode 100644 system/database/drivers/ibase/ibase_forge.php create mode 100644 system/database/drivers/ibase/ibase_result.php rename system/{Router/Exceptions/RouterException.php => database/drivers/ibase/ibase_utility.php} (55%) create mode 100644 system/database/drivers/ibase/index.html create mode 100644 system/database/drivers/index.html create mode 100644 system/database/drivers/mssql/index.html create mode 100644 system/database/drivers/mssql/mssql_driver.php create mode 100644 system/database/drivers/mssql/mssql_forge.php create mode 100644 system/database/drivers/mssql/mssql_result.php rename system/{Database/Postgre/Utils.php => database/drivers/mssql/mssql_utility.php} (55%) create mode 100644 system/database/drivers/mysql/index.html create mode 100644 system/database/drivers/mysql/mysql_driver.php create mode 100644 system/database/drivers/mysql/mysql_forge.php create mode 100644 system/database/drivers/mysql/mysql_result.php create mode 100644 system/database/drivers/mysql/mysql_utility.php create mode 100644 system/database/drivers/mysqli/index.html create mode 100644 system/database/drivers/mysqli/mysqli_driver.php create mode 100644 system/database/drivers/mysqli/mysqli_forge.php create mode 100644 system/database/drivers/mysqli/mysqli_result.php create mode 100644 system/database/drivers/mysqli/mysqli_utility.php create mode 100644 system/database/drivers/oci8/index.html create mode 100644 system/database/drivers/oci8/oci8_driver.php create mode 100644 system/database/drivers/oci8/oci8_forge.php create mode 100644 system/database/drivers/oci8/oci8_result.php rename system/{Encryption/EncrypterInterface.php => database/drivers/oci8/oci8_utility.php} (56%) create mode 100644 system/database/drivers/odbc/index.html create mode 100644 system/database/drivers/odbc/odbc_driver.php rename system/{Database/MySQLi/Builder.php => database/drivers/odbc/odbc_forge.php} (51%) create mode 100644 system/database/drivers/odbc/odbc_result.php create mode 100644 system/database/drivers/odbc/odbc_utility.php create mode 100644 system/database/drivers/pdo/index.html create mode 100644 system/database/drivers/pdo/pdo_driver.php rename system/{Format/FormatterInterface.php => database/drivers/pdo/pdo_forge.php} (59%) create mode 100644 system/database/drivers/pdo/pdo_result.php create mode 100644 system/database/drivers/pdo/pdo_utility.php create mode 100644 system/database/drivers/pdo/subdrivers/index.html create mode 100644 system/database/drivers/pdo/subdrivers/pdo_4d_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_4d_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_informix_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_informix_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_oci_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_oci_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php rename system/{Database/SQLite3/Utils.php => database/drivers/pdo/subdrivers/pdo_odbc_forge.php} (55%) create mode 100644 system/database/drivers/pdo/subdrivers/pdo_pgsql_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php create mode 100644 system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php create mode 100644 system/database/drivers/postgre/index.html create mode 100644 system/database/drivers/postgre/postgre_driver.php create mode 100644 system/database/drivers/postgre/postgre_forge.php create mode 100644 system/database/drivers/postgre/postgre_result.php rename system/{Modules/Modules.php => database/drivers/postgre/postgre_utility.php} (52%) create mode 100644 system/database/drivers/sqlite/index.html create mode 100644 system/database/drivers/sqlite/sqlite_driver.php create mode 100644 system/database/drivers/sqlite/sqlite_forge.php create mode 100644 system/database/drivers/sqlite/sqlite_result.php rename system/{Router/Exceptions/RedirectException.php => database/drivers/sqlite/sqlite_utility.php} (59%) create mode 100644 system/database/drivers/sqlite3/index.html create mode 100644 system/database/drivers/sqlite3/sqlite3_driver.php create mode 100644 system/database/drivers/sqlite3/sqlite3_forge.php create mode 100644 system/database/drivers/sqlite3/sqlite3_result.php rename system/{CLI/Exceptions/CLIException.php => database/drivers/sqlite3/sqlite3_utility.php} (59%) create mode 100644 system/database/drivers/sqlsrv/index.html create mode 100644 system/database/drivers/sqlsrv/sqlsrv_driver.php create mode 100644 system/database/drivers/sqlsrv/sqlsrv_forge.php create mode 100644 system/database/drivers/sqlsrv/sqlsrv_result.php rename system/{Database/MySQLi/Utils.php => database/drivers/sqlsrv/sqlsrv_utility.php} (54%) create mode 100644 system/database/index.html create mode 100644 system/fonts/index.html create mode 100644 system/fonts/texb.ttf create mode 100644 system/helpers/captcha_helper.php create mode 100644 system/helpers/directory_helper.php create mode 100644 system/helpers/download_helper.php create mode 100644 system/helpers/email_helper.php create mode 100644 system/helpers/file_helper.php create mode 100644 system/helpers/index.html rename system/{Helpers/test_helper.php => helpers/language_helper.php} (50%) create mode 100644 system/helpers/path_helper.php create mode 100644 system/helpers/smiley_helper.php create mode 100644 system/helpers/string_helper.php create mode 100644 system/helpers/typography_helper.php create mode 100644 system/language/english/calendar_lang.php create mode 100644 system/language/english/date_lang.php create mode 100644 system/language/english/db_lang.php create mode 100644 system/language/english/email_lang.php create mode 100644 system/language/english/form_validation_lang.php create mode 100644 system/language/english/ftp_lang.php create mode 100644 system/language/english/imglib_lang.php create mode 100644 system/language/english/index.html create mode 100644 system/language/english/migration_lang.php rename system/{Cache/Exceptions/ExceptionInterface.php => language/english/number_lang.php} (66%) rename system/{Database/Exceptions/DatabaseException.php => language/english/pagination_lang.php} (65%) create mode 100644 system/language/english/profiler_lang.php create mode 100644 system/language/english/unit_test_lang.php create mode 100644 system/language/english/upload_lang.php create mode 100644 system/language/index.html create mode 100644 system/libraries/Cache/Cache.php create mode 100644 system/libraries/Cache/drivers/Cache_apc.php create mode 100644 system/libraries/Cache/drivers/Cache_dummy.php create mode 100644 system/libraries/Cache/drivers/Cache_file.php create mode 100644 system/libraries/Cache/drivers/Cache_memcached.php create mode 100644 system/libraries/Cache/drivers/Cache_redis.php create mode 100644 system/libraries/Cache/drivers/Cache_wincache.php create mode 100644 system/libraries/Cache/drivers/index.html create mode 100644 system/libraries/Cache/index.html create mode 100644 system/libraries/Calendar.php create mode 100644 system/libraries/Cart.php create mode 100644 system/libraries/Driver.php create mode 100644 system/libraries/Email.php create mode 100644 system/libraries/Encrypt.php create mode 100644 system/libraries/Encryption.php create mode 100644 system/libraries/Form_validation.php create mode 100644 system/libraries/Ftp.php create mode 100644 system/libraries/Image_lib.php create mode 100644 system/libraries/Javascript.php create mode 100644 system/libraries/Javascript/Jquery.php create mode 100644 system/libraries/Javascript/index.html create mode 100644 system/libraries/Migration.php create mode 100644 system/libraries/Pagination.php create mode 100644 system/libraries/Parser.php create mode 100644 system/libraries/Profiler.php create mode 100644 system/libraries/Session/Session.php create mode 100644 system/libraries/Session/SessionHandlerInterface.php create mode 100644 system/libraries/Session/Session_driver.php create mode 100644 system/libraries/Session/drivers/Session_database_driver.php create mode 100644 system/libraries/Session/drivers/Session_files_driver.php create mode 100644 system/libraries/Session/drivers/Session_memcached_driver.php create mode 100644 system/libraries/Session/drivers/Session_redis_driver.php create mode 100644 system/libraries/Session/drivers/index.html create mode 100644 system/libraries/Session/index.html create mode 100644 system/libraries/Table.php create mode 100644 system/libraries/Trackback.php create mode 100644 system/libraries/Typography.php create mode 100644 system/libraries/Unit_test.php create mode 100644 system/libraries/Upload.php create mode 100644 system/libraries/User_agent.php create mode 100644 system/libraries/Xmlrpc.php create mode 100644 system/libraries/Xmlrpcs.php create mode 100644 system/libraries/Zip.php create mode 100644 system/libraries/index.html delete mode 100644 writable/.htaccess diff --git a/.gitignore b/.gitignore index 11abea69..bfea17cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,127 +1,17 @@ -#------------------------- -# Operating Specific Junk Files -#------------------------- +*/config/development +*/logs/log-*.php +!*/logs/index.html +*/cache/* +!*/cache/index.html +!*/cache/.htaccess -# 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 - +#codeigniter 3 +application/logs/* +!application/logs/index.html +!application/logs/.htaccess +/vendor/ diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..7bdcb8fd --- /dev/null +++ b/.htaccess @@ -0,0 +1,5 @@ +RewriteEngine on +RewriteCond $1 !^(index\.php|resources|robots\.txt) +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)$ index.php/$1 [L,QSA] \ No newline at end of file diff --git a/__MACOSX/application/controllers/._Attributes.php b/__MACOSX/application/controllers/._Attributes.php new file mode 100644 index 0000000000000000000000000000000000000000..0eea21e4388200485959746b4135f58d45711883 GIT binary patch literal 210 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}u^SMB_!U6R08`;00ODZ-jv*mIP;rnB Iur73U08|YJ=l}o! literal 0 HcmV?d00001 diff --git a/__MACOSX/application/models/._Model_attributes.php b/__MACOSX/application/models/._Model_attributes.php new file mode 100644 index 0000000000000000000000000000000000000000..0eea21e4388200485959746b4135f58d45711883 GIT binary patch literal 210 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB$Vqox1Ojhs@R)|o50+1L3ClDI}@d6+Q@h<@}5x_AdBnYYuq+-=jZAr78K;9>gA@EB&H;mBwEF1`?`3Rq~?Yerxt}IrWZ3XBo*Xj7MB '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/ContentSecurityPolicy.php b/app/Config/ContentSecurityPolicy.php deleted file mode 100644 index 0e6955a5..00000000 --- a/app/Config/ContentSecurityPolicy.php +++ /dev/null @@ -1,48 +0,0 @@ - 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 deleted file mode 100644 index 5fe33d31..00000000 --- a/app/Config/Exceptions.php +++ /dev/null @@ -1,42 +0,0 @@ - \CodeIgniter\Filters\CSRF::class, - 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, - 'honeypot' => \CodeIgniter\Filters\Honeypot::class, - 'auth' => \App\Filters\Auth::class, - ]; - - // Always applied before every request - public $globals = [ - 'before' => [ - //'honeypot' - // 'csrf', - 'auth' => ['except' => ['auth/login', 'login']], - ], - '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 deleted file mode 100644 index 8ee6f113..00000000 --- a/app/Config/ForeignCharacters.php +++ /dev/null @@ -1,6 +0,0 @@ - \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 deleted file mode 100644 index 3d9e3726..00000000 --- a/app/Config/Honeypot.php +++ /dev/null @@ -1,42 +0,0 @@ -{label}'; - - /** - * Honeypot container - * - * @var string - */ - public $container = '
{template}
'; -} diff --git a/app/Config/Images.php b/app/Config/Images.php deleted file mode 100644 index a416b8b8..00000000 --- a/app/Config/Images.php +++ /dev/null @@ -1,31 +0,0 @@ - \CodeIgniter\Images\Handlers\GDHandler::class, - 'imagick' => \CodeIgniter\Images\Handlers\ImageMagickHandler::class, - ]; -} diff --git a/app/Config/Kint.php b/app/Config/Kint.php deleted file mode 100644 index 09db83dd..00000000 --- a/app/Config/Kint.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - - /* - * 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 deleted file mode 100644 index b83fe907..00000000 --- a/app/Config/Migrations.php +++ /dev/null @@ -1,50 +0,0 @@ - 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/Modules.php b/app/Config/Modules.php deleted file mode 100644 index 40cb9875..00000000 --- a/app/Config/Modules.php +++ /dev/null @@ -1,45 +0,0 @@ - '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 deleted file mode 100644 index 6ca2d373..00000000 --- a/app/Config/Paths.php +++ /dev/null @@ -1,73 +0,0 @@ - '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 deleted file mode 100644 index 97f08c75..00000000 --- a/app/Config/Validation.php +++ /dev/null @@ -1,36 +0,0 @@ - 'CodeIgniter\Validation\Views\list', - 'single' => 'CodeIgniter\Validation\Views\single', - ]; - - //-------------------------------------------------------------------- - // Rules - //-------------------------------------------------------------------- -} diff --git a/app/Config/View.php b/app/Config/View.php deleted file mode 100644 index f66b2532..00000000 --- a/app/Config/View.php +++ /dev/null @@ -1,34 +0,0 @@ -Model_auth = new Model_auth(); - $this->validation = \Config\Services::validation(); - } - - /* - Check if the login form is submitted, and validates the user credential - If not submitted it redirects to the login page - */ - public function login() - { - if(isset($this->session->logged_in) && $this->session->logged_in === true) { - return redirect()->to(base_url('dashboard')); - } - - if ($this->validate([ - 'email' => ['label' => 'Email', 'rules' => 'required'], - 'password' => ['label' => 'Password', 'rules' => 'required|min_length[8]'] - ])) { - // true case - $email_exists = $this->Model_auth->check_email($this->request->getPost('email')); - - if($email_exists == TRUE) { - $login = $this->Model_auth->login($this->request->getPost('email'), $this->request->getPost('password')); - - if($login) { - - $logged_in_sess = [ - 'id' => $login->id, - 'username' => $login->username, - 'email' => $login->email, - 'logged_in' => TRUE - ]; - - $this->session->set($logged_in_sess); - return redirect()->to(base_url('dashboard')); - } - else { - $this->data['errors'] = 'Incorrect username/password combination'; - echo view('login', $this->data); - } - } - else { - $this->data['errors'] = 'Email does not exists'; - - echo view('login', $this->data); - } - } - else { - // false case - if($this->request->getMethod()=="get") echo view('login'); - else{ - $this->data['validation'] = $this->validation; - echo view('login', $this->data); - } - } - } - - /* - clears the session and redirects to login page - */ - public function logout() - { - $this->session->destroy(); - return redirect()->to(base_url('auth/login')); - } - -} diff --git a/app/Controllers/Company.php b/app/Controllers/Company.php deleted file mode 100644 index 3f3b9c04..00000000 --- a/app/Controllers/Company.php +++ /dev/null @@ -1,76 +0,0 @@ -data['page_title'] = 'Company'; - - $this->model_company = new Model_company(); - $this->validation = \Config\Services::validation(); - } - - /* - * It redirects to the company page and displays all the company information - * It also updates the company information into the database if the - * validation for each input field is successfully valid - */ - public function index() - { - if(!in_array('updateCompany', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - $this->validation->setRule('company_name', 'Company name', 'trim|required'); - $this->validation->setRule('service_charge_value', 'Charge Amount', 'trim|integer'); - $this->validation->setRule('vat_charge_value', 'Vat Charge', 'trim|integer'); - $this->validation->setRule('address', 'Address', 'trim|required'); - $this->validation->setRule('message', 'Message', 'trim|required'); - - - if ($this->validate($this->validation->getRules()) == TRUE) { - // true case - - $data = array( - 'company_name' => $this->request->getPost('company_name'), - 'service_charge_value' => $this->request->getPost('service_charge_value'), - 'vat_charge_value' => $this->request->getPost('vat_charge_value'), - 'address' => $this->request->getPost('address'), - 'phone' => $this->request->getPost('phone'), - 'country' => $this->request->getPost('country'), - 'message' => $this->request->getPost('message'), - 'currency' => $this->request->getPost('currency') - ); - - - - $update = $this->model_company->update(1, $data); - if($update == true) { - $this->session->setFlashdata('success', lang('Main.createdOK')); - return redirect()->to(base_url('company/')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('company/index')); - } - } - else { - - // false case - - - $this->data['currency_symbols'] = $this->currency(); - $this->data['company_data'] = $this->model_company->find(1); - $this->render_template('company/index', $this->data); - } - - - } - -} \ No newline at end of file diff --git a/app/Controllers/File.php b/app/Controllers/File.php deleted file mode 100644 index d9e38dde..00000000 --- a/app/Controllers/File.php +++ /dev/null @@ -1,26 +0,0 @@ -response - ->setStatusCode(200) - ->setContentType($file->getMimeType()) - ->setBody($image) - ->send(); - - } -} \ No newline at end of file diff --git a/app/Controllers/Products.php b/app/Controllers/Products.php deleted file mode 100644 index 784e52fb..00000000 --- a/app/Controllers/Products.php +++ /dev/null @@ -1,345 +0,0 @@ -data['page_title'] = 'Products'; - - $this->model_products = new Model_products(); - $this->model_brands = new Model_brands(); - $this->model_category = new Model_category(); - $this->model_stores = new Model_stores(); - $this->model_attributes = new Model_attributes(); - - $this->validation = \Config\Services::validation(); - } - - /* - * It only redirects to the manage product page - */ - public function index() - { - if(!in_array('viewProduct', $this->permission)) { - $this->response->redirect(base_url('/dashboard')); - } - - $this->data['locale'] = $this->request->getLocale(); - - $this->render_template('products/index', $this->data); - } - - /* - * It Fetches the products data from the product table - * this function is called from the datatable ajax function - */ - public function fetchProductData() - { - $result = array('data' => array()); - - $data = $this->model_products->findAll(); - - foreach ($data as $key => $value) { - - $store_data = $this->model_stores->find($value->store_id); - // button - $buttons = ''; - if(in_array('updateProduct', $this->permission)) { - $buttons .= ''; - } - - if(in_array('deleteProduct', $this->permission)) { - $buttons .= ' '; - } - - if($value->image!=""){ - $img = ''.$value->name.''; - }else{ - $img = ''; - } - - $availability = ($value->availability == 1) ? 'Active' : 'Inactive'; - - $qty_status = ''; - if($value->qty <= 10) { - $qty_status = 'Low !'; - } else if($value->qty <= 0) { - $qty_status = 'Out of stock !'; - } - - - $result['data'][$key] = array( - $img, - $value->sku, - $value->name, - $value->price, - $value->qty . ' ' . $qty_status, - $store_data->name, - $availability, - $buttons - ); - } // /foreach - - echo json_encode($result); - } - - /* - * If the validation is not valid, then it redirects to the create page. - * If the validation for each input field is valid then it inserts the data into the database - * and it stores the operation message into the session flashdata and display on the manage product page - */ - public function create() - { - if(!in_array('createProduct', $this->permission)) { - $this->response->redirect(base_url('/dashboard')); - } - - if ($this->validate([ - 'product_name' => ['label' => 'Product', 'rules' => 'trim|required'], - 'sku' => ['label' => 'SKU', 'rules' => 'trim|required'], - 'price' => ['label' => 'Price', 'rules' => 'trim|required'], - 'qty' => ['label' => 'Qty', 'rules' => 'trim|required'], - 'store' => ['label' => 'Store', 'rules' => 'trim|required'], - 'availability' => ['label' => 'Availability', 'rules' => 'trim|required'] - ])) { - // true case - $upload_image = $this->upload_image(); - - $data = array( - 'name' => $this->request->getPost('product_name'), - 'sku' => $this->request->getPost('sku'), - 'price' => $this->request->getPost('price'), - 'qty' => $this->request->getPost('qty'), - 'image' => $upload_image, - 'description' => $this->request->getPost('description'), - 'attribute_value_id' => json_encode($this->request->getPost('attributes_value_id')), - 'brand_id' => json_encode($this->request->getPost('brands')), - 'category_id' => json_encode($this->request->getPost('category')), - 'store_id' => $this->request->getPost('store'), - 'availability' => $this->request->getPost('availability'), - ); - - $create = $this->model_products->insert($data); - if($create == true) { - $this->session->setFlashdata('success', lang('Main.createdOK')); - // redirect('products/')); - // header("location: /products/"); - $this->response->redirect(base_url('/products/')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - // redirect('products/create')); - // header("location: /products/create"); - $this->response->redirect(base_url('/products/create')); - } - } - else { - // false case - - // attributes - $attribute_data = $this->model_attributes->getActiveAttributeData(); - - $attributes_final_data = array(); - foreach ($attribute_data as $k => $v) { - $attributes_final_data[$k]['attribute_data'] = $v; - - $value = $this->model_attributes->getAttributeValueData($v->id); - - $attributes_final_data[$k]['attribute_value'] = $value; - } - - $this->data['attributes'] = $attributes_final_data; - $this->data['brands'] = $this->model_brands->getActiveBrands(); - $this->data['category'] = $this->model_category->getActiveCategroy(); - $this->data['stores'] = $this->model_stores->getActiveStore(); - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - - $this->render_template('products/create', $this->data); - } - } - - /* - * This function is invoked from another function to upload the image into the assets folder - * and returns the image path - */ - public function upload_image() - { - //// assets/images/product_image - $config['upload_path'] = 'assets/images/product_image'; - // $config['file_name'] = uniqid(); - // $config['allowed_types'] = 'gif|jpg|png'; - // $config['max_size'] = '1000'; - - //// $config['max_width'] = '1024';s - //// $config['max_height'] = '768'; - - // $this->load->library('upload', $config); - // if ( ! $this->upload->do_upload('product_image')) - // { - // $error = $this->upload->display_errors(); - // return $error; - // } - // else - // { - // $data = array('upload_data' => $this->upload->data()); - // $type = explode('.', $_FILES['product_image']['name']); - // $type = $type[count($type) - 1]; - - // $path = $config['upload_path'].'/'.$config['file_name'].'.'.$type; - // return ($data == true) ? $path : false; - // } - $input = $this->validate([ - 'product_image' => [ - 'uploaded[product_image]', - 'mime_in[product_image,image/jpg,image/jpeg,image/png]', - 'max_size[product_image,1000]', - ] - ]); - - if (!$input) { - return false; - } else { - $file = $this->request->getFile('product_image'); - - // Generate a new secure name - $name = $file->getRandomName(); - - // Move the file to it's new home - $file->move(WRITEPATH . 'uploads', $name); - - // echo $file->getSize('mb'); // 1.23 - // echo $file->getExtension(); // jpg - // echo $file->getType(); // image/jpg - return '/file/'.$name; - - } - } - - /* - * If the validation is not valid, then it redirects to the edit product page - * If the validation is successfully then it updates the data into the database - * and it stores the operation message into the session flashdata and display on the manage product page - */ - public function update($product_id) - { - if(!in_array('updateProduct', $this->permission)) { - $this->response->redirect(base_url('/dashboard')); - } - - if(!$product_id) { - $this->response->redirect(base_url('/dashboard')); - } - - if ($this->validate([ - 'product_name' => ['label' => 'Product', 'rules' => 'trim|required'], - 'sku' => ['label' => 'SKU', 'rules' => 'trim|required'], - 'price' => ['label' => 'Price', 'rules' => 'trim|required'], - 'qty' => ['label' => 'Qty', 'rules' => 'trim|required'], - 'store' => ['label' => 'Store', 'rules' => 'trim|required'], - 'availability' => ['label' => 'Availability', 'rules' => 'trim|required'] - ])) { - // true case - - $data = array( - 'name' => $this->request->getPost('product_name'), - 'sku' => $this->request->getPost('sku'), - 'price' => $this->request->getPost('price'), - 'qty' => $this->request->getPost('qty'), - 'description' => $this->request->getPost('description'), - 'attribute_value_id' => json_encode($this->request->getPost('attributes_value_id')), - 'brand_id' => json_encode($this->request->getPost('brands')), - 'category_id' => json_encode($this->request->getPost('category')), - 'store_id' => $this->request->getPost('store'), - 'availability' => $this->request->getPost('availability'), - ); - - - if($_FILES['product_image']['size'] > 0) { - $upload_image = $this->upload_image(); - $upload_image = array('image' => $upload_image); - - $this->model_products->update($product_id, $upload_image); - } - - $update = $this->model_products->update($product_id, $data); - if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - $this->response->redirect(base_url('/products')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - $this->response->redirect(base_url('/products/update/'.$product_id)); - } - } - else { - // attributes - $attribute_data = $this->model_attributes->getActiveAttributeData(); - - $attributes_final_data = array(); - foreach ($attribute_data as $k => $v) { - $attributes_final_data[$k]['attribute_data'] = $v; - - $value = $this->model_attributes->getAttributeValueData($v->id); - - $attributes_final_data[$k]['attribute_value'] = $value; - } - - // false case - $this->data['attributes'] = $attributes_final_data; - $this->data['brands'] = $this->model_brands->getActiveBrands(); - $this->data['category'] = $this->model_category->getActiveCategroy(); - $this->data['stores'] = $this->model_stores->getActiveStore(); - - $product_data = $this->model_products->find($product_id); - $this->data['product_data'] = $product_data; - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - $this->render_template('products/edit', $this->data); - } - } - - /* - * It removes the data from the database - * and it returns the response into the json format - */ - public function remove() - { - if(!in_array('deleteProduct', $this->permission)) { - $this->response->redirect(base_url('/dashboard')); - } - - $product_id = $this->request->getPost('product_id'); - - $response = array(); - if($product_id) { - $delete = $this->model_products->delete($product_id); - if($delete == true) { - $response['success'] = true; - $response['messages'] = "Successfully removed"; - } - else { - $response['success'] = false; - $response['messages'] = "Error in the database while removing the product information"; - } - } - else { - $response['success'] = false; - $response['messages'] = "Refersh the page again!!"; - } - - echo json_encode($response); - } - -} \ No newline at end of file diff --git a/app/Controllers/Users.php b/app/Controllers/Users.php deleted file mode 100644 index 737c0626..00000000 --- a/app/Controllers/Users.php +++ /dev/null @@ -1,348 +0,0 @@ -data['page_title'] = 'Users'; - - - $this->model_users = new Model_users(); - $this->model_groups = new Model_groups(); - $this->validation = \Config\Services::validation(); - } - - - public function index() - { - if(!in_array('viewUser', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - $user_data = $this->model_users->getUserData(); - - $result = array(); - foreach ($user_data as $k => $v) { - - $result[$k]['user_info'] = $v; - - $group = $this->model_users->getUserGroup($v->id); - $result[$k]['user_group'] = $group; - } - - $this->data['user_data'] = $result; - - $this->render_template('users/index', $this->data); - } - - public function create() - { - if(!in_array('createUser', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - $this->validation->setRule('groups', 'Group', 'required'); - $this->validation->setRule('username', 'Username', 'trim|required|min_length[5]|max_length[12]|is_unique[users.username]'); - $this->validation->setRule('email', 'Email', 'trim|required|is_unique[users.email]'); - $this->validation->setRule('password', 'Password', 'trim|required|min_length[8]'); - $this->validation->setRule('cpassword', 'Confirm password', 'trim|required|matches[password]'); - $this->validation->setRule('fname', 'First name', 'trim|required'); - - if ($this->validate($this->validation->getRules()) == TRUE) { - // true case - $password = $this->password_hash($this->request->getPost('password')); - $data = array( - 'username' => $this->request->getPost('username'), - 'password' => $password, - 'email' => $this->request->getPost('email'), - 'firstname' => $this->request->getPost('fname'), - 'lastname' => $this->request->getPost('lname'), - 'phone' => $this->request->getPost('phone'), - 'gender' => $this->request->getPost('gender'), - ); - - $create = $this->model_users->create($data, $this->request->getPost('groups')); - if($create == true) { - $this->session->setFlashdata('success', lang('Main.createdOK')); - return redirect()->to(base_url('users/')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('users/create')); - } - } - else { - // false case - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - $group_data = $this->model_groups->getGroupData(); - $this->data['group_data'] = $group_data; - - $this->render_template('users/create', $this->data); - } - - - } - - public function password_hash($pass = '') - { - if($pass) { - $password = password_hash($pass, PASSWORD_DEFAULT); - return $password; - } - } - - public function edit($id = null) - { - if(!in_array('updateUser', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - if($id) { - if($id==1){ - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('users/')); - } - $this->validation->setRule('groups', 'Group', 'required'); - $this->validation->setRule('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); - $this->validation->setRule('email', 'Email', 'trim|required'); - $this->validation->setRule('fname', 'First name', 'trim|required'); - - - if ($this->validate($this->validation->getRules()) == TRUE) { - // true case - if(empty($this->request->getPost('password')) && empty($this->request->getPost('cpassword'))) { - $data = array( - 'username' => $this->request->getPost('username'), - 'email' => $this->request->getPost('email'), - 'firstname' => $this->request->getPost('fname'), - 'lastname' => $this->request->getPost('lname'), - 'phone' => $this->request->getPost('phone'), - 'gender' => $this->request->getPost('gender'), - ); - - $update = $this->model_users->edit($data, $id, $this->request->getPost('groups')); - if($update == true) { - $this->session->setFlashdata('success', 'Successfully edited'); - return redirect()->to(base_url('users/')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('users/edit/'.$id)); - } - } - else { - $this->validation->setRule('password', 'Password', 'trim|required|min_length[8]'); - $this->validation->setRule('cpassword', 'Confirm password', 'trim|required|matches[password]'); - - if($this->validate($this->validation->getRules()) == TRUE) { - - $password = $this->password_hash($this->request->getPost('password')); - - $data = array( - 'username' => $this->request->getPost('username'), - 'password' => $password, - 'email' => $this->request->getPost('email'), - 'firstname' => $this->request->getPost('fname'), - 'lastname' => $this->request->getPost('lname'), - 'phone' => $this->request->getPost('phone'), - 'gender' => $this->request->getPost('gender'), - ); - - $update = $this->model_users->edit($data, $id, $this->request->getPost('groups')); - if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - return redirect()->to(base_url('users/')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('users/edit/'.$id)); - } - } - else { - // false case - $user_data = $this->model_users->find($id); - $groups = $this->model_users->getUserGroup($id); - - $this->data['user_data'] = $user_data; - $this->data['user_group'] = $groups; - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - - $group_data = $this->model_groups->getGroupData(); - $this->data['group_data'] = $group_data; - - $this->render_template('users/edit', $this->data); - } - - } - } - else { - // false case - $user_data = $this->model_users->find($id); - $groups = $this->model_users->getUserGroup($id); - - $this->data['user_data'] = $user_data; - $this->data['user_group'] = $groups; - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - - $group_data = $this->model_groups->getGroupData(); - $this->data['group_data'] = $group_data; - - $this->render_template('users/edit', $this->data); - } - } - } - - public function delete($id) - { - if(!in_array('deleteUser', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - if($id) { - if($id==1){ - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('users/')); - } - if($this->request->getPost('confirm')) { - $delete = $this->model_users->delete($id); - if($delete == true) { - $this->session->setFlashdata('success', 'Successfully removed'); - return redirect()->to(base_url('users/')); - } - else { - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('users/')); - } - - } - else { - $this->data->id = $id; - $this->render_template('users/delete', $this->data); - } - } - } - - public function profile() - { - if(!in_array('viewProfile', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - $user_id = $this->session->id; - - $user_data = $this->model_users->find($user_id); - $this->data['user_data'] = $user_data; - - $user_group = $this->model_users->getUserGroup($user_id); - $this->data['user_group'] = $user_group; - - $this->render_template('users/profile', $this->data); - } - - public function setting() - { - if(!in_array('updateSetting', $this->permission)) { - return redirect()->to(base_url('dashboard')); - } - - $id = $this->session->id; - - if($id) { - $this->validation->setRule('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); - $this->validation->setRule('email', 'Email', 'trim|required'); - $this->validation->setRule('fname', 'First name', 'trim|required'); - - if ($this->validate($this->validation->getRules()) == TRUE) { - // true case - if(empty($this->request->getPost('password')) && empty($this->request->getPost('cpassword'))) { - $data = array( - 'username' => $this->request->getPost('username'), - 'email' => $this->request->getPost('email'), - 'firstname' => $this->request->getPost('fname'), - 'lastname' => $this->request->getPost('lname'), - 'phone' => $this->request->getPost('phone'), - 'gender' => $this->request->getPost('gender'), - ); - - $update = $this->model_users->edit($data, $id); - if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - } - return redirect()->to(base_url('users/setting/')); - } - else { - $this->validation->reset(); - $this->validation->setRule('password', 'Password', 'trim|required|min_length[8]'); - $this->validation->setRule('cpassword', 'Confirm password', 'trim|required|matches[password]'); - - if($this->validate($this->validation->getRules()) == TRUE) { - - $password = $this->password_hash($this->request->getPost('password')); - - $data = array( - 'username' => $this->request->getPost('username'), - 'password' => $password, - 'email' => $this->request->getPost('email'), - 'firstname' => $this->request->getPost('fname'), - 'lastname' => $this->request->getPost('lname'), - 'phone' => $this->request->getPost('phone'), - 'gender' => $this->request->getPost('gender'), - ); - - $update = $this->model_users->edit($data, $id, $this->request->getPost('groups')); - if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - } - else { - $this->session->setFlashdata('errors', lang('Main.error')); - } - return redirect()->to(base_url('users/setting/')); - } - else { - // false case - $user_data = $this->model_users->find($id); - $groups = $this->model_users->getUserGroup($id); - - $this->data['user_data'] = $user_data; - $this->data['user_group'] = $groups; - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - - $group_data = $this->model_groups->getGroupData(); - $this->data['group_data'] = $group_data; - - $this->render_template('users/setting', $this->data); - } - - } - } - else { - // false case - $user_data = $this->model_users->find($id); - $groups = $this->model_users->getUserGroup($id); - - $this->data['user_data'] = $user_data; - $this->data['user_group'] = $groups; - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; - - $group_data = $this->model_groups->getGroupData(); - $this->data['group_data'] = $group_data; - - $this->render_template('users/setting', $this->data); - } - } - } - - -} \ No newline at end of file diff --git a/app/Database/Migrations/.gitkeep b/app/Database/Migrations/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Database/Seeds/.gitkeep b/app/Database/Seeds/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Filters/.gitkeep b/app/Filters/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Filters/Auth.php b/app/Filters/Auth.php deleted file mode 100644 index 047869c5..00000000 --- a/app/Filters/Auth.php +++ /dev/null @@ -1,20 +0,0 @@ -logged_in) || !$session->logged_in) { - // $session->set('url', $_SERVER['REQUEST_URI']); - return redirect()->to(base_url('auth/login')); - } - } - - public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) { - - } -} \ No newline at end of file diff --git a/app/Helpers/.gitkeep b/app/Helpers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Language/.gitkeep b/app/Language/.gitkeep deleted file mode 100644 index 8b137891..00000000 --- a/app/Language/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/Language/ar/CLI.php b/app/Language/ar/CLI.php deleted file mode 100644 index d6b44f5a..00000000 --- a/app/Language/ar/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'الأمر "{0}" غير موجود.', - 'helpUsage' => 'الاستخدام:', - 'helpDescription' => 'الوصف:', - 'helpOptions' => 'الخيارات:', - 'helpArguments' => 'الوسائط:', - 'invalidColor' => 'اللون {0} غير صالح: {1}.', -]; diff --git a/app/Language/ar/Cache.php b/app/Language/ar/Cache.php deleted file mode 100644 index 18c6d100..00000000 --- a/app/Language/ar/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => 'اعدادات الكاش يجب ان تحتوي على مصفوفة مكونة من $validHandlers.', - 'noBackup' => 'اعدادات الكاش يجب ان تحتوي على handler و backupHandler.', - 'handlerNotFound' => 'اعدادات الكاش تحتوى على handler أو backup handler غير صحيحة.', -]; diff --git a/app/Language/ar/Cast.php b/app/Language/ar/Cast.php deleted file mode 100644 index e5c2d291..00000000 --- a/app/Language/ar/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Unexpected control character found', - 'jsonErrorSyntax' => 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Unknown error', -]; diff --git a/app/Language/ar/Core.php b/app/Language/ar/Core.php deleted file mode 100644 index 890f1550..00000000 --- a/app/Language/ar/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'ملف غير صالح: {0}', - 'copyError' => 'حدث خطأ أثناء محاولة استبدال الملف. يرجى التأكد من أن المجلد قابل للكتابة.', - 'missingExtension' => 'المكتبة {0} لم يتم تحميلها.', - 'noHandlers' => '{0} يجب توفير معالج واحد على الأقل.', -]; diff --git a/app/Language/ar/Database.php b/app/Language/ar/Database.php deleted file mode 100644 index 8b493b29..00000000 --- a/app/Language/ar/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - 'القيمة {0} ليست حدث يمكن استدعاة.', - 'invalidArgument' => 'يجب ارسال قيمة صالحة {0}.', - 'invalidAllowedFields' => 'يجب تحديد الحقول المسموح بها في نموذج البيانات: {0}', - 'emptyDataset' => 'لا يوجد بيانات في {0}.', - 'failGetFieldData' => 'Failed to get field data from database.', - 'failGetIndexData' => 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'This feature is not available for the database you are using.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/ar/Email.php b/app/Language/ar/Email.php deleted file mode 100644 index 550c9cef..00000000 --- a/app/Language/ar/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'يجب ارسال متغير $email الى دالة validateEmail على شكل مصفوفة.', - 'invalidAddress' => 'عنوان بريد الكتروني غير صحيح: {0}', - 'attachmentMissing' => 'لا يمكن ايجاد مرفق البريد الكتروني التالي: {0}', - 'attachmentUnreadable' => 'لا يمكن فتح المرفق: {0}', - 'noFrom' => 'لا يمكن ارسال بريد الكتروني بدون تعليمة "From".', - 'noRecipients' => 'يجب تحديد مرسل لهم من خلال تعليمة: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'غير قادر على إرسال البريد الإلكتروني باستخدام PHP mail(). لم يتم اعداد الخادم لإرسال البريد باستخدام هذه الطريقة.', - 'sendFailureSendmail' => 'غير قادر على إرسال البريد الإلكتروني باستخدام PHP Sendmail. لم يتم اعداد الخادم لإرسال البريد باستخدام هذه الطريقة.', - 'sendFailureSmtp' => 'غير قادر على إرسال البريد الإلكتروني باستخدام PHP SMTP. لم يتم اعداد الخادم لإرسال البريد باستخدام هذه الطريقة.', - 'sent' => 'تم إرسال رسالتك بنجاح باستخدام البروتوكول التالي: {0}', - 'noSocket' => 'غير قادر على فتح اتصال من نوع socket مع Sendmail. الرجاء مراجعة الاعدادات.', - 'noHostname' => 'لم تحدد اسم مضيف SMTP.', - 'SMTPError' => 'حدث خطأ SMTP التالي: {0}', - 'noSMTPAuth' => 'خطأ SMTP: يجب استخدام اسم مستخدم وكلمة مرور.', - 'failedSMTPLogin' => 'فشل في ارسال أمر AUTH LOGIN. الخطأ: {0}', - 'SMTPAuthUsername' => 'فشل في مصادقة اسم المستخدم. الخطأ: {0}', - 'SMTPAuthPassword' => 'فشل في مصادقة اسم كلمة المرور. الخطأ: {0}', - 'SMTPDataFailure' => 'غير قادر على ارسال البيانات: {0}', - 'exitStatus' => 'رمز حالة الخروج: {0}', -]; diff --git a/app/Language/ar/Encryption.php b/app/Language/ar/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/ar/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/ar/Entity.php b/app/Language/ar/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/ar/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/ar/Files.php b/app/Language/ar/Files.php deleted file mode 100644 index c116b6b7..00000000 --- a/app/Language/ar/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'الملف غير موجود: {0}', - 'cannotMove' => 'فشل في نقل الملف من {0} إلى {1} ({2})', -// 'invalidFilename' => 'الملف الهدف غير موجود او غير صحيح: {0}', -// 'cannotCopy' => 'فشل في نص الى المسار {0} - تأكد من أن المجلد قابل للكتابة', -]; diff --git a/app/Language/ar/Filters.php b/app/Language/ar/Filters.php deleted file mode 100644 index 21744eb7..00000000 --- a/app/Language/ar/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - 'الفلتر \'{0}\' يجب أن يكون له إسم مستعار معرف.', - 'incorrectInterface' => '{0} يجب أن يكون معتمد على CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/ar/Format.php b/app/Language/ar/Format.php deleted file mode 100644 index 8df3995b..00000000 --- a/app/Language/ar/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'فشل في معالجة نص json, الخطأ: "{0}".', - 'missingExtension' => 'مكتبة SimpleXML مطلوبة لمعالجة نص XML.', -]; diff --git a/app/Language/ar/HTTP.php b/app/Language/ar/HTTP.php deleted file mode 100644 index 4dd1533b..00000000 --- a/app/Language/ar/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'يجب تفعيل مكتبة CURL حتى تستطيع إستخدام صنف CURLRequest.', - 'invalidSSLKey' => 'لا يمكن استخدام مفتاح SSL. المسار {0} ليس ملف صالح.', - 'sslCertNotFound' => 'شهادة SSL غير موجودة في المسار: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => 'القيمة {0} ليست نوع تفاوض صالح. يجب أن تكون أحد القيم التالية: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'نسخة بروتوكول HTTP غير صحيحة. يجب أن تكون أحد القيم التالية: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'يجب تحديد مصفوفة بجيمع أنواع التفاوض المدعومة لجميع عمليات التفاوض في الاتصال.', - - // RedirectResponse - 'invalidRoute' => 'القيمة {0} ليست مسار توجيه صحيح.', - - // DownloadResponse - 'cannotSetBinary' => 'عند تحديد مسار الملف لا يمكن تعيين ثنائي.', - 'cannotSetFilepath' => 'عند ضبط ثنائي لا يمكن تعيين مسار الملف: {0}', - 'notFoundDownloadSource' => 'لم يتم العثور على تنزيل مصدر النص.', - 'cannotSetCache' => 'لا يدعم التخزين المؤقت للتنزيل.', - 'cannotSetStatusCode' => 'لا يدعم تغيير رمز الحالة للتنزيل. الكود: {0} ، السبب: {1}', - - // Response - 'missingResponseStatus' => 'استجابة HTTP لا تحتوي على كود الحالة', - 'invalidStatusCode' => 'القيمة {0} ليست كود حالة صحيح لبروتوكول HTTP', - 'unknownStatusCode' => 'كود الحالة لبروتوكول HTTP لا يحتوى على رسالة: {0}', - - // URI - 'cannotParseURI' => 'لا يمكن معالجة الرابط: {0}', - 'segmentOutOfRange' => 'أجزاء رابط الطلب خارج النطاق: {0}', - 'invalidPort' => 'المنفذ يجب أن يكون بين 0 و 65535. المعطى: {0}', - 'malformedQueryString' => 'معرفة الأجزاء التى تبدأ بعلامة # غير مسموح بها في الرابط.', - - // Page Not Found - 'pageNotFound' => 'المتحكم غير موجودة', - 'emptyController' => 'لايوجد متحكم محدد.', - 'controllerNotFound' => 'المتحكم او الخاصة غير موجودة: {0}::{1}', - 'methodNotFound' => 'الخاصية غير موجودة: {0}', - - // CSRF - 'disallowedAction' => 'غير مسموح تكرار تنفيذ هذا الطلب.', - - // Uploaded file moving - 'alreadyMoved' => 'الملف المرفوع تم نقلة بالفعل.', - 'invalidFile' => 'الملف الأصل ليس ملفا صالح.', - 'moveFailed' => 'فشل في نقل الملف من {0} إلى {1} ({2})', - - 'uploadErrOk' => 'تم تحميل الملف بنجاح.', - 'uploadErrIniSize' => 'يتجاوز الملف "٪ s" التوجيه الخاص بـ upload_max_filesize.', - 'uploadErrFormSize' => 'يتجاوز الملف "٪ s" حد التحميل المحدد في النموذج.', - 'uploadErrPartial' => 'تم تحميل الملف "٪ s" جزئيًا فقط.', - 'uploadErrNoFile' => 'تم تحميله أي ملف.', - 'uploadErrCantWrite' => 'لا يمكن كتابة الملف "٪ s" على القرص.', - 'uploadErrNoTmpDir' => 'تعذر تحميل الملف: مفقود دليل مؤقت.', - 'uploadErrExtension' => 'تم إيقاف تحميل الملف بواسطة امتداد PHP.', - 'uploadErrUnknown' => 'لم يتم تحميل الملف "٪ s" بسبب خطأ غير معروف.', -]; diff --git a/app/Language/ar/Images.php b/app/Language/ar/Images.php deleted file mode 100644 index da204878..00000000 --- a/app/Language/ar/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'يجب تحديد مصدر الصوصة في الاعدادات.', - 'gdRequired' => 'مكتبة الصور GD مطلوبة لتتمكن من استخدام هذه الميزة.', - 'gdRequiredForProps' => 'مكتبة الصور GD مطلوبة لتتمكن من معرفة خصائص الصورة.', - 'gifNotSupported' => 'الصورة من نوع GIF غير مدعومة بسبب قيود على رخصة الاستخدام. استخدم بدلا من ذلك الصور من نوع JPG أو PNG.', - 'jpgNotSupported' => 'الصورة من نوع JPG غير مدعومة.', - 'pngNotSupported' => 'الصورة من نوع PNG غير مدعومة.', - 'unsupportedImageCreate' => 'مكتبة الصور GD لا تدعن معالجة هذا النوع من الصور.', - 'jpgOrPngRequired' => 'نظام تغيير حجم الصور المحدد يدعم فقط الصور من نوع JPEG أو PNG.', - 'rotateUnsupported' => 'تدوير الصور غير مدعوم في الخاد الخاص بك.', - 'libPathInvalid' => 'مسار مكتبة الصور غير صحيح. الرجاء وضع المسار الصحيح في الاعدادات. {0, string)', - 'imageProcessFailed' => 'فشل في معالجة الصورة. الرجاء التأكد من ان نظام الصور مدعوم ومسار مكتبة الصور صحيح.', - 'rotationAngleRequired' => 'لاعادة تدوير الصورة يجب اعداء زاوية للذك.', - 'invalidPath' => 'مسار الصوره غير صحيح.', - 'copyFailed' => 'فشل في نسخ الصوره.', - 'missingFont' => 'غير قادر على ايجاد الخط.', - 'saveFailed' => 'غير قادر على حفظ الصورة. الرجاء التأكد من أن مسار الصورة او المجلد قابلة للكتابة.', - 'invalidDirection' => 'لقلب إتجاه الصورة يجب أعطاء القيمة `vertical` أو `horizontal`. المعطى: {0}', - 'exifNotSupported' => 'قراءة بيانات من الصورة EXIF غير مدعوم في نسخة PHP الحالية.', -]; diff --git a/app/Language/ar/Language.php b/app/Language/ar/Language.php deleted file mode 100644 index 109564bb..00000000 --- a/app/Language/ar/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'يجب ان تعيد نص او مصفوفة من النصوص.' -]; diff --git a/app/Language/ar/Log.php b/app/Language/ar/Log.php deleted file mode 100644 index f2ce8ed5..00000000 --- a/app/Language/ar/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} ليس مستوى تسجيل اخطاء صحيح.', -]; diff --git a/app/Language/ar/Migrations.php b/app/Language/ar/Migrations.php deleted file mode 100644 index beb46872..00000000 --- a/app/Language/ar/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - 'Migrations table must be set.', - 'disabled' => 'Migrations have been loaded but are disabled or setup incorrectly.', - 'notFound' => 'Migration file not found: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'No Migration files found', - 'gap' => 'There is a gap in the migration sequence near version number: ', - 'classNotFound' => 'The migration class "%s" could not be found.', - 'missingMethod' => 'The migration class is missing an "%s" method.', - - // Migration Command - 'migHelpLatest' => "\t\tMigrates database to latest available migration.", - 'migHelpCurrent' => "\t\tMigrates database to version set as 'current' in configuration.", - 'migHelpVersion' => "\tMigrates database to version {v}.", - 'migHelpRollback' => "\tRuns all migrations 'down' to version 0.", - 'migHelpRefresh' => "\t\tUninstalls and re-runs all migrations to freshen database.", - 'migHelpSeed' => "\tRuns the seeder named [name].", - 'migCreate' => "\tCreates a new migration named [name]", - 'nameMigration' => 'Name the migration file', - 'badCreateName' => 'You must provide a migration file name.', - 'writeError' => 'Error trying to create file.', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => 'Invalid version number provided.', - 'toVersionPH' => 'Migrating to version %s...', - 'toVersion' => 'Migrating to current version...', - 'rollingBack' => 'Rolling back migrations to batch: ', - 'noneFound' => 'No migrations were found.', - 'on' => 'Migrated On: ', - 'migSeeder' => 'Seeder name', - 'migMissingSeeder' => 'You must provide a seeder name.', - 'removed' => 'Rolling back: ', - 'added' => 'Running: ', - - 'version' => 'Version', - 'filename' => 'Filename', -]; diff --git a/app/Language/ar/Number.php b/app/Language/ar/Number.php deleted file mode 100644 index 28c2ef08..00000000 --- a/app/Language/ar/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' الف', - 'million' => ' مليون', - 'billion' => ' مليار', - 'trillion' => ' تريليون', - 'quadrillion' => ' كوادريليون', -]; diff --git a/app/Language/ar/Pager.php b/app/Language/ar/Pager.php deleted file mode 100644 index 13a74c85..00000000 --- a/app/Language/ar/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'التنقل بين الصفحات', - 'first' => 'الأولى', - 'previous' => 'السابق', - 'next' => 'التالي', - 'last' => 'الأخيرة', - 'older' => 'الأقدم', - 'newer' => 'الأجد', - 'invalidTemplate' => '{0} ليس قال صفحات صحيح.', - 'invalidPaginationGroup' => '{0} ليس مجموعة صفحات صحيح.', -]; diff --git a/app/Language/ar/RESTful.php b/app/Language/ar/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/ar/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/ar/Redirect.php b/app/Language/ar/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/ar/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/ar/Router.php b/app/Language/ar/Router.php deleted file mode 100644 index d80712a5..00000000 --- a/app/Language/ar/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'المدخلات لا تطابق النوع المتوقع.', - 'missingDefaultRoute' => 'لا يمكن عرض الصفحة. لم يتم وضع مسار افتراضي للتوجيه له.', -]; diff --git a/app/Language/ar/Session.php b/app/Language/ar/Session.php deleted file mode 100644 index c1e0df65..00000000 --- a/app/Language/ar/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` يجب أن يحتوى على إسم الجدول حتى يعمل النظام بشكل صحيح.', - 'invalidSavePath' => 'نظام الجلسة: المسار المحدد "{0}" ليس مجلد, أو غير موجود ولا يمكن انشاؤه.', - 'writeProtectedSavePath' => 'نظام الجلسة: المسار المحدد "{0}" غير قابل للكتابة.', - 'emptySavePath' => 'نظام الجلسة: لا يوجد مسار للحفظ.', - 'invalidSavePathFormat' => 'نظام الجلسة: مسار خادم Redis غير صحيح: {0}', -]; diff --git a/app/Language/ar/Time.php b/app/Language/ar/Time.php deleted file mode 100644 index 81dcddca..00000000 --- a/app/Language/ar/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'الأشهر يجب ان تكون بين 1 و 12. المعطى: {0}', - 'invalidDay' => 'الأيام يجب ان تكون بين 1 و 31. المعطى: {0}', - 'invalidOverDay' => 'الأيام يجب ان تكون بين 1 و {0}. المعطى: {1}', - 'invalidHours' => 'الساعات يجب ان تكون بين0 و 23. المعطى: {0}', - 'invalidMinutes' => 'الدقائق يجب ان تكون بين 0 و 59. المعطى: {0}', - 'invalidSeconds' => 'الثواني يجب ان تكون بين 0 و 59. المعطى: {0}', - 'years' => '{0, plural, =1{# سنة} other{# سنوات}}', - 'months' => '{0, plural, =1{# شهر} other{# أشهر}}', - 'weeks' => '{0, plural, =1{# أسبوع} other{# أسابيع}}', - 'days' => '{0, plural, =1{# يوم} other{# أيام}}', - 'hours' => '{0, plural, =1{# ساعة} other{# ساعات}}', - 'minutes' => '{0, plural, =1{# دقيقة} other{# دقائق}}', - 'seconds' => '{0, plural, =1{# ثانية} other{# ثواني}}', - 'ago' => 'منذ {0}', - 'inFuture' => 'خلال {0}', - 'yesterday' => 'أمس', - 'tomorrow' => 'غدا', - 'now' => 'الآن', -]; diff --git a/app/Language/ar/Validation.php b/app/Language/ar/Validation.php deleted file mode 100644 index 75cd0714..00000000 --- a/app/Language/ar/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'لم يتم تحديد مجموعة قواعد التحقق في الاعدادات.', - 'ruleNotFound' => '{0} هذه القاعدة غير صالحة.', - 'groupNotFound' => '{0} مجموعة التحقق هذه غير صالحة.', - 'groupNotArray' => '{0} مجموعة التحقق يجب أن تكون مصفوفة.', - 'invalidTemplate' => '{0} ليس قالب تحقق صالح.', - - // Rule Messages - 'alpha' => 'الحقل {field} يمكن أن يحتوى على أحرف.', - 'alpha_dash' => 'الحقل {field} يمكن أن يحتوى على أحرف وأرقام أو شرطة أو شرطة سفلية.', - 'alpha_numeric' => 'الحقل {field} يمكن أن يحتوى على أحرف وأرقام.', - 'alpha_numeric_space' => 'الحقل {field} يمكن أن يحتوى على أحرف وأرقام و فراغات.', - 'alpha_space' => 'الحقل {field} يمكن أن يحتوى على أحرف و فراغات.', - 'decimal' => 'الحقل {field} يجب أن يحتوى على رقم عشري.', - 'differs' => 'الحقل {field} يجب أن يكون مختلف عن الحقل {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'الحقل {field} يجب أن يكون بطول {param} حرف.', - 'greater_than' => 'الحقل {field} يجب أن يحتوى على قيمة أكبر من {param}.', - 'greater_than_equal_to' => 'الحقل {field} يجب أن يحتوى على قيمة أكبر من او يساوي {param}.', - 'in_list' => 'الحقل {field} يجب أن يحتوى على أحد القيم: {param}.', - 'integer' => 'الحقل {field} يجب أن يحتوى على رقم صحيح.', - 'is_natural' => 'الحقل {field} يجب أن يحتوى على عدد.', - 'is_natural_no_zero' => 'الحقل {field} يجب أن يحتوى على عدد أكبر من الصفر.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'الحقل {field} يجب أن يحتوى على قيمة غير موجودة مسبقا.', - 'less_than' => 'الحقل {field} يجب أن يحتوى على رقم أقل من {param}.', - 'less_than_equal_to' => 'الحقل {field} يجب أن يحتوى على رقم أقل أو يساوي {param}.', - 'matches' => 'الحقل {field} لا يساوي الحقل {param}.', - 'max_length' => 'الحقل {field} يجب أن لا يتجاوز أكثر من {param} حرف.', - 'min_length' => 'الحقل {field} يجب أن لا يقل عن {param} حرف.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'الحقل {field} يجب أن يحتوى على أرقام فقط.', - 'regex_match' => 'الحقل {field} يجب أن يحتوى على الصيغة الصحيحة.', - 'required' => 'الحقل {field} إجباري.', - 'required_with' => 'الحقل {field} إجباري عندما تكون {param} موجود.', - 'required_without' => 'الحقل {field} إجباري عندما تكون {param} غير موجود.', - 'timezone' => 'الحقل {field} يجب أن يحتوى منطقة زمنية صحيح.', - 'valid_base64' => 'الحقل {field} يجب أن يحتوى على نص بصيغة base64.', - 'valid_email' => 'الحقل {field} يجب أن يحتوى عنوان بريد إلكتروني صحيح.', - 'valid_emails' => 'الحقل {field} يجب أن يحتوى على عناوين بريد إلكتروني صحيحة.', - 'valid_ip' => 'الحقل {field} يجب أن يحتوى على عنوان أي بي.', - 'valid_url' => 'الحقل {field} يجب أن يحتوى على رابط.', - 'valid_date' => 'الحقل {field} يجب أن يحتوى على تاريخ صحيح.', - - // Credit Cards - 'valid_cc_num' => 'الحقل {field} يجب أن يحتوى على رقم بطاقة الائتمان صحيح.', - - // Files - 'uploaded' => 'الملف {field} ليس ملف مرفوع صحيح.', - 'max_size' => 'حجم الملف {field} كبير جدا.', - 'is_image' => 'الملف {field} ليس ملف صورة.', - 'mime_in' => 'نوع الملف {field} ليس نوع صحيح.', - 'ext_in' => 'امتداد الملف {field} ليس امتداد صحيح.', - 'max_dims' => 'الملف {field} اما انه ليس صورة او صورة ذات ارتفاع او عرض كبير جدا.', -]; diff --git a/app/Language/ar/View.php b/app/Language/ar/View.php deleted file mode 100644 index c7430afb..00000000 --- a/app/Language/ar/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} ليست دالة صحيحة.', - 'missingCellParameters' => '{class}::{method} لا يوجد متغيرات.', - 'invalidCellParameter' => '{0} اسن متغير غير صحيح.', - 'noCellClass' => 'اسم الصنف لعرض جزء الصفحة غري مرسل.', - 'invalidCellClass' => 'لم يتم ايجاد اسم الصنف هذا لعرض جزء الصفحة: {0}.', - 'tagSyntaxError' => 'يوجد خطأ في الصيغة عند معالجة الوسم: {0}', -]; diff --git a/app/Language/cs/CLI.php b/app/Language/cs/CLI.php deleted file mode 100644 index 66861531..00000000 --- a/app/Language/cs/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Příkaz "{0}" nebyl nalezen.', - 'helpUsage' => 'Použití:', - 'helpDescription' => 'Popis:', - 'helpOptions' => 'Možnosti:', - 'helpArguments' => 'Argumenty:', - 'invalidColor' => 'Neplatná {0} barva: {1}.', -]; diff --git a/app/Language/cs/Cache.php b/app/Language/cs/Cache.php deleted file mode 100644 index 63d4f3a7..00000000 --- a/app/Language/cs/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache nelze uložit do {0}', - 'invalidHandlers' => 'Cache config musí mít pole z $validHandlers.', - 'noBackup' => 'Cache config musí mít nastavený handler a backupHandler.', - 'handlerNotFound' => 'Cache config má neplatný specifikovaný handler nebo záložní handler.', -]; diff --git a/app/Language/cs/Cast.php b/app/Language/cs/Cast.php deleted file mode 100644 index 3d06a14f..00000000 --- a/app/Language/cs/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Byla prekročena maximální velikost zásobníku', - 'jsonErrorStateMismatch' => 'Neplatný nebo poškozený JSON', - 'jsonErrorCtrlChar' => 'Nalezen neočekávaný kontrolní znak', - 'jsonErrorSyntax' => 'Chyba syntaxe, poškozený JSON', - 'jsonErrorUtf8' => 'Poškozené UTF-8 znaky, možná nesprávné kódování', - 'jsonErrorUnknown' => 'Neznáma chyba', -]; diff --git a/app/Language/cs/Core.php b/app/Language/cs/Core.php deleted file mode 100644 index 5c9772df..00000000 --- a/app/Language/cs/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Neplatný soubor: {0}', - 'copyError' => 'Vyskytla se chyba při pokusu nahradit soubor ({0}). Prosím ujistěte se, že do složky se soubory lze zapisovat..', - 'missingExtension' => '{0} rozšírení nebylo načteno.', - 'noHandlers' => '{0} musí poskytnout alespoň jeden Handler.', -]; diff --git a/app/Language/cs/Database.php b/app/Language/cs/Database.php deleted file mode 100644 index 147073ca..00000000 --- a/app/Language/cs/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} je neplatné zpětné volání Model Event.', - 'invalidArgument' => 'Musíte zadat platný {0}.', - 'invalidAllowedFields' => 'Povolené pole musía být specifikované pro model: {0}', - 'emptyDataset' => 'Žádná data pro {0}.', - 'failGetFieldData' => 'Selhalo získání údajů pole z databáze.', - 'failGetIndexData' => 'Selhalo získání údajů indexu z databáze.', - 'failGetForeignKeyData' => 'Selhalo získání údajů cizího klíče z databáze.', - 'parseStringFail' => 'Parsování řetěžce klíče selhalo.', - 'featureUnavailable' => 'Tato funkce není v použité databázi dostupná.', - 'tableNotFound' => 'Tabuľka `{0}` nebyla ve vybrané databázi nalezena.', - 'noPrimaryKey' => '`{0}` třída modelu nespecifikuje primární klíč.', - 'noDateFormat' => '`{0}` třída modelu nemá platný formát data.', - 'fieldNotExists' => 'Pole `{0}` nebylo nalezeno.', - 'forEmptyInputGiven' => 'Byl zadán prázdný dotaz pro pole `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Pouze jeden sloupec je povolený v názvu sloupce.', -]; diff --git a/app/Language/cs/Email.php b/app/Language/cs/Email.php deleted file mode 100644 index 83539ed0..00000000 --- a/app/Language/cs/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Metoda validace emailu musí být předána jako pole.', - 'invalidAddress' => 'Neplatná emailová adresa: {0}', - 'attachmentMissing' => 'Nelze nalézt následující emailové přílohy: {0}', - 'attachmentUnreadable' => 'Nepodařilo se otevřít přílohu: {0}', - 'noFrom' => 'Nelze odeslat email bez hlavičky (header) "From".', - 'noRecipients' => 'Musíte přidat adresáta: To, Cc, nebo Bcc', - 'sendFailurePHPMail' => 'Nepodařilo se odeslat email skrze PHP mail(). Váš server zřejmě není nakonfigurován pro odesílání e-mailů touto metodou.', - 'sendFailureSendmail' => 'Nepodařilo se odeslat email skrze PHP Sendmail. Váš server zřejmě není nakonfigurován pro odesílání e-mailů touto metodou.', - 'sendFailureSmtp' => 'Nepodařilo se odeslat email skrze PHP SMTP. Váš server zřejmě není nakonfigurován pro odesílání e-mailů touto metodou.', - 'sent' => 'Vaše zpráva byla úspěšně odeslána použitím protokou: {0}', - 'noSocket' => 'Nepodařilo se otevřít socket pro Sendmail. Zkontrolujte prosím nastavení.', - 'noHostname' => 'Nespecifikovali jste SMTP hostname.', - 'SMTPError' => 'Nastala tato SMTP chyba: {0}', - 'noSMTPAuth' => 'Chyba: Musíte zadat SMTP jméno a heslo.', - 'failedSMTPLogin' => 'Selhalo odeslání příkazu AUTH LOGIN. Chyba: {0}', - 'SMTPAuthUsername' => 'Selhala autentizace přihlašovacího jména. Chyba: {0}', - 'SMTPAuthPassword' => 'Selhala autentizace hesla. Chyba: {0}', - 'SMTPDataFailure' => 'Nelze odeslat data: {0}', - 'exitStatus' => 'Stavový kód Exit: {0}', -]; diff --git a/app/Language/cs/Encryption.php b/app/Language/cs/Encryption.php deleted file mode 100644 index bac71ee4..00000000 --- a/app/Language/cs/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Žádný driver nebyl vyžádán.', - 'noHandlerAvailable' => 'Nelze najít dostupný {0} handler pro šifrování.', - 'unKnownHandler' => '"{0}"nelze kofigurovat.', - 'starterKeyNeeded' => 'Šifrování potřebuje počáteční klíč.', - 'authenticationFailed' => 'Dešifrování: autentizace selhala.', - 'encryptionFailed' => 'Šifrování selhalo.', -]; diff --git a/app/Language/cs/Entity.php b/app/Language/cs/Entity.php deleted file mode 100644 index 3f84397b..00000000 --- a/app/Language/cs/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Pokus o přístup k neexistující vlastnosti {0} z {1}' -]; diff --git a/app/Language/cs/Files.php b/app/Language/cs/Files.php deleted file mode 100644 index 164447cf..00000000 --- a/app/Language/cs/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Soubor nebyl nalezen: {0}', - 'cannotMove' => 'Soubor {0} nebylo možné přesunout do {1} ({2})', -]; diff --git a/app/Language/cs/Filters.php b/app/Language/cs/Filters.php deleted file mode 100644 index d8aa5b0d..00000000 --- a/app/Language/cs/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} filtr musí mít definovaný odpovídající alias.', - 'incorrectInterface' => '{0} musí implementovat CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/cs/Format.php b/app/Language/cs/Format.php deleted file mode 100644 index 178f2034..00000000 --- a/app/Language/cs/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parsování JSON řetězce selhalo, chyba: "{0}".', - 'missingExtension' => 'Rozšíření SimpleXML je nezbytné pro XML formát.', -]; diff --git a/app/Language/cs/HTTP.php b/app/Language/cs/HTTP.php deleted file mode 100644 index b6329633..00000000 --- a/app/Language/cs/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'Pro použití třídy CURLRequest, musí byť povolená funkce CURL.', - 'invalidSSLKey' => 'Není možné nastavit klíč SSL. {0} není platný soubor.', - 'sslCertNotFound' => 'SSL certifikát nebyl nalezen na: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} není platný typ vyjednávání. Musí to být: médium, znaková sada, kódování nebo jazyk.', - - // Message - 'invalidHTTPProtocol' => 'Neplatná verze protokolu HTTP. Musí to být jedno z: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Musíte poskytnout pole podporovaných hodnot pro všechny negotiations.', - - // RedirectResponse - 'invalidRoute' => '{0} trasu není možné najít při zpětném směrování.', - - // DownloadResponse - 'cannotSetBinary' => 'Při nastavování filepath není možné nastavit binary.', - 'cannotSetFilepath' => 'Při nastavování binary není možné nastavit filepath: {0}', - 'notFoundDownloadSource' => 'Nebyl nalezen zdroj těla (body) ke stažení.', - 'cannotSetCache' => 'Nepodporuje ukladání do vyrovnávací paměti pro stahování.', - 'cannotSetStatusCode' => 'Nepodporuje stavový kód change pro stažení. kód: {0}, důvod: {1}', - - // Response - 'missingResponseStatus' => 'V odpovědi HTTP chybí stavový kód', - 'invalidStatusCode' => '{0} není platný návratový stavový kód HTTP', - 'unknownStatusCode' => 'Neznámý stavový kód HTTP poskytnutý bez zprávy: {0}', - - // URI - 'cannotParseURI' => 'Není možné analyzovat URI: {0}', - 'segmentOutOfRange' => 'Segment URI žádosti je mimo rozsah: {0}', - 'invalidPort' => 'Porty musí být mezi 0 a 65535. Zadáno: {0}', - 'malformedQueryString' => 'Řetězce dotazů nemusí obsahovat fragmenty URI.', - - // Page Not Found - 'pageNotFound' => 'Stránka nebyla nalezena', - 'emptyController' => 'Není zadán žádný Controller.', - 'controllerNotFound' => 'Controller nebo jeho metoda nebyla nalezena: {0}::{1}', - 'methodNotFound' => 'Metoda Controlleru nebyla nalezena: {0}', - - // CSRF - 'disallowedAction' => 'Požadovaná akce není povolena.', - - // Uploaded file moving - 'alreadyMoved' => 'Nahraný soubor už byl presunutý.', - 'invalidFile' => 'Pôvodný soubor není platný.', - 'moveFailed' => 'Nepodařilo se přesunout soubor z {0} do {1} ({2})', - - 'uploadErrOk' => 'soubor byl úspěšně nahrán.', - 'uploadErrIniSize' => 'soubor "%s" překračuje vaše nastavení upload_max_filesize.', - 'uploadErrFormSize' => 'soubor "%s" překračuje limit pro upload nastavený ve vašem formuláři.', - 'uploadErrPartial' => 'soubor "%s" byl nahrán pouze částečně.', - 'uploadErrNoFile' => 'Nebyl nahrán žádný soubor.', - 'uploadErrCantWrite' => 'soubor "%s" se nepodařilo zapsat na disk.', - 'uploadErrNoTmpDir' => 'soubor se nepodařilo nahrát: chybí dočasný adresář.', - 'uploadErrExtension' => 'Nahrávání souborů bylo zastaveno rozšířením PHP.', - 'uploadErrUnknown' => 'soubor "%s" nebyl nahrán z důvodu neznámé chyby.', -]; diff --git a/app/Language/cs/Images.php b/app/Language/cs/Images.php deleted file mode 100644 index 70f70735..00000000 --- a/app/Language/cs/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Musíte uvést zdrojový obrázek v nastavení.', - 'gdRequired' => 'Na použití této funkce je potřeba obrázková knihovna GD.', - 'gdRequiredForProps' => 'Server musí podporovat obrázkovou knihovnu GD, aby určil vlastnosti obrázků.', - 'gifNotSupported' => 'Obrázky GIF nejsou často podporovány kvůli licenčním omezením. Možno budete muset místo toho použít obrázky JPG nebo PNG.', - 'jpgNotSupported' => 'Obrázky JPG nejsou podporovány.', - 'pngNotSupported' => 'Obrázky PNG nejsou podporovány.', - 'unsupportedImageCreate' => 'Váš server nepodporuje funkci GD potřebnou pro zpracování tohoto typu obrázku.', - 'jpgOrPngRequired' => 'Protokol pro změnu velikost obrázku specifikovaný ve vašem nastavení funguje pouze pro typy obrázků JPEG nebo PNG.', - 'rotateUnsupported' => 'Zdá se, že váš server nepodporuje otáčení obrázků.', - 'libPathInvalid' => 'Cesta k vaší knihovně obrázků není správná. Nastavte správnou cestu v nastavení obrázků. {0, string)', - 'imageProcessFailed' => 'Zpracování obrázku selhalo. Zkontrolujte, zda váš server podporuje zvolený protokol a zda je cesta k vaší knihovně obrázkov správna.', - 'rotationAngleRequired' => 'Na otočení obrázku je potřeba úhel rotace.', - 'invalidPath' => 'Cesta k obrázku není správná.', - 'copyFailed' => 'Rutina kopírování obrázků selhala.', - 'missingFont' => 'není možné nalézt písmo pro použití.', - 'saveFailed' => 'Obrázek se nepodařilo uložit. Ujistěte se, že adresář obrázků a souborů je zapisovatelný.', - 'invalidDirection' => 'Směr překlopení může být pouze "vertikální" nebo "horizontální". Zadáno: {0}', - 'exifNotSupported' => 'Tato instalace PHP nepodporuje čtení EXIF dat.', -]; diff --git a/app/Language/cs/Language.php b/app/Language/cs/Language.php deleted file mode 100644 index 6e9eca48..00000000 --- a/app/Language/cs/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line musí být řetězec nebo pole řetězců.', -]; diff --git a/app/Language/cs/Log.php b/app/Language/cs/Log.php deleted file mode 100644 index f9c9f917..00000000 --- a/app/Language/cs/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} je neplatná úroveň logu.', -]; diff --git a/app/Language/cs/Migrations.php b/app/Language/cs/Migrations.php deleted file mode 100644 index ce63dd47..00000000 --- a/app/Language/cs/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Musí byť nastavená tabulka migrací.', - 'invalidType' => 'Bol zadán neplatný typ číslování migrace: {0}', - 'disabled' => 'Migrace byly načteny, ale jsou deaktivované nebo špatně nastavené.', - 'notFound' => 'Migrační soubor nebyl nalezen: ', - 'batchNotFound' => 'Cílová dávka nebyla nalezena: ', - 'empty' => 'Nenalezeny žádné migrační soubory', - 'gap' => 'V migrační sekvenci u čísle verze je mezera: ', - 'classNotFound' => 'Migrační třídu "%s" se nepodařilo najít.', - 'missingMethod' => 'V migrační třídě chybí metoda "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigruje databázi na nejnovější dostupnou migraci.", - 'migHelpCurrent' => "\t\tMigruje databázi na verzi nastavenou v konfiguraci jako aktuální.", - 'migHelpVersion' => "\tMigruje databázi na verzi {v}.", - 'migHelpRollback' => "\tSpustí všechny migrace vrácením na verzi 0.", - 'migHelpRefresh' => "\t\tOdinstaluje a znovu spustí všechny migrace do nové databáze.", - 'migHelpSeed' => "\tSpustí seeder se jménem [ name ].", - 'migCreate' => "\tVytvoří novou migraci s názvem [ name ]", - 'nameMigration' => 'Pojmenujte migrační soubor', - 'badCreateName' => 'Musíte zadať název migračního souboru.', - 'writeError' => 'Chyba při vytváření souboru.', - 'migNumberError' => 'migrační číslo musí být tři číslice a v sekvenci nesmí být mezery.', - - 'toLatest' => 'Probíhá migrace na nejnovější verzi...', - 'latest' => 'Spouštění všech nových migrací...', - 'generalFault' => 'Migrace selhala!', - 'migInvalidVersion' => 'Zadáno neplatné číslo verze.', - 'toVersionPH' => 'Probíhá migrace na verzi %s ...', - 'toVersion' => 'Probíhá migrace na aktuální verzi ...', - 'rollingBack' => 'Vracejí se zpět všechny migrace ...', - 'noneFound' => 'Nenašly se žádné migrace.', - 'on' => 'Zmigrováno na: ', - 'migSeeder' => 'Jméno seederu', - 'migMissingSeeder' => 'Musíte zadat jméno seederu.', - 'removed' => 'Vracím: ', - 'added' => 'Běží: ', - - 'version' => 'Verze', - 'filename' => 'Název souboru', -]; diff --git a/app/Language/cs/Number.php b/app/Language/cs/Number.php deleted file mode 100644 index 801ba58a..00000000 --- a/app/Language/cs/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bajtů', - - // don't forget the space in front of these! - 'thousand' => ' tisíc', - 'million' => ' milion', - 'billion' => ' miliarda', - 'trillion' => ' trilion', - 'quadrillion' => ' kvadrilion', -]; diff --git a/app/Language/cs/Pager.php b/app/Language/cs/Pager.php deleted file mode 100644 index 18150b08..00000000 --- a/app/Language/cs/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Navigace stránky', - 'first' => 'První', - 'previous' => 'Předchozí', - 'next' => 'Další', - 'last' => 'Poslední', - 'older' => 'Starší', - 'newer' => 'Novější', - 'invalidTemplate' => '{0} je neplatná šablona pro Pager.', - 'invalidPaginationGroup' => '{0} je neplatná skupina pro stránkování (Pagination).', -]; diff --git a/app/Language/cs/RESTful.php b/app/Language/cs/RESTful.php deleted file mode 100644 index 17833945..00000000 --- a/app/Language/cs/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" akce nebyla implementována.', -]; diff --git a/app/Language/cs/Redirect.php b/app/Language/cs/Redirect.php deleted file mode 100644 index 0cf4a79b..00000000 --- a/app/Language/cs/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Nepodařilo se přesměrovat na "{0}". Kód chyby "{1}"', -]; diff --git a/app/Language/cs/Router.php b/app/Language/cs/Router.php deleted file mode 100644 index 264d97c2..00000000 --- a/app/Language/cs/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parameter se neshoduje s očekávaným typem.', - 'missingDefaultRoute' => 'Není možné určit co má být zobrazeno. Zvolená cesta nebyla specifikována v routing souboru.', -]; diff --git a/app/Language/cs/Session.php b/app/Language/cs/Session.php deleted file mode 100644 index 8813d2df..00000000 --- a/app/Language/cs/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` musí mít tabulku aby pracoval Database Session Handler.', - 'invalidSavePath' => 'Session: Nastavená cesta uložení "{0}" není složka, neexistuje, nebo nemůže být vytvořena.', - 'writeProtectedSavePath' => 'Session: Nastavená cesta uložení "{0}" není zapisovatelná skrze PHP proces.', - 'emptySavePath' => 'Session: není nastavená cesta pro uložení.', - 'invalidSavePathFormat' => 'Session: Neplatný formát Redis cesty: {0}', -]; diff --git a/app/Language/cs/Time.php b/app/Language/cs/Time.php deleted file mode 100644 index f905a8c2..00000000 --- a/app/Language/cs/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Měsíce musí být v rozmezí od 1 do 12. Zadáno: {0}', - 'invalidDay' => 'Dny musí být v rozmezí od 1 do 31. Zadáno: {0}', - 'invalidOverDay' => 'Dny musí být v rozmezí od 1 do {0}. Zadáno: {1}', - 'invalidHours' => 'Hodiny musí být v rozmezí od 0 do 23. Zadáno: {0}', - 'invalidMinutes' => 'Minuty mudia byť v rozmedzí od 0 do 59. Zadáno: {0}', - 'invalidSeconds' => 'Vteřiny musí být v rozmezí od 0 do 59. Zadáno: {0}', - 'years' => '{0, plural, =1{# rok} other{# roky}}', - 'months' => '{0, plural, =1{# měsíc} other{# měsíce}}', - 'weeks' => '{0, plural, =1{# tyden} other{# týdny}}', - 'days' => '{0, plural, =1{# den} other{# dny}}', - 'hours' => '{0, plural, =1{# hodina} other{# hodiny}}', - 'minutes' => '{0, plural, =1{# minuta} other{# minuty}}', - 'seconds' => '{0, plural, =1{# sekunda} other{# vteřiny}}', - 'ago' => '{0} před', - 'inFuture' => 'za {0}', - 'yesterday' => 'Včera', - 'tomorrow' => 'Zítra', - 'now' => 'Právě teď', -]; diff --git a/app/Language/cs/Validation.php b/app/Language/cs/Validation.php deleted file mode 100644 index 4b83fd64..00000000 --- a/app/Language/cs/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'V konfiguraci ověření nebyly zadány žádné sady pravidel.', - 'ruleNotFound' => '{0} je neplatné pravidlo.', - 'groupNotFound' => '{0} není skupina ověřovacích pravidel.', - 'groupNotArray' => '{0} skupina pravidel musí být pole.', - 'invalidTemplate' => '{0} je neplatná šablona validace.', - - // Rule Messages - 'alpha' => 'Pole {field} může obsahovat pouze abecední znaky.', - 'alpha_dash' => 'Pole {field} může obsahovat pouze alfanumerické znaky, podtržítka a pomlčky.', - 'alpha_numeric' => 'Pole {field} může obsahovat pouze alfanumerické znaky.', - 'alpha_numeric_space' => 'Pole {field} může obsahovat pouze alfanumerické znaky a mezery.', - 'alpha_space' => 'Pole {field} může obsahovat pouze abecední znaky a mezery.', - 'decimal' => 'Pole {field} musí obsahovat číslo (0-9).', - 'differs' => 'Pole {field} musí být rozdílné než pole {param}.', - 'equals' => 'Pole {field} musí být přesně: {param}.', - 'exact_length' => 'Pole {field} musí být přesně {param} znaků dlouhé.', - 'greater_than' => 'Pole {field} musí obsahovat číslo větší než {param}.', - 'greater_than_equal_to' => 'Pole {field} musí obsahovat číslo větší nebo rovno než {param}.', - 'in_list' => 'Pole {field} musí být jedno z: {param}.', - 'integer' => 'Pole {field} musí obsahovat celé číslo.', - 'is_natural' => 'Pole {field} musí obsahovat pouze číslice.', - 'is_natural_no_zero' => 'Pole {field} musí obsahovat pouze číslice a musí být větší než nula.', - 'is_not_unique' => 'Pole {field} musí obsahovat dříve existující hodnotu v databázi.', - 'is_unique' => 'Pole {field} musí obsahovat unikátní hodnotu.', - 'less_than' => 'Pole {field} musí obsahovat číslo menší než {param}.', - 'less_than_equal_to' => 'Pole {field} musí obsahovat číslo menší nebo rovno než {param}.', - 'matches' => 'Pole {field} sa neshoduje s polem {param}.', - 'max_length' => 'Pole {field} nemůže překročit počet znaků: {param}.', - 'min_length' => 'Pole {field} musí být delší než {param} znaky/ů.', - 'not_equals' => 'Pole {field} nemůže být: {param}.', - 'numeric' => 'Pole {field} musí obsahovat pouze čísla.', - 'regex_match' => 'Pole {field} má nesprávný formát.', - 'required' => 'Pole {field} je povinné.', - 'required_with' => 'Pole {field} je povinné pokud {param} je zadán.', - 'required_without' => 'Pole {field} je povinné pokud {param} není zadán.', - 'timezone' => 'Pole {field} musí být platná časová zóna.', - 'valid_base64' => 'Pole {field} musí být platný base64 řetězec.', - 'valid_email' => 'Pole {field} musí obsahovat platnou emailovú adresu.', - 'valid_emails' => 'Pole {field} musí obsahovat pouze platné emailové adresy.', - 'valid_ip' => 'Pole {field} musí obsahovat platnou IP adresu.', - 'valid_url' => 'Pole {field} musí obsahovat platnou URL adresu.', - 'valid_date' => 'Pole {field} musí obsahovat platné datum.', - - // Credit Cards - 'valid_cc_num' => '{field} sa nezdá být platné číslo kreditní/debetní karty.', - - // Files - 'uploaded' => '{field} je neplatný nahraný soubor.', - 'max_size' => '{field} je příliš velký soubor.', - 'is_image' => '{field} je neplatný nahraný obrázek.', - 'mime_in' => '{field} nemá platný mime typ.', - 'ext_in' => '{field} je neplatný typ souboru.', - 'max_dims' => '{field} není obrázek, nebo je příliš široký nebo vysoký.', -]; diff --git a/app/Language/cs/View.php b/app/Language/cs/View.php deleted file mode 100644 index 0c9ca9c4..00000000 --- a/app/Language/cs/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} není platná metoda.', - 'missingCellParameters' => '{class}::{method} nemá žádné parametry.', - 'invalidCellParameter' => '{0} není platný název parametru.', - 'noCellClass' => 'Žádná třída zobrazení.', - 'invalidCellClass' => 'Nebylo možné najít třídu zobrazení: {0}.', - 'tagSyntaxError' => 'Chyba syntaxe ve vašich Parser značkách: {0}', -]; diff --git a/app/Language/de/CLI.php b/app/Language/de/CLI.php deleted file mode 100644 index 5812b67a..00000000 --- a/app/Language/de/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Befehl "{0}" nicht gefunden.', - 'helpUsage' => 'Verwendung:', - 'helpDescription' => 'Beschreibung:', - 'helpOptions' => 'Optionen:', - 'helpArguments' => 'Argumente:', - 'invalidColor' => 'Ungültige {0} Farbe: {1}.', -]; diff --git a/app/Language/de/Cache.php b/app/Language/de/Cache.php deleted file mode 100644 index 11c7ff47..00000000 --- a/app/Language/de/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache kann nicht nach {0} geschrieben werden', - 'invalidHandlers' => '$validHandlers muss ein Array zur Cache-Konfiguration enthalten.', - 'noBackup' => 'Die Cache-Konfiguration muss über einen Handler und einen Backup-Handler verfügen.', - 'handlerNotFound' => 'In der Cache-Konfiguration ist ein ungültiger Handler oder Backup-Handler angegeben.', -]; diff --git a/app/Language/de/Cast.php b/app/Language/de/Cast.php deleted file mode 100644 index 4eb54419..00000000 --- a/app/Language/de/Cast.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Die maximale Stacktiefe wurde überschritten', - 'jsonErrorStateMismatch' => 'Unterlauf oder State-Mismatch', - 'jsonErrorCtrlChar' => 'Steuerzeichenfehler, möglicherweise falsch kodiert', - 'jsonErrorSyntax' => 'Syntaxfehler, fehlerhaftes JSON', - 'jsonErrorUtf8' => 'Ungültiges UTF-8 Zeichen, möglicherweise falsch kodiert', - 'jsonErrorUnknown' => 'Unbekannter Fehler', -]; diff --git a/app/Language/de/Core.php b/app/Language/de/Core.php deleted file mode 100644 index 1c817c60..00000000 --- a/app/Language/de/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Ungültige Datei: {0}', - 'copyError' => 'Beim Versuch, die Datei zu ersetzen, ist ein Fehler aufgetreten. Bitte sicherstellen, dass das Verzeichnis beschreibbar ist.', - 'missingExtension' => 'Erweiterung {0} konte nicht geladen werden.', - 'noHandlers' => '{0} muss mindestes einen Handler bereitstellen.', -]; diff --git a/app/Language/de/Database.php b/app/Language/de/Database.php deleted file mode 100644 index 721c6ae7..00000000 --- a/app/Language/de/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} ist kein gültiger Model Event Callback.', - 'invalidArgument' => 'Ungültiges Argument: {0}.', - 'invalidAllowedFields' => 'Es sind keine zulässigen Felder angegeben für das Model: {0}', - 'emptyDataset' => 'Keine Daten gefunden für: {0}.', - 'failGetFieldData' => 'Es konnten keine Felddaten aus der Datenbank abgerufen werden.', - 'failGetIndexData' => 'Es konnten keine Indexdaten aus der Datenbank abgerufen werden.', - 'failGetForeignKeyData' => 'Die Fremdschlüssel konnten nicht aus der Datenbank abgerufen werden.', - 'parseStringFail' => 'Parsen des Key-Strings fehlgeschlagen.', - 'featureUnavailable' => 'Diese Funktion ist in der verwendeten Datenbank nicht verfügbar.', - 'tableNotFound' => 'Die Tabelle `{0}` konnte in der aktuellen Datenbank nicht gefunden werden.', - 'noPrimaryKey' => 'Kein Primärschlüssel gesetzt für: `{0}`', - 'noDateFormat' => 'Ungültiges Datumformat für: `{0}`', - 'fieldNotExists' => 'Feld `{0}` nicht gefunden.', - 'forEmptyInputGiven' => 'Leere Anweisung für Feld `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Es darf nur ein einzelner Feldname definiert werden, Komma ist im Feldnamen nicht erlaubt', -]; diff --git a/app/Language/de/Email.php b/app/Language/de/Email.php deleted file mode 100644 index df594dc8..00000000 --- a/app/Language/de/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Die E-Mail-Validierungsmethode muss in einem Array übergeben werden.', - 'invalidAddress' => 'Ungültige E-Mailadresse: {0}', - 'attachmentMissing' => 'Der folgende E-Mail-Anhang konnte nicht gefunden werden: {0}', - 'attachmentUnreadable' => 'Fehler beim Öffnen des Attachments: {0}', - 'noFrom' => 'E-Mails ohne "From"-Header können nicht gesendet werden.', - 'noRecipients' => 'Kein Empfänger gesetzt. Wert für To, Cc oder Bcc erforderlich', - 'sendFailurePHPMail' => 'E-Mailversand mit PHP mail() fehlgeschlagen. Möglicherweise ist der Server nicht so konfiguriert, dass er E-Mails mit dieser Methode sendet.', - 'sendFailureSendmail' => 'E-Mailversand mit Sendmail fehlgeschlagen. Möglicherweise ist der Server nicht so konfiguriert, dass er E-Mails mit dieser Methode sendet.', - 'sendFailureSmtp' => 'E-Mailversand mit PHP SMTP fehlgeschlagen. Möglicherweise ist der Server nicht so konfiguriert, dass er E-Mails mit dieser Methode sendet.', - 'sent' => 'Die Nachricht wurde erfolgreich mit folgendem Protokoll gesendet: {0}', - 'noSocket' => 'Der socket für Sendmail konnte nicht geöffnet werden. Bitte Einstellungen prüfen.', - 'noHostname' => 'SMTP-Hostname ist nicht definiert', - 'SMTPError' => 'Folgender SMTP-Fehler ist aufgetreten: {0}', - 'noSMTPAuth' => 'Fehler: Es muss ein SMTP Benutzername und Passwort zugeordnet werden.', - 'failedSMTPLogin' => 'Das AUTH LOGIN konnte nicht gesendet werden. Fehler: {0}', - 'SMTPAuthUsername' => 'Der Benutzername konnte nicht authentifiziert werden. Fehler: {0}', - 'SMTPAuthPassword' => 'Das Passwort konnte nicht authentifiziert werden. Fehler: {0}', - 'SMTPDataFailure' => 'Daten können nicht gesendet werden: {0}', - 'exitStatus' => 'Exit Status Code: {0}', -]; diff --git a/app/Language/de/Encryption.php b/app/Language/de/Encryption.php deleted file mode 100644 index 62fbddc3..00000000 --- a/app/Language/de/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Kein Treiber angefordert.', - 'noHandlerAvailable' => 'Es konnte kein verfügbarer {0} Verschlüsselungs-Handler gefunden werden.', - 'unKnownHandler' => '"{0}" kann nicht konfiguriert werden.', - 'starterKeyNeeded' => 'Encrypter benötigt einen Startschlüssel.', - 'authenticationFailed' => 'Entschlüsselung: Die Authentifizierung ist fehlgeschlagen.', - 'encryptionFailed' => 'Verschlüsselung fehlgeschlagen.', -]; diff --git a/app/Language/de/Entity.php b/app/Language/de/Entity.php deleted file mode 100644 index e8b02c41..00000000 --- a/app/Language/de/Entity.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Es wird versucht auf die nicht vorhandene Eigenschaft {0} von {1} zuzugreifen', -]; diff --git a/app/Language/de/Files.php b/app/Language/de/Files.php deleted file mode 100644 index e5e72214..00000000 --- a/app/Language/de/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Datei nicht gefunden: {0}', - 'cannotMove' => 'Datei konnte nicht von {0} nach {1} verschoben werden ({2})', -]; diff --git a/app/Language/de/Filters.php b/app/Language/de/Filters.php deleted file mode 100644 index 416fe14e..00000000 --- a/app/Language/de/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Für Filter {0} muss ein passender Alias definiert sein.', - 'incorrectInterface' => '{0} muss CodeIgniter\Filters\FilterInterface implementieren.', -]; diff --git a/app/Language/de/Format.php b/app/Language/de/Format.php deleted file mode 100644 index 3baf1f8d..00000000 --- a/app/Language/de/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'JSON-String konnte nicht geparst werden. Fehler: "{0}".', - 'missingExtension' => 'Die SimpleXML Extension wird zum Formatieren von XML benötigt.', -]; diff --git a/app/Language/de/HTTP.php b/app/Language/de/HTTP.php deleted file mode 100644 index 4faaa810..00000000 --- a/app/Language/de/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURL must be enabled to use the CURLRequest class.', - 'invalidSSLKey' => 'Kann SSL Key micht setzen. {0} ist kein gültiger Dateiname.', - 'sslCertNotFound' => 'SSL-Zertifikat nicht gefunden unter:: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} ist kein gültiger Inhaltstyp. Gültige Typen: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Ungültige HTTP Protokoll-Version. Gültige Versionen: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Es müssen gültige Inhaltstypen angegeben werden.', - - // RedirectResponse - 'invalidRoute' => '{0} ist eine üngültige Route.', - - // DownloadResponse - 'cannotSetBinary' => 'Fehler beim Download. Filepath kann nicht auf Binär gesetzt werden.', - 'cannotSetFilepath' => 'Fehler beim Binär-Download. Kann filepath nicht setzen: {0}', - 'notFoundDownloadSource' => 'Fehler beim Herunterladen der Datei.', - 'cannotSetCache' => 'Fehler beim Setzen des Download-Caches.', - 'cannotSetStatusCode' => 'Fehler beim Download. Status-Code konnte nicht gesetzt werden. Code: {0}, Grund: {1}', - - // Response - 'missingResponseStatus' => 'HTTP Response enthält keinen Statuscode', - 'invalidStatusCode' => '{0} ist ein ungültiger HTTP-Statuscode', - 'unknownStatusCode' => 'Unbekannter HTTP-Statuscode ohne Meldung: {0}', - - // URI - 'cannotParseURI' => 'URI kann nicht geparst werden: {0}', - 'segmentOutOfRange' => 'Das URI-Segment im Request ist ausserhalb des gültigen Bereichs: {0}', - 'invalidPort' => 'Die Ports müssen zwischen 0 und 65535 liegen. Gegeben: {0}', - 'malformedQueryString' => 'Query-Strings dürfen keine URI-Fragmente enthalten.', - - // Page Not Found - 'pageNotFound' => 'Seite nicht gefunden', - 'emptyController' => 'Kein Controller angegeben.', - 'controllerNotFound' => 'Der Controller oder seine Methode wurde nicht gefunden: {0}::{1}', - 'methodNotFound' => 'Die Controllermethode wurde nicht gefunden: {0}', - - // CSRF - 'disallowedAction' => 'Die angeforderte Aktion ist nicht erlaubt.', - - // Uploaded file moving - 'alreadyMoved' => 'Die hochgeladene Datei wurde bereits verschoben.', - 'invalidFile' => 'Die Originaldatei ist keine gültige Datei.', - 'moveFailed' => 'Die Datei konnte nicht von {0} nach {1} verschoben werden ({2})', - - 'uploadErrOk' => 'Die Datei wurde erfolgreich hochgeladen.', - 'uploadErrIniSize' => 'Die Datei "%s" überschreitet die upload_max_filesize ini Direktive.', - 'uploadErrFormSize' => 'Die Datei "%s" ist grösser als die im Formular definierte Limite', - 'uploadErrPartial' => 'Die Datei "%s" wurde nur teilweise hochgeladen.', - 'uploadErrNoFile' => 'Es wurde keine Datei hochgeladen', - 'uploadErrCantWrite' => 'Die Datei "%s" konnte nicht gespeichert werden.', - 'uploadErrNoTmpDir' => 'Fehler beim Hochladen: Temporäres Verzeichnis fehlt.', - 'uploadErrExtension' => 'Der Datei-Upload wurde von einer PHP-extension gestoppt.', - 'uploadErrUnknown' => 'Die Datei "%s" konnte wegen eines unbekannten Fehlers nicht hochgeladen werden.', -]; diff --git a/app/Language/de/Images.php b/app/Language/de/Images.php deleted file mode 100644 index 47649be9..00000000 --- a/app/Language/de/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'Es muss in den Einstellungen ein Quellbild angegeben werden', - 'gdRequired' => 'Für die Nutzung dieser Funktion ist die GD-Bildbibliothek erforderlich.', - 'gdRequiredForProps' => 'Der Server muss die GD-Bildbibliothek unterstützen, um die Bildeigenschaften zu bestimmen.', - 'gifNotSupported' => 'GIF-Bilder werden aufgrund von Lizenzbeschränkungen oft nicht unterstützt. Möglicherweise müssen stattdessen JPG- oder PNG-Bilder verwendet werden.', - 'jpgNotSupported' => 'JPG-Bilder werden nicht unterstützt.', - 'pngNotSupported' => 'PNG-Bilder werden nicht unterstützt.', - 'fileNotSupported' => 'Die Datei enthält ein nicht unterstütztes Bildformat.', - 'unsupportedImageCreate' => 'Der Server unterstützt die GD-Funktion, welche für die Verarbeitung dieser Art von Bildern erforderlich ist, nicht.', - 'jpgOrPngRequired' => 'Das in den Einstellungen angegebene Protokoll zur Änderung der Bildgröße funktioniert nur mit den Bildtypen JPEG oder PNG.', - 'rotateUnsupported' => 'Die Bildrotation scheint vom Server nicht unterstützt zu werden.', - 'libPathInvalid' => 'Der Pfad zu Ihrer Bildbibliothek ist nicht korrekt. Bitte in den Bildeinstellungen den richtigen Pfad einstellen. {0, string)', - 'imageProcessFailed' => 'Die Bildverarbeitung ist fehlgeschlagen. Bitte überprüfen, ob der Server das gewählte Protokoll unterstützt und ob der Pfad zur Bildbibliothek korrekt ist.', - 'rotationAngleRequired' => 'Für die Drehung des Bildes ist ein Drehwinkel erforderlich.', - 'invalidPath' => 'Der Pfad zum Bild ist nicht korrekt.', - 'copyFailed' => 'Die Image-Kopierroutine ist fehlgeschlagen.', - 'missingFont' => 'Es ist nicht möglich, eine zu verwendende Schriftart zu finden.', - 'saveFailed' => 'Das Bild kann nicht gespeichert werden. Bitte sicherstellen, dass das Bild- und Dateiverzeichnis beschreibbar ist.', - 'invalidDirection' => 'Die Umkehrrichtung kann nur `vertical` oder `horizontal` sein. Gegeben: {0}', - 'exifNotSupported' => 'Das Lesen von EXIF-Daten wird von dieser PHP-Installation nicht unterstützt.', -]; diff --git a/app/Language/de/Language.php b/app/Language/de/Language.php deleted file mode 100644 index d4ca62f2..00000000 --- a/app/Language/de/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line muss ein String oder ein Array mit Strings sein.', -]; diff --git a/app/Language/de/Log.php b/app/Language/de/Log.php deleted file mode 100644 index 080fbce5..00000000 --- a/app/Language/de/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} ist ein ungültiges Log-Level.', -]; diff --git a/app/Language/de/Migrations.php b/app/Language/de/Migrations.php deleted file mode 100644 index 6cefdea6..00000000 --- a/app/Language/de/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Migrations Tabelle muss gesetzt sein.', - 'disabled' => 'Migrationen wurden geladen, sind aber deaktiviert oder falsch eingerichtet.', - 'batchNotFound' => 'Ziel-Batchnummer nicht gefunden: ', - 'notFound' => 'Migrationsdatei nicht gefunden: ', - 'empty' => 'Keine Migrationsdateien gefunden', - 'gap' => 'Es gibt eine Lücke in der Migrationsfolge in der Nähe der Versionsnummer: ', - 'classNotFound' => 'Die Migrationsklasse "%s" konnte nicht gefunden werden.', - 'missingMethod' => 'Der Migrationsklasse fehlt eine "%s"-Methode.', - - // Migration Command - 'migHelpLatest' => "\t\tMigriert die Datenbank auf die neueste verfügbare Migration.", - 'migHelpCurrent' => "\t\tMigriert die Datenbank auf die Version, die in der Konfiguration als 'aktuell' eingestellt ist.", - 'migHelpVersion' => "\tMigriert die Datenbank auf die Version {v}.", - 'migHelpRollback' => "\tFührt alle Migrationen 'nach unten' zur Version 0 durch.", - 'migHelpRefresh' => "\t\tDeinstalliert und führt alle Migrationen erneut durch, um die Datenbank zu aktualisieren.", - 'migHelpSeed' => "\tSpeichert Beispieldaten mit dem Namen [name].", - 'migCreate' => "\tErstellt eine neue Migration mit dem Namen [name]", - 'nameMigration' => 'Benennen der Migrationsdatei', - 'badCreateName' => 'Es muss ein gültiger Migrations-Dateiname angegeben werden.', - 'writeError' => 'Fehler beim Erstellen der Datei.', - 'migNumberError' => 'Die Migrationsnummer muss dreistellig sein, und es dürfen keine Lücken in der Sequenz sein.', - 'rollBackConfirm' => 'Soll der Datenbank-Rollback ausgeführt werden?', - 'refreshConfirm' => 'Soll die Datenbank wirklich aktualisiert werden?', - - 'latest' => 'Neue Migrationen ausführen...', - 'generalFault' => 'Migration fehlgeschlagen!', - 'migInvalidVersion' => 'Ungültige Versionsnummer angegeben.', - 'toVersionPH' => 'Migration auf Version %s...', - 'toVersion' => 'Migration auf die aktuelle Version...', - 'rollingBack' => 'Rollback aller Migrationen...', - 'noneFound' => 'Es wurden keine Migrationen gefunden..', - 'on' => 'Migriert nach: ', - 'migSeeder' => 'Beispieldaten-Name', - 'migMissingSeeder' => 'Es muss ein Beispieldaten-Name angegeben werden.', - 'removed' => 'Zurückrollen nach: ', - 'added' => 'Ausführen: ', - - 'version' => 'Version', - 'filename' => 'Dateiname', -]; diff --git a/app/Language/de/Number.php b/app/Language/de/Number.php deleted file mode 100644 index 845c51e7..00000000 --- a/app/Language/de/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' Tausend', - 'million' => ' Million', - 'billion' => ' Milliarde', - 'trillion' => ' Billion', - 'quadrillion' => ' Billiarde', -]; diff --git a/app/Language/de/Pager.php b/app/Language/de/Pager.php deleted file mode 100644 index 7cb92859..00000000 --- a/app/Language/de/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Seiten Navigation', - 'first' => 'Erste', - 'previous' => 'Letzte', - 'next' => 'Weiter', - 'last' => 'Zurück', - 'older' => 'Älter', - 'newer' => 'Neuer', - 'invalidTemplate' => '{0} ist kein gültiges Template.', - 'invalidPaginationGroup' => '{0} ist keine gültige Seiten-Gruppe.', -]; diff --git a/app/Language/de/RESTful.php b/app/Language/de/RESTful.php deleted file mode 100644 index b37ec47c..00000000 --- a/app/Language/de/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}"-Aktion nicht implementiert.', -]; diff --git a/app/Language/de/Redirect.php b/app/Language/de/Redirect.php deleted file mode 100644 index 047b0a7c..00000000 --- a/app/Language/de/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Umleitung auf "{0}" nicht möglich. Error status code "{1}"', -]; diff --git a/app/Language/de/Router.php b/app/Language/de/Router.php deleted file mode 100644 index 8fe8b63a..00000000 --- a/app/Language/de/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Ein Parameter stimmt nicht mit dem erwarteten Typ überein.', - 'missingDefaultRoute' => 'Es konnte nicht bestimmt werden, was angezeigt werden soll. In der Routingdatei wurde keine Standardroute angegeben.', -]; diff --git a/app/Language/de/Session.php b/app/Language/de/Session.php deleted file mode 100644 index dbf1321d..00000000 --- a/app/Language/de/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - 'In `sessionSavePath` muss der Tabellenname angegeben werden damit das Session Handling per Datenbank funktioniert.', - 'invalidSavePath' => 'Session: Der konfigurierte Speicherpfad "{0}" ist kein Verzeichnis, existiert nicht oder kann nicht erstellt werden.', - 'writeProtectedSavePath' => 'Session: Der konfigurierte Speicherpfad "{0}" kann vom PHP-Prozess nicht beschrieben werden.', - 'emptySavePath' => 'Session: Kein Speicherpfad konfiguriert.', - 'invalidSavePathFormat' => 'Session: Ungültiges Redis Speicherpfadformat: {0}', -]; diff --git a/app/Language/de/Time.php b/app/Language/de/Time.php deleted file mode 100644 index bf56a46e..00000000 --- a/app/Language/de/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Monat muss zwischen 1 und 12 sein. Eingabe: {0}', - 'invalidDay' => 'Tag muss zwischen 1 und 31 sein. Eingabe: {0}', - 'invalidOverDay' => 'Tag muss zwischen 1 und {0} sein. Eingabe: {1}', - 'invalidHours' => 'Stune muss zwischen 0 und 23 sein. Eingabe: {0}', - 'invalidMinutes' => 'Minute muss zwischen 0 und 59 sein. Eingabe: {0}', - 'invalidSeconds' => 'Sekunde muss zwischen 0 und 59 sein. Eingabe: {0}', - 'years' => '{0, plural, =1{# Jahr} other{# Jahre}}', - 'months' => '{0, plural, =1{# Monat} other{# Monate}}', - 'weeks' => '{0, plural, =1{# Woche} other{# Wochen}}', - 'days' => '{0, plural, =1{# Tag} other{# Tage}}', - 'hours' => '{0, plural, =1{# Stunde} other{# Stunden}}', - 'minutes' => '{0, plural, =1{# Minute} other{# Minuten}}', - 'seconds' => '{0, plural, =1{# Sekunde} other{# Sekunden}}', - 'ago' => '{0} her', - 'inFuture' => 'in {0}', - 'yesterday' => 'Gestern', - 'tomorrow' => 'Morgen', - 'now' => 'Jetzt', -]; diff --git a/app/Language/de/Validation.php b/app/Language/de/Validation.php deleted file mode 100644 index 3add73ac..00000000 --- a/app/Language/de/Validation.php +++ /dev/null @@ -1,98 +0,0 @@ - 'Kein Regelset in der Konfiguration der Validierung angegeben.', - 'ruleNotFound' => '{0} ist keine gültige Regel.', - 'groupNotFound' => '{0} ist keine Gruppe von Validierungsregeln.', - 'groupNotArray' => '{0} Regelgruppe muss ein Array sein.', - 'invalidTemplate' => '{0} ist keine gültige Validierungsvorlage.', - - // Rule Messages - 'alpha' => 'Das {field}-Formularfeld darf nur alphabetische Zeichen enthalten.', - 'alpha_dash' => 'Das {field}-Formularfeld darf nur alphanumerische Zeichen, Unterstriche und Bindestriche enthalten.', - 'alpha_numeric' => 'Das {field}-Formularfeld darf nur alphanumerische Zeichen enthalten.', - 'alpha_numeric_punct' => 'Das {field}-Formularfeld darf nur alphanumerische Zeichen und Leerzeichen unt ~ ! # $ % & * - _ + = | : . enthalten.', - 'alpha_numeric_space' => 'Das {field}-Formularfeld darf nur alphanumerische Zeichen und Leerzeichen enthalten.', - 'alpha_space' => 'Das {field}-Formularfeld darf nur alphabetische Zeichen und Leerzeichen enthalten.', - 'decimal' => 'Das {field}-Formularfeld muss eine Dezimalzahl enthalten.', - 'differs' => 'Das {field}-Formularfeld muss sich vom Feld {param} unterscheiden.', - 'equals' => 'Das {field}-Formularfeld muss exakt {param} entsprechen.', - 'exact_length' => 'Das {field}-Formularfeld muss genau {param} Zeichen lang sein.', - 'greater_than' => 'Das {field}-Formularfeld muss eine Zahl größer als {param} enthalten.', - 'greater_than_equal_to' => 'Das {field}-Formularfeld muss eine Zahl größer oder gleich {param} enthalten.', - 'hex' => 'Das {field}-Formularfeld darf nur hexadezimale Zeichen enthalten.', - 'in_list' => 'Das {field}-Formularfeld muss eines der folgenden sein: {param}.', - 'integer' => 'Das {field}-Formularfeld muss eine ganze Zahl enthalten.', - 'is_natural' => 'Das {field}-Formularfeld darf nur Ziffern enthalten.', - 'is_natural_no_zero' => 'Das {field}-Formularfeld darf nur Ziffern enthalten und muss größer als Null sein.', - 'is_not_unique' => 'Das {field}-Formularfeld muss einen bereits in der Datenbank vorhandenen Wert enthalten.', - 'is_unique' => 'Das {field}-Formularfeld muss einen eindeutigen Wert enthalten.', - 'less_than' => 'Das {field}-Formularfeld muss eine Zahl kleiner als {param} enthalten.', - 'less_than_equal_to' => 'Das {field}-Formularfeld muss eine Zahl kleiner oder gleich {param} enthalten.', - 'matches' => 'Das {field}-Formularfeld stimmt nicht mit dem Feld {param} überein.', - 'max_length' => 'Das {field}-Formularfeld darf die Länge von {param} Zeichen nicht überschreiten.', - 'min_length' => 'Das {field}-Formularfeld muss mindestens {param} Zeichen lang sein.', - 'not_equals' => 'Das {field}-Formularfeld darf nicht {param} entsprechen.', - 'numeric' => 'Das {field}-Formularfeld darf nur Zahlen enthalten.', - 'regex_match' => 'Das {field}-Formularfeld ist nicht im richtigen Format.', - 'required' => 'Das {field}-Formularfeld ist erforderlich.', - 'required_with' => 'Das {field}-Formularfeld ist erforderlich, wenn {param} vorhanden ist. {field}-Formularfeld', - 'required_without' => 'Das {field}-Formularfeld ist erforderlich, wenn {param} nicht vorhanden ist.', - 'string' => 'The {field}-Formularfeld muss einen String enthalten.', - 'timezone' => 'Das {field}-Formularfeld muss eine gültige Zeitzone sein.', - 'valid_base64' => 'Das {field}-Formularfeld muss eine gültige base64-Zeichenkette sein.', - 'valid_email' => 'Das {field}-Formularfeld muss eine gültige E-Mail-Adresse enthalten.', - 'valid_emails' => 'Das {field}-Formularfeld muss gültige E-Mail-Adressen enthalten.', - 'valid_ip' => 'Das {field}-Formularfeld muss eine gültige IP enthalten..', - 'valid_url' => 'Das {field}-Formularfeld muss eine gültige URL enthalten.', - 'valid_date' => 'Das {field}-Formularfeld muss ein gültiges Datum enthalten.', - - // Credit Cards - 'valid_cc_num' => 'Das {field}-Formularfeld scheint keine gültige Kreditkartennummer zu enthalten.', - - // Files - 'uploaded' => 'Das {field}-Formularfeld enthält keine gültige hochgeladene Datei.', - 'max_size' => 'Das {field}-Formularfeld enthält enthält eine zu grosse Datei.', - 'is_image' => 'Das {field}-Formularfeld enthält keine gültige, hochgeladene Bilddatei.', - 'mime_in' => 'Das {field}-Formularfeld enthält keinen gültigen Mime-Typ.', - 'ext_in' => 'Das {field}-Formularfeld enthält keine gültige Dateiendung.', - 'max_dims' => 'Das {field}-Formularfeld enthält entweder kein Bild, oder es ist zu breit oder zu hoch.', -]; diff --git a/app/Language/de/View.php b/app/Language/de/View.php deleted file mode 100644 index 21b131db..00000000 --- a/app/Language/de/View.php +++ /dev/null @@ -1,47 +0,0 @@ - '{class}::{method} ist keine gültige Methode.', - 'missingCellParameters' => '{class}::{method} hat keine Parameter.', - 'invalidCellParameter' => '{0} ist ein ungültiger Parameter-Name.', - 'noCellClass' => 'Es ist keine View angegeben', - 'invalidCellClass' => 'Klasse konnte nicht gefunden werden: {0}.', - 'tagSyntaxError' => 'Syntaxfehler in den Parser-tags: {0}', -]; diff --git a/app/Language/en/Main.php b/app/Language/en/Main.php deleted file mode 100644 index 1ac70d4e..00000000 --- a/app/Language/en/Main.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Dashboard', - 'manage' => 'Manage', - 'users' => 'Users', - 'addUser' => 'Add User', - 'editUsers' => 'Manage Users', - 'groups' => 'Groups', - 'addGroup' => 'Add Group', - 'editGroups' => 'Manage Groups', - 'brands' => 'Brands', - 'category' => 'Category', - 'store' => 'Store', - 'stores' => 'Stores', - 'attributes' => 'Attributes', - 'products' => 'Products', - 'addProduct' => 'Add Product', - 'manageProducts' => 'Manage Products', - 'editProduct' => 'Edit Product', - 'orders' => 'Orders', - 'addOrder' => 'Add Order', - 'editOrders' => 'Manage Orders', - 'reports' => 'Reports', - 'company' => 'Company', - 'profile' => 'Profile', - 'setting' => 'Setting', - 'logout' => 'Logout', - - 'action' => 'Azione', - 'status' => 'Status', - 'save' => 'Save Changes', - 'yes' => 'Yes', - 'no' => 'No', - 'close' => 'Close', - 'back' => 'Back', - 'delConf' => 'Do you really want to remove?', - 'createdOK' => 'Successfully created', - 'updatedOK' => 'Successfully updated', - 'error' => 'Error occurred!!', - - 'permission' => 'Permission', - 'create' => 'Create', - 'update' => 'Update', - 'view' => 'View', - 'delete' => 'Delete', - - 'productName' => 'Product Name', - 'price' => 'Price', - 'qty' => 'Qty', - 'availability' => 'Availability', - 'description' => 'Description', -]; diff --git a/app/Language/en/Validation.php b/app/Language/en/Validation.php deleted file mode 100644 index 54d1e7a4..00000000 --- a/app/Language/en/Validation.php +++ /dev/null @@ -1,4 +0,0 @@ - 'Comando "{0}" no encontrado.', // 'Command "{0}" not found.', - 'helpUsage' => 'Uso:', // 'Usage:', - 'helpDescription' => 'Descripción:', // 'Description:', - 'helpOptions' => 'Opciones:', // 'Options:', - 'helpArguments' => 'Argumentos:', // 'Arguments:', - 'invalidColor' => 'Inválido {0} color: {1}.', // 'Invalid {0} color: {1}.', -]; \ No newline at end of file diff --git a/app/Language/es/Cache.php b/app/Language/es/Cache.php deleted file mode 100644 index 6ecbf027..00000000 --- a/app/Language/es/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache no pudo escribir a {0}', // 'Cache unable to write to {0}', - 'invalidHandlers' => 'La configuración de Cache debe tener un array de $validHandlers.', // 'Cache config must have an array of $validHandlers.', - 'noBackup' => 'La configuración de Cache debe tener un manejador y un set de manejador de respaldo.', // 'Cache config must have a handler and backupHandler set.', - 'handlerNotFound' => 'La configuración de Cache tiene un manejador o un manejador de respaldo inválidamente especificado', // 'Cache config has an invalid handler or backup handler specified.', -]; \ No newline at end of file diff --git a/app/Language/es/Cast.php b/app/Language/es/Cast.php deleted file mode 100644 index 6c5c5d75..00000000 --- a/app/Language/es/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Se ha excedido el nivel máximo de profundidad', // 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Desbordamiento o desajuste de modo', // 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Se ha encontrado un carácter de control inesperado', // 'Unexpected control character found', - 'jsonErrorSyntax' => 'Error de sintaxis, JSON mal formado', // 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Carácter UTF-8 mal formado, posible codificación incorrecta', // 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Error desconocido', // 'Unknown error', -]; diff --git a/app/Language/es/Core.php b/app/Language/es/Core.php deleted file mode 100644 index 6fe1f1c3..00000000 --- a/app/Language/es/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Archivo inválido: {0}', // 'Invalid file: {0}', - 'copyError' => 'Se encontró un error al intentar reemplazar el archivo ({0}). Asegúrese de que su directorio de archivos sea editable.', // 'An error was encountered while attempting to replace the file({0}). Please make sure your file directory is writable.', - 'missingExtension' => 'La extensión {0} no está cargada.', // '{0} extension is not loaded.', - 'noHandlers' => '{0} debe proporcionar al menos un controlador.', // {0} must provide at least one Handler. -]; \ No newline at end of file diff --git a/app/Language/es/Database.php b/app/Language/es/Database.php deleted file mode 100644 index f2ad493b..00000000 --- a/app/Language/es/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} no es una llamada válida a un Evento de Modelo.', // '{0} is not a valid Model Event callback.', - 'invalidArgument' => 'Debes proporcionar un {0} valido.', // 'You must provide a valid {0}.', - 'invalidAllowedFields' => 'Los campos permitidos deben especificarse para el modelo: {0}', // 'Allowed fields must be specified for model: {0}', - 'emptyDataset' => 'No hay datos para {0}', // 'There is no data to {0}.', - 'failGetFieldData' => 'No se pudieron obtener datos del campo de la base de datos.', // 'Failed to get field data from database.', - 'failGetIndexData' => 'No se pudieron obtener datos de índice de la base de datos.', // 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'No se pudieron obtener datos de clave externa de la base de datos.', // 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Se produjo un error al analizar la clave de la cadena.', // 'Parsing key string failed.', - 'featureUnavailable' => 'Esta característica no está disponible para la base de datos que estás utilizando.', // 'This feature is not available for the database you are using.', - 'tableNotFound' => 'No se encontró la tabla `{0}` en la base de datos actual.', // 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => 'La clase de modelo `{0}` no especifica una clave primaria.', // '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => 'La clase de modelo `{0}` no tiene un dateFormat válido.', // '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'No se encontró el campo `{0}`.', // 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Se proporciona una declaración vacía para el campo `{0}`', // 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Solo se permite una sola columna en el nombre de la columna.', // 'Only single column allowed in Column name.', -]; diff --git a/app/Language/es/Email.php b/app/Language/es/Email.php deleted file mode 100644 index 2f25da64..00000000 --- a/app/Language/es/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'El método de validación del email debe ser pasado en array.', - 'invalidAddress' => 'Dirección de email inválida: {0}', - 'attachmentMissing' => 'No se ha podido localizar el adjunto: {0}', - 'attachmentUnreadable' => 'No se ha podido abrir el adjunto: {0}', - 'noFrom' => 'No se pude enviar un email sin cabecera "Para".', - 'noRecipients' => 'Debe incluir destinatarios: Para, Cc, or Bcc', - 'sendFailurePHPMail' => 'Incapaz de enviar email usando PHP mail(). Su servidor puede no estar configurado para enviar correos usando este método.', - 'sendFailureSendmail' => 'Incapaz de enviar email usando PHP Sendmail. Su servidor puede no estar configurado para enviar correos usando este método.', - 'sendFailureSmtp' => 'Incapaz de enviar email usando PHP SMTP. Su servidor puede no estar configurado para enviar correos usando este método.', - 'sent' => 'Su mensaje ha sido enviado correctamente utilizando el siguiente protocolo: {0}', - 'noSocket' => 'Incapaz de abrir un socket a Sendmail. Compruebe la configuración.', - 'noHostname' => 'No ha especificado un nombre de host SMTP.', - 'SMTPError' => 'Se han encontrado los siguientes errores SMTP: {0}', - 'noSMTPAuth' => 'Error: Debe especificar un usuario y contraseña SMTP.', - 'failedSMTPLogin' => 'Ha fallado el envío del comando AUTH LOGIN. Error: {0}', - 'SMTPAuthUsername' => 'Ha fallado la autentificación del usuario. Error: {0}', - 'SMTPAuthPassword' => 'Ha fallado la autentificación de la contraseña. Error: {0}', - 'SMTPDataFailure' => 'Incapaz de enviar datos: {0}', - 'exitStatus' => 'Código de estado de salida: {0}', -]; diff --git a/app/Language/es/Encryption.php b/app/Language/es/Encryption.php deleted file mode 100644 index 6434bbfe..00000000 --- a/app/Language/es/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No se solicitó un driver; ¡La señorita Daisy estará muy molesta!', // 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'No se puede encontrar un controlador de cifrado {0} disponible.', // 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" no puede ser configurado.', // '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'El encriptador necesita una clave de inicio.', // 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Descifrado: autenticación fallida.', // 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Cifrado fallido.', // 'Encryption failed.', -]; diff --git a/app/Language/es/Entity.php b/app/Language/es/Entity.php deleted file mode 100644 index 10e5443d..00000000 --- a/app/Language/es/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Intentando acceder a la propiedad inexistente {0} de {1}', // 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/es/Files.php b/app/Language/es/Files.php deleted file mode 100644 index e57a796d..00000000 --- a/app/Language/es/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Archivo no encontrado: {0}', // 'File not found: {0}', - 'cannotMove' => 'No se pudo mover el archivo {0} a {1} ({2})', // 'Could not move file {0} to {1} ({2})', -]; diff --git a/app/Language/es/Filters.php b/app/Language/es/Filters.php deleted file mode 100644 index 56f93537..00000000 --- a/app/Language/es/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - 'El filtro {0} debe tener un alias coincidente definido.', // '{0} filter must have a matching alias defined.', - 'incorrectInterface' => '{0} debe implementar CodeIgniter\Filters\FilterInterface.', // '{0} must implement CodeIgniter\Filters\FilterInterface.', -]; \ No newline at end of file diff --git a/app/Language/es/Format.php b/app/Language/es/Format.php deleted file mode 100644 index 59ff0d39..00000000 --- a/app/Language/es/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Fallo al parsear la cadena JSON, error: "{0}".', - 'missingExtension' => 'La extensión SimpleXML requiere formato XML.', -]; diff --git a/app/Language/es/HTTP.php b/app/Language/es/HTTP.php deleted file mode 100644 index 90cbfa89..00000000 --- a/app/Language/es/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURL debe estar habilitado para usar la clase CURLRequest.', // 'CURL must be enabled to use the CURLRequest class.', - 'invalidSSLKey' => 'No se puede establecer la clave SSL. {0} no es un archivo válido.', // 'Cannot set SSL Key. {0} is not a valid file.', - 'sslCertNotFound' => 'Certificado SSL no encontrado en: {0}', // 'SSL certificate not found at: {0}', - 'curlError' => '{0} : {1}', // '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} no es un tipo de negociación válido. Debe ser uno de: media, charset, encoding, language.', // '{0} is not a valid negotiation type. Must be one of: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Versión de protocolo HTTP no válida. Debe ser una de: {0}', // 'Invalid HTTP Protocol Version. Must be one of: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Debe proporcionar un array de valores compatibles a todas las negociaciones.', // 'You must provide an array of supported values to all Negotiations.', - - // RedirectResponse - 'invalidRoute' => 'No se puede encontrar la ruta {0} mientras se realiza el enrutamiento inverso.', // '{0} route cannot be found while reverse-routing.', - - // DownloadResponse - 'cannotSetBinary' => 'Al establecer la ruta del archivo no se puede establecer binario.', // 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'Cuando se configura binario no se puede establecer ruta de archivo: {0}', // 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'No se encontró la fuente del cuerpo de descarga.', // 'Not found download body source.', - 'cannotSetCache' => 'No es compatible con el almacenamiento en caché para la descarga.', // 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'No admite el código de cambio de estado para descargar. código: {0}, razón: {1}', // 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'Respuesta HTTP sin código de estado', // 'HTTP Response is missing a status code', - 'invalidStatusCode' => '{0} no es un código de estado de retorno HTTP válido', // '{0} is not a valid HTTP return status code', - 'unknownStatusCode' => 'Código de estado HTTP desconocido provisto sin mensaje: {0}', // 'Unknown HTTP status code provided with no message: {0}', - - // URI - 'cannotParseURI' => 'No se puede analizar el URI: {0}', // 'Unable to parse URI: {0}', - 'segmentOutOfRange' => 'El segmento de solicitud de URI está fuera de rango: {0}', // 'Request URI segment is our of range: {0}', - 'invalidPort' => 'Los puertos deben estar entre 0 y 65535. Dado: {0}', // 'Ports must be between 0 and 65535. Given: {0}', - 'malformedQueryString' => 'Las cadenas de consulta pueden no incluir fragmentos de URI.', // 'Query strings may not include URI fragments.', - - // Page Not Found - 'pageNotFound' => 'Página no encontrada', // 'Page Not Found', - 'emptyController' => 'Ningún controlador especificado.', // 'No Controller specified.', - 'controllerNotFound' => 'Controlador o su método no encontrado: {0}::{1}', // 'Controller or its method is not found: {0}::{1}', - 'methodNotFound' => 'No se encontró el método del controlador: {0}', // 'Controller method is not found: {0}', - - // CSRF - 'disallowedAction' => 'La acción que solicitó no está permitida.', // 'The action you requested is not allowed.', - - // Uploaded file moving - 'alreadyMoved' => 'El archivo cargado ya se ha movido.', // 'The uploaded file has already been moved.', - 'invalidFile' => 'El archivo original no es un archivo válido.', // 'The original file is not a valid file.', - 'moveFailed' => 'No se pudo mover el archivo {0} a {1} ({2})', // 'Could not move file {0} to {1} ({2})', - - 'uploadErrOk' => 'Archivo cargado con éxito.', // 'The file uploaded with success.', - 'uploadErrIniSize' => 'El archivo "%s" excede la directiva inic upload_max_filesize.', // 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => 'El archivo "%s" excede el límite de carga definido en su formulario.', // 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => 'El archivo "%s" solo se cargó parcialmente.', // 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => 'Ningún archivo fue cargado.', // 'No file was uploaded.', - 'uploadErrCantWrite' => 'El archivo "%s" no se pudo escribir en el disco.', // 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => 'El archivo no se pudo cargar: falta el directorio temporal.', // 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => 'La carga de archivos fue detenida por una extensión PHP.', // 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => 'El archivo "%s" no se cargó debido a un error desconocido.', //'The file "%s" was not uploaded due to an unknown error.', -]; \ No newline at end of file diff --git a/app/Language/es/Images.php b/app/Language/es/Images.php deleted file mode 100644 index ab68b2db..00000000 --- a/app/Language/es/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Debe especificar el origen de la imagen en las preferencias.', - 'gdRequired' => 'Se requiere la librería de imágenes GD para esta funcionalidad.', - 'gdRequiredForProps' => 'Su servidor debe soportar la librería de imágenes GD para determinar las propiedades de la imagen.', - 'gifNotSupported' => 'Las imágnes GIF no suelen ser soportadas por restricciones de licencia. Puede utilizar imágenes JPG o PNG en su lugar.', - 'jpgNotSupported' => 'No se soportan imágnes JPG.', - 'pngNotSupported' => 'No se soportan imágnes PNG.', - 'unsupportedImageCreate' => 'Su servidor no soporta la función GD necesaria para procesar este tipo de imagen.', - 'jpgOrPngRequired' => 'El protocolo de escalado especificado en sus preferencias solo funciona con imágenes JPEG o PNG.', - 'rotateUnsupported' => 'La rotación de imágenes no parece estar soportada por su servidor.', - 'libPathInvalid' => 'La ruta a su librería de imágenes no es correcta. Por fabor corrija la ruta en sus preferencias de imagen. {0, string)', - 'imageProcessFailed' => 'Ha fallado el procesamiento de imagen. Por favor, verifique que su servidor soporta el protocolo seleccionado y que la ruta a su librería de imágenes es correcta.', - 'rotationAngleRequired' => 'Es necesario un ángulo de rotación para rotar la imagen.', - 'invalidPath' => 'La ruta a la imagen no es correcta.', - 'copyFailed' => 'La rutina de copiado de imagen ha fallado.', - 'missingFont' => 'Incapaz de encontrar la fuente a utilizar.', - 'saveFailed' => 'Incapaz de guardar la imagen. Por favor compruebe el archivo que la imagen y el directorio tienen permiso de escritura.', - 'invalidDirection' => 'La dirección de girado puede ser solo `vertical` o `horizontal`. Seleccionado: {0}', - 'exifNotSupported' => 'Leer datos EXIF no está soportado por esta instalación de PHP.', -]; diff --git a/app/Language/es/Language.php b/app/Language/es/Language.php deleted file mode 100644 index b01e08dd..00000000 --- a/app/Language/es/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'La línea obtenida debe ser una cadena o un array de cadenas.' -]; diff --git a/app/Language/es/Log.php b/app/Language/es/Log.php deleted file mode 100644 index c0fdce15..00000000 --- a/app/Language/es/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} es un nivel de log inválido.', -]; diff --git a/app/Language/es/Migrations.php b/app/Language/es/Migrations.php deleted file mode 100644 index 265cbbe2..00000000 --- a/app/Language/es/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - 'Debe establecer la tabla de migrado.', - 'disabled' => 'Las migraciones se han cargado pero están deshabilitadas o configuradas incorrectamente.', - 'notFound' => 'Archivo de migración no encontrado: ', - 'batchNotFound' => 'Lote objetivo no encontrado: ', - 'empty' => 'No se han encontrado archivos de migración', - 'gap' => 'Hay un hueco en la secuencia de migración cerca del número de versión: ', - 'classNotFound' => 'La clase de migración "%s" no se ha encontrado.', - 'missingMethod' => 'La clase de migración no ha encontrado el método "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigra la base de datos a la última versión disponible.", - 'migHelpCurrent' => "\t\tMigra la base de datos a la versión marcado como 'current' en configuración.", - 'migHelpVersion' => "\tMigra la base de datos a la versión {v}.", - 'migHelpRollback' => "\tEjecuta todas las migraciones 'down' a la versión 0.", - 'migHelpRefresh' => "\t\tDesinstala y reejecuta todas las migraciones para refrescar la base de datos.", - 'migHelpSeed' => "\tEjecuta la semilla de nombre [name].", - 'migCreate' => "\tCrea una nueva migración llamada [name]", - 'nameMigration' => 'Nombre el archivo de migración', - 'badCreateName' => 'Debe establecer un nombre al archivo de migración.', - 'writeError' => 'Error al intentar crear el archivo.', - 'migNumberError' => 'El número de migración debe tener tres dígitos y no debe haber espacios en la secuencia.', - - 'latest' => 'Migrando a la última versión...', - 'generalFault' => '¡La migración falló!', - 'migInvalidVersion' => 'Número de versión incorrecta.', - 'toVersionPH' => 'Migrando a la versión %s...', - 'toVersion' => 'Migrando a la versión actual...', - 'rollingBack' => 'Deshaciendo todas las migraciones...', - 'noneFound' => 'No se han encontrado migraciones.', - 'on' => 'Migrado en: ', - 'migSeeder' => 'Nombre de semilla', - 'migMissingSeeder' => 'Debe indicar un nombre de semilla.', - 'removed' => 'Desinstalando: ', - 'added' => 'Ejecutando: ', - - 'version' => 'Versión', - 'filename' => 'Nombre de archivo', -]; diff --git a/app/Language/es/Number.php b/app/Language/es/Number.php deleted file mode 100644 index 62f7eff2..00000000 --- a/app/Language/es/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' miles', - 'million' => ' millones', - 'billion' => ' billones', - 'trillion' => ' trillones', - 'quadrillion' => ' quadrillones', -]; diff --git a/app/Language/es/Pager.php b/app/Language/es/Pager.php deleted file mode 100644 index 9123c310..00000000 --- a/app/Language/es/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Navegación de la página', - 'first' => 'Primera', - 'previous' => 'Anterior', - 'next' => 'Siguiente', - 'last' => 'Última', - 'older' => 'Antigua', - 'newer' => 'Nueva', - 'invalidTemplate' => '{0} no es un modelo válido de paginador.', - 'invalidPaginationGroup' => '{0} no es un grupo válido de paginación.', -]; diff --git a/app/Language/es/RESTful.php b/app/Language/es/RESTful.php deleted file mode 100644 index 64cc1143..00000000 --- a/app/Language/es/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - 'Acción "{0}" no implementada.', // '"{0}" action not implemented.', -]; diff --git a/app/Language/es/Redirect.php b/app/Language/es/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/es/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/es/Router.php b/app/Language/es/Router.php deleted file mode 100644 index 84a81292..00000000 --- a/app/Language/es/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Un parámetro no corresponde con el tipo esperado.', - 'missingDefaultRoute' => 'No se ha podido determinar que debe ser mostrado. No se ha establecido una ruta por defecto en el archivo de enrutado.', -]; diff --git a/app/Language/es/Session.php b/app/Language/es/Session.php deleted file mode 100644 index 75e00925..00000000 --- a/app/Language/es/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` debe tener un nombre de tabla para que funcione el manejador de sesión de la base de datos.', - 'invalidSavePath' => 'Sesión: La ruta de guardado configurada "{0}" no es un directorio, no existe o no puede ser creada.', - 'writeProtectedSavePath' => 'Sesión: La ruta de guardado configurada "{0}" no es escribible por el proceso de PHP.', - 'emptySavePath' => 'Sesión: No se ha configurado una ruta de guardado.', - 'invalidSavePathFormat' => 'Sesión: Formato de ruta de guardado de Redis no válido: {0}', -]; diff --git a/app/Language/es/Time.php b/app/Language/es/Time.php deleted file mode 100644 index 37b743ba..00000000 --- a/app/Language/es/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Los meses deben estar entre 1 y 12. Establecido: {0}', - 'invalidDay' => 'Los días deben estar entre 1 y 31. Establecido: {0}', - 'invalidOverDay' => 'Los días deben estar entre 1 y {0}. Establecido: {1}', - 'invalidHours' => 'Las horas deben estar entre 0 y 23. Establecido: {0}', - 'invalidMinutes' => 'Los minutos deben estar entre 0 y 59. Establecido: {0}', - 'invalidSeconds' => 'Los segundos deben estar entre 0 y 59. Establecido: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '{0} atrás', - 'inFuture' => 'en {0}', - 'yesterday' => 'Ayer', - 'tomorrow' => 'Mañana', - 'now' => 'Ahora', -]; diff --git a/app/Language/es/Validation.php b/app/Language/es/Validation.php deleted file mode 100644 index d34d458f..00000000 --- a/app/Language/es/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'No se han establecido reglas en la configuración de validación.', - 'ruleNotFound' => '{0} no es una regla de validación válida.', - 'groupNotFound' => '{0} no es un grupo de reglas de validación.', - 'groupNotArray' => '{0} el grupo de validación debe ser un array.', - 'invalidTemplate' => '{0} no es un modelo de validación válido.', - - // Rule Messages - 'alpha' => 'El campo {field} solo puede contener caracteres alfabéticos.', - 'alpha_dash' => 'El campo {field} solo puede contener caracteres alfanuméricos, subrayados, y guiones.', - 'alpha_numeric' => 'El campo {field} solo puede contener caracteres alfanuméricos.', - 'alpha_numeric_space' => 'El campo {field} solo puede contener caracteres alfanuméricos y espacios.', - 'alpha_space' => 'El campo {field} solo puede contener caracteres alfabéticos y espacios.', - 'decimal' => 'El campo {field} debe contener un número decimal.', - 'differs' => 'El campo {field} debe diferir del campo {param}.', - 'equals' => 'El campo {field} debe ser exactamente: {param}.', - 'exact_length' => 'El campo {field} debe tener exactamente {param} caractéres de longitud.', - 'greater_than' => 'El campo {field} debe contener un número mayor que {param}.', - 'greater_than_equal_to' => 'El campo {field} debe contener un número mayor o igual a {param}.', - 'hex' => 'El campo {field} solo puede contener caracteres hexadecimales.', - 'in_list' => 'El campo {field} debe ser uno de: {param}.', - 'integer' => 'El campo {field} debe contener un entero.', - 'is_natural' => 'El campo {field} debe contener solo dígitos.', - 'is_natural_no_zero' => 'El campo {field} debe solo contener dígitos y ser mayor que cero.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'El campo {field} debe contener un valor único.', - 'less_than' => 'El campo {field} debe contener un número menor que {param}.', - 'less_than_equal_to' => 'El campo {field} debe contener un número menor o igual a {param}.', - 'matches' => 'El campo {field} no coincide con el campo {param}.', - 'max_length' => 'El campo {field} no pude exceder los {param} caracteres de longitud.', - 'min_length' => 'El campo {field} debe tener al menos {param} caracteres de longitud.', - 'not_equals' => 'El campo {field} no puede ser: {param}.', - 'numeric' => 'El campo {field} debe contener solo números.', - 'regex_match' => 'El campo {field} no está en el formato correcto.', - 'required' => 'El campo {field} es obligatorio.', - 'required_with' => 'El campo {field} es obligatorio cuando {param} está presente.', - 'required_without' => 'El campo {field} es obligatorio cuando {param} no está presente.', - 'timezone' => 'El campo {field} debe ser una zona horaria válida.', - 'valid_base64' => 'El campo {field} debe ser una cadena base64 válida.', - 'valid_email' => 'El campo {field} debe contener una dirección de email válida.', - 'valid_emails' => 'El campo {field} debe contener todas las direcciones de email válidas.', - 'valid_ip' => 'El campo {field} debe contener una IP válida.', - 'valid_url' => 'El campo {field} debe contener una URL válida.', - 'valid_date' => 'El campo {field} debe contener una fecha válida.', - - // Credit Cards - 'valid_cc_num' => '{field} no parece ser un número de tarjeta de crédito válida.', - - // Files - 'uploaded' => '{field} no es un campo de subida de archivo válido.', - 'max_size' => '{field} es demasiado grande para un archivo.', - 'is_image' => '{field} no es válido, subido archivo de imagen.', - 'mime_in' => '{field} no tiene un tipo válido de mime.', - 'ext_in' => '{field} no tiene una extensión de archivo válida.', - 'max_dims' => '{field} no es una imagen o tiene demasiado alto o ancho.', -]; diff --git a/app/Language/es/View.php b/app/Language/es/View.php deleted file mode 100644 index ce4bec69..00000000 --- a/app/Language/es/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} no es un método válido.', - 'missingCellParameters' => '{class}::{method} no tiene parámetros.', - 'invalidCellParameter' => '{0} no es un nombre de parámetro válido.', - 'noCellClass' => 'No se ha establecido una clase de vista de celda.', - 'invalidCellClass' => 'No se ha podido localizar la clase de vista de celda: {0}.', - 'tagSyntaxError' => 'Tiene un error de sintaxis en su analizador de etiquetas: {0}', -]; diff --git a/app/Language/fa/CLI.php b/app/Language/fa/CLI.php deleted file mode 100644 index 0d681797..00000000 --- a/app/Language/fa/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Command "{0}" not found.', - 'helpUsage' => 'Usage:', - 'helpDescription' => 'Description:', - 'helpOptions' => 'Options:', - 'helpArguments' => 'Arguments:', - 'invalidColor' => 'Invalid {0} color: {1}.', -]; diff --git a/app/Language/fa/Cache.php b/app/Language/fa/Cache.php deleted file mode 100644 index 949a31c5..00000000 --- a/app/Language/fa/Cache.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Cache نمی‌تواند در {0} بنویسد.', - 'invalidHandlers' => 'تنظیمات کش باید شامل آرایه‌ای از $validHandlers باشد.', - 'noBackup' => 'تنظیمات کش باید Cache handler و Backup Handler داشته باشند.', - 'handlerNotFound' => 'در تنظیمات کش، مقدار Cache handler یا Backup handler به درستی مشخص نشده است.', -]; \ No newline at end of file diff --git a/app/Language/fa/Cast.php b/app/Language/fa/Cast.php deleted file mode 100644 index b2f51a3b..00000000 --- a/app/Language/fa/Cast.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Unexpected control character found', - 'jsonErrorSyntax' => 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Unknown error', -]; \ No newline at end of file diff --git a/app/Language/fa/Core.php b/app/Language/fa/Core.php deleted file mode 100644 index b3cb0fd9..00000000 --- a/app/Language/fa/Core.php +++ /dev/null @@ -1,43 +0,0 @@ - 'فایل نامعتبر: {0}', - 'copyError' => 'مشکلی در هنگام جایگزینی فایل بوجود آمده است. لطفا اطمینان حاصل کنید که شاخه‌ی فایل قابل نوشتن است.', - 'missingExtension' => 'افزونه‌ی {0} بارگزاری نشده است.', - 'noHandlers' => '{0} باید حداقل یک Handler داشته باشد.', -]; \ No newline at end of file diff --git a/app/Language/fa/Database.php b/app/Language/fa/Database.php deleted file mode 100644 index 559e663c..00000000 --- a/app/Language/fa/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} callback معتبری به عنوان رویداد مدل نیست.', - 'invalidArgument' => 'لطفا {0} معتبری وارد کنید.', - 'invalidAllowedFields' => 'فیلدهای مجاز برای مدل باید تعیین شوند: {0}', - 'emptyDataset' => 'داده‌ای در {0} وجود ندارد.', - 'failGetFieldData' => 'مشکلی در گرفتن اطلاعات فیلد از دیتابیس به وجود آمده است.', - 'failGetIndexData' => 'مشکلی در گرفتن اطلاعات ایندکس از دیتابیس به وجود آمده است.', - 'failGetForeignKeyData' => 'مشکلی در گرفتن اطلاعات کلید خارجی از دیتابیس به وجود آمده است.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'این قابلیت برای بانک اطلاعاتی که شما در حال استفاده از آن هستید، فراهم نیست.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; \ No newline at end of file diff --git a/app/Language/fa/Email.php b/app/Language/fa/Email.php deleted file mode 100644 index 57e55f45..00000000 --- a/app/Language/fa/Email.php +++ /dev/null @@ -1,58 +0,0 @@ - 'لطفا یک «آرایه» به متد اعتبارسنجی ای‌میل ارسال کنید.', - 'invalidAddress' => 'ای‌میل نامعتبر: {0}', - 'attachmentMissing' => 'پیوست ای‌میل {0} یافت نشد.', - 'attachmentUnreadable' => 'باز کردن پیوست {0} امکان‌پذیر نیست.', - 'noFrom' => 'ارسال ای‌میل بدون هِدِر "From" ممکن نیست.', - 'noRecipients' => 'لطفا یک مخاطب به یکی از صورت‌های To، Cc یا Bcc وارد کنید', - 'sendFailurePHPMail' => 'امکان ارسال ای‌میل با استفاده از تابع mail() وجود ندارد. ممکن است سرور برای این نوع ارسال ای‌میل تنظیم نشده باشد.', - 'sendFailureSendmail' => 'امکان ارسال ای‌میل به روش Sendmail وجود ندارد. ممکن است سرور برای این نوع ارسال ای‌میل تنظیم نشده باشد.', - 'sendFailureSmtp' => 'امکان ارسال ای‌میل به روش SMTP وجود ندارد. ممکن است سرور برای این نوع ارسال ای‌میل تنظیم نشده باشد.', - 'sent' => 'پیام با استفاده از روش {0} با موفقیت ارسال شد.', - 'noSocket' => 'امکان باز کردن سوکت برای استفاده از روش Sendmail وجود ندارد. لطفا تنظیمات سرور را بررسی کنید.', - 'noHostname' => 'شما هیچ هاست SMTP انتخاب نکرده‌اید.', - 'SMTPError' => 'خطای SMTP: {0}', - 'noSMTPAuth' => 'شما هیچ نام کاربری و رمز SMTP ارائه نکرده‌اید.', - 'failedSMTPLogin' => 'مشکل در ارسال دستور AUTH LOGIN. خطا: {0}', - 'SMTPAuthUsername' => 'مشکل در احراز هویت نام کاربری. خطا: {0}', - 'SMTPAuthPassword' => 'مشکل در احراز هویت رمز. خطا: {0}', - 'SMTPDataFailure' => 'امکان ارسال داده وجود ندارد: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; \ No newline at end of file diff --git a/app/Language/fa/Encryption.php b/app/Language/fa/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/fa/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/fa/Entity.php b/app/Language/fa/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/fa/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/fa/Files.php b/app/Language/fa/Files.php deleted file mode 100644 index 88ca9f08..00000000 --- a/app/Language/fa/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'فایل {0} پیدا نشد.', - 'cannotMove' => 'انتقال فایل از {0} به {1} به مشکل خورد ({2}).', -// 'invalidFilename' => 'فایل مقصد وجود ندارد، یا نامعتبر است: {0}.', -// 'cannotCopy' => 'امکان کپی به فایل {0} وجود ندارد - لطفا مطمئن شوید که دسترسی نوشتن در مقصد وجود دارد.', -]; \ No newline at end of file diff --git a/app/Language/fa/Filters.php b/app/Language/fa/Filters.php deleted file mode 100644 index 7299de8d..00000000 --- a/app/Language/fa/Filters.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} filter must have a matching alias defined.', - 'incorrectInterface' => '{0} must implement CodeIgniter\Filters\FilterInterface.', -]; \ No newline at end of file diff --git a/app/Language/fa/Format.php b/app/Language/fa/Format.php deleted file mode 100644 index 434b3468..00000000 --- a/app/Language/fa/Format.php +++ /dev/null @@ -1,41 +0,0 @@ - 'مشکلی در بررسی JSON وجود داشت: "{0}".', - 'missingExtension' => 'افزونه‌ی SimpleXML برای فرمت‌دهی XML ضروری است.', -]; \ No newline at end of file diff --git a/app/Language/fa/HTTP.php b/app/Language/fa/HTTP.php deleted file mode 100644 index 48bd9a4e..00000000 --- a/app/Language/fa/HTTP.php +++ /dev/null @@ -1,88 +0,0 @@ - 'برای استفاده از کلاس CURLRequest باید CURL فعال باشد.', - 'invalidSSLKey' => 'امکان تنظیم SSL Key وجود ندارد. {0} فایل معتبری نیست.', - 'sslCertNotFound' => 'گواهینامه SSL در آدرس {0} پیدا نشد.', - 'curlError' => '{0} : {1}', - // IncomingRequest - 'invalidNegotiationType' => '{0} نوع ورودی معتبری نیست. باید یکی از media, charset, encoding, language باشد.', - // Message - 'invalidHTTPProtocol' => 'نسخه HTTP Protocol معتبر نیست. گزینه‌های معتبر: {0}', - // Negotiate - 'emptySupportedNegotiations' => 'برای انجام Negotiations شما باید آرایه‌ای از مقادیر مجاز را وارد کنید.', - // RedirectResponse - 'invalidRoute' => 'مسیر {0} در هنگام مسیریابی وارونه (reverse-routing) پیدا نشد.', - // DownloadResponse - 'cannotSetBinary' => 'وقتی که مسیر فایل را تنظیم می‌کنید، نمی‌توانید یک کقدار باینری وارد کنید.', - 'cannotSetFilepath' => 'وقتی که باینری را انتخاب می‌کید، نمی‌توانید مسیر فایل ارسال کنید: {0}', - 'notFoundDownloadSource' => 'منبع دانلود پیدا نشد.', - 'cannotSetCache' => 'سیستم Caching برای دانلود پشتیبانی نمی‌شود.', - 'cannotSetStatusCode' => 'تغییر status code برای دانلود پشتیبانی نمی‌شود. کد: {0}, دلیل: {1}', - // Response - 'missingResponseStatus' => 'Status code در پاسخ HTTP وجود ندارد', - 'invalidStatusCode' => '{0} یک Status Code صحیح نیست.', - 'unknownStatusCode' => 'Status Code نامعلوم با هیچ پیامی مرتبط نیست: {0}', - // URI - 'cannotParseURI' => 'پارس کردن و فهمیدم URI ممکن نیست: {0}', - 'segmentOutOfRange' => 'بخش Request URI خارج از محدوده است: {0}', - 'invalidPort' => 'پورت باید بین 0 و 65535 باشد. مقدار ورودی: {0}', - 'malformedQueryString' => 'Query string نمی‌تواند شامل قسمت‌های URI باشد.', - // Page Not Found - 'pageNotFound' => 'صفحه پیدا نشد', - 'emptyController' => 'No Controller specified.', - 'controllerNotFound' => 'Controller or its method is not found: {0}::{1}', - 'methodNotFound' => 'Controller method is not found: {0}', - // CSRF - 'disallowedAction' => 'Action درخواستی شما مجاز نیست.', - // Uploaded file moving - 'alreadyMoved' => 'فایل آپلود شده در حال حاضر جابجا شده است.', - 'invalidFile' => 'فایل اصلی معتبر نیست.', - 'moveFailed' => 'امکان انتقال فایل از {0} به {1} وجود ندارد. ({2})', - - 'uploadErrOk' => 'فایل با موفقیت آپلود شد.', - 'uploadErrIniSize' => 'فایل "%s" از upload_max_filesize در فایل ini بیشتر است..', - 'uploadErrFormSize' => 'فایل "%s" از محدوده آپلود تعریف شده در فرم شما بیشتر است.', - 'uploadErrPartial' => 'فایل "%s" فقط به صورت ناقص آپلود شده است.', - 'uploadErrNoFile' => 'هیچ فایلی آپلود نشد.', - 'uploadErrCantWrite' => 'فایل "%s" نمی‌تواند در دیسک نوشته (ذخیره) شود.', - 'uploadErrNoTmpDir' => 'فایل آپلود نشد: دایرکتوری موقت پیدا نشد.', - 'uploadErrExtension' => 'فایل توسط یک افزونه‌ی PHP متوقف شد.', - 'uploadErrUnknown' => 'فایل "%s" was not uploaded due to an unknown error.' -]; \ No newline at end of file diff --git a/app/Language/fa/Images.php b/app/Language/fa/Images.php deleted file mode 100644 index a6d67270..00000000 --- a/app/Language/fa/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'لطفا در تنظیمات یک عکس مرجع انتخاب کنید.', - 'gdRequired' => 'کتابخانه‌ی GD برای استفاده از این قابلیت نیاز است.', - 'gdRequiredForProps' => 'برای تشخیص خصوصیات عکس، سرور شما باید از کتابخانه‌ی عکس GD پشتیبانی کند.', - 'gifNotSupported' => 'معمولا تصاویر GIF به دلایل محدودیت‌های لایسنس پشتیبانی نمی‌شوند. به جای آن می‌توانید از فرمت‌های JPG یا PNG استفاده کنید.', - 'jpgNotSupported' => 'تصاویر JPG پشتیبانی نمی‌شونند.', - 'pngNotSupported' => 'تصاویر PNG پشتیبانی نمی‌شونند.', - 'unsupportedImageCreate' => 'برای پردازش این نوع تصاویر، سرور شما باید از GD پشتیبانی کند.', - 'jpgOrPngRequired' => 'تنظیمان انتابی شما برای تغییر اندازه‌ی عکس فقط برای فایل‌های JPEG و PNG قابل انجام است.', - 'rotateUnsupported' => 'بر اساس تنظیمات سرور شما، امکان چرخش تصویر وجود ندارد.', - 'libPathInvalid' => 'نشانی کتابخانه‌ی عکس شما صحیح نیست. لطفا در تنظیمات، مسیر درست را انتخاب کنید. {0, string)', - 'imageProcessFailed' => 'پردازش تصویر با مشکل روبرو شد. لطفا مطمئن شوید که سرور تنیمات انتخابی شما را پشتیبانی می‌کند و مسیر کتابخانه‌ی عکس صحیح است.', - 'rotationAngleRequired' => 'برای چرخش تصویر، لطفا زاویه‌ی چرخش را ارائه کنید.', - 'invalidPath' => 'نشانی تصویر انتخابی شما صحیح نیست.', - 'copyFailed' => 'کپی کردن تصویر با مشکل روبرو شد.', - 'missingFont' => 'برای استفاده، لطفا یک فونت انتخاب کنید.', - 'saveFailed' => 'مشکل در ذخیره کردن تصویر. لطفا مطمئن شوید که فایل و شاخه‌ی مورد نظر قابل نوشتن هستند.', - 'invalidDirection' => 'تقارن فقط می‌تواند افقی (`vertical`) یا عمودی (`horizontal`)) باشد. مقدار ارائه شده: {0}', - 'exifNotSupported' => 'در نسخه‌ی PHP نصب شده‌ی شما، EXIF پشتیبانی نمی‌شود.', -]; \ No newline at end of file diff --git a/app/Language/fa/Language.php b/app/Language/fa/Language.php deleted file mode 100644 index c71e06c7..00000000 --- a/app/Language/fa/Language.php +++ /dev/null @@ -1,40 +0,0 @@ - 'خط Get باید رشته یا آرایه‌ای از رشته‌ها باشد.', -]; \ No newline at end of file diff --git a/app/Language/fa/Log.php b/app/Language/fa/Log.php deleted file mode 100644 index 986de21b..00000000 --- a/app/Language/fa/Log.php +++ /dev/null @@ -1,40 +0,0 @@ - '{0} یک log level نامعتبر است.', -]; \ No newline at end of file diff --git a/app/Language/fa/Migrations.php b/app/Language/fa/Migrations.php deleted file mode 100644 index 137b3af2..00000000 --- a/app/Language/fa/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'جدول مایگریشن تنظیم نشده است.', -// 'invalidType' => 'یک نوع شماره گذاری نامعتبر برای مایگریشن مشخص شده است: {0}', - 'disabled' => 'مایگریشن‌ها لارگزاری شده‌اند، اما غیرفعالند یا درست تنظیم نشده اند.', - 'notFound' => 'فایل مایگریشن پیدا نشد: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'هیچ فایل مایگریشنی پیدا نشد.', - 'gap' => 'فاصله ای در دنباله‌ی مایگریشن در نزدیک این ورژن وجود دارد: ', - 'classNotFound' => 'کلاس مایگریشن "%s" پیدا نشد.', - 'missingMethod' => 'کلاس مایگریشن متد "%s" را ندارد.', - - // Migration Command - 'migHelpLatest' => "\t\tMigrates database to latest available migration.", - 'migHelpCurrent' => "\t\tMigrates database to version set as 'current' in configuration.", - 'migHelpVersion' => "\tMigrates database to version {v}.", - 'migHelpRollback' => "\tRuns all migrations 'down' to version 0.", - 'migHelpRefresh' => "\t\tUninstalls and re-runs all migrations to freshen database.", - 'migHelpSeed' => "\tRuns the seeder named [name].", - 'migCreate' => "\tCreates a new migration named [name]", - 'nameMigration' => 'Name the migration file', - 'badCreateName' => 'You must provide a migration file name.', - 'writeError' => 'Error trying to create file.', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - -// 'toLatest' => 'Migrating to latest version...', - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => 'Invalid version number provided.', - 'toVersionPH' => 'Migrating to version %s...', - 'toVersion' => 'Migrating to current version...', - 'rollingBack' => 'Rolling back all migrations...', - 'noneFound' => 'No migrations were found.', - 'on' => 'Migrated On: ', - 'migSeeder' => 'Seeder name', - 'migMissingSeeder' => 'You must provide a seeder name.', - 'removed' => 'Rolling back: ', - 'added' => 'Running: ', - - 'version' => 'Version', - 'filename' => 'Filename', -]; \ No newline at end of file diff --git a/app/Language/fa/Number.php b/app/Language/fa/Number.php deleted file mode 100644 index 5b2f12cc..00000000 --- a/app/Language/fa/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' هزار', - 'million' => ' ملیون', - 'billion' => ' میلیارد', - 'trillion' => ' تریلیون', - 'quadrillion' => ' کوادریلیون', -]; \ No newline at end of file diff --git a/app/Language/fa/Pager.php b/app/Language/fa/Pager.php deleted file mode 100644 index 9721a3a1..00000000 --- a/app/Language/fa/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'ناوبری صفحه', - 'first' => 'اولین', - 'previous' => 'قبلی', - 'next' => 'بعدی', - 'last' => 'آخرین', - 'older' => 'قدیمی‌تر', - 'newer' => 'جدیدتر', - 'invalidTemplate' => '{0} قالب صفحه‌ی معتبری نیست.', - 'invalidPaginationGroup' => '{0} گروه ناوربری معتبری نیست.', -]; \ No newline at end of file diff --git a/app/Language/fa/RESTful.php b/app/Language/fa/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/fa/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/fa/Redirect.php b/app/Language/fa/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/fa/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/fa/Router.php b/app/Language/fa/Router.php deleted file mode 100644 index b74d8759..00000000 --- a/app/Language/fa/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'یک پارامتر با مقدار مورد انتظار تطابق ندارد.', - 'missingDefaultRoute' => 'امکان تشخیص محتوایی برای نمایش وجود ندارد. مسیر پیش فرض در فایل روتینگ مشخص نشده است.', -]; \ No newline at end of file diff --git a/app/Language/fa/Session.php b/app/Language/fa/Session.php deleted file mode 100644 index 8537496c..00000000 --- a/app/Language/fa/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - 'در هنگام استفاده از Database Session Handler، مقدار `sessionSavePath` باید باید برابر با نام جدول دیتابیس باشد.', - 'invalidSavePath' => 'Session: مسیر ذخیره سازی سشن: "{0}" یک فولدر معتبر نیست یا نمی تواند ایجاد شود.', - 'writeProtectedSavePath' => 'Session: مسیر ذخیره سازی سشن: "{0}" قابل نوشتن نیست.', - 'emptySavePath' => 'Session: مسیری برای سشن مشخص نشده است.', - 'invalidSavePathFormat' => 'Session: فرمت مسیر ذخیره سازی ردیس نامعتبر است: {0}', -]; \ No newline at end of file diff --git a/app/Language/fa/Time.php b/app/Language/fa/Time.php deleted file mode 100644 index 5975854f..00000000 --- a/app/Language/fa/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'ماه باید بین 1 تا 12 باشد. مقدار وارد شده: {0}', - 'invalidDay' => 'روز باید بین 1 تا 31 باشد. مقدار وارد شده: {0}', - 'invalidOverDay' => 'روز باید بین 1 تا {0} باشد. مقدار وارد شده: {1}', - 'invalidHours' => 'ساعت باید بین 0 تا 23 باشد. مقدار وارد شده: {0}', - 'invalidMinutes' => 'دقیقه باید بین 0 تا 59 باشد. مقدار وارد شده: {0}', - 'invalidSeconds' => 'ثانیه باید بین 0 تا 59 باشد. مقدار وارد شده: {0}', - 'years' => '{0, plural, =1{# سال} other{# سال}}', - 'months' => '{0, plural, =1{# ماه} other{# ماه}}', - 'weeks' => '{0, plural, =1{# هفته} other{# هفته}}', - 'days' => '{0, plural, =1{# روز} other{# روز}}', - 'hours' => '{0, plural, =1{# ساعت} other{# ساعت}}', - 'minutes' => '{0, plural, =1{# دقیقه} other{# دقیقه}}', - 'seconds' => '{0, plural, =1{# ثانیه} other{# ثانیه}}', - 'ago' => '{0} پیش', - 'inFuture' => 'در {0}', - 'yesterday' => 'دیروز', - 'tomorrow' => 'فردا', - 'now' => 'هیمن حالا', -]; \ No newline at end of file diff --git a/app/Language/fa/Validation.php b/app/Language/fa/Validation.php deleted file mode 100644 index 098ff10c..00000000 --- a/app/Language/fa/Validation.php +++ /dev/null @@ -1,91 +0,0 @@ - 'در تنظیمات اعتبارسنجی هیچ سری قانونی تعریف نشده است.', - 'ruleNotFound' => '{0} یک قانون معتبر نیست.', - 'groupNotFound' => '{0} یک گروه اعتبار سنجی نیست.', - 'groupNotArray' => 'گروه قانون {0} باید یک آرایه باشد.', - 'invalidTemplate' => '{0} قالب اعتبارسنجی درستی نیست.', - - // Rule Messages - 'alpha' => 'فیلد {field} فقط می‌تواند شامل اعداد انگلیسی و یا حروف باشد.', - 'alpha_dash' => 'فیلد {field} فقط می‌تواند شامل اعداد انگلیسی، حروف، خط تیره و آندرلاین باشد.', - 'alpha_numeric' => 'فیلد {field} فقط می‌تواند شامل اعداد انگلیسی و یا حروف باشد.', - 'alpha_numeric_space' => 'فیلد {field} فقط می‌تواند شامل اعداد انگلیسی، حروف و فاصله باشد.', - 'alpha_space' => 'فیلد {field} فقط می‌تواند شامل حروف و فاصله باشد.', - 'decimal' => 'فیلد {field} باید یک عدد اعشاری باشد.', - 'differs' => 'فیلد {field} باید با فیلد {param} متفاوت باشد.', - 'exact_length' => 'طول فیلد {field} باید دقیقا {param} کاراکتر باشد.', - 'greater_than' => 'فیلد {field} باید عددی بزرگتر از {param} باشد.', - 'greater_than_equal_to' => 'فیلد {field} باید عددی بزرگتر یا مساوی {param} باشد.', - 'in_list' => 'فیلد {field} باید یکی از این مقدارها باشد: {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'integer' => 'فیلد {field} باید یک عدد صحیح باشد.', - 'is_natural' => 'فیلد {field} فقط می‌تواند شامل ارقام باشد.', - 'is_natural_no_zero' => 'فیلد {field} باید عددی بزرگتر از صفر باشد.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'فیلد {field} باید مقداری یکتا داشته باشد.', - 'less_than' => 'فیلد {field} باید عددی کوچکتر از {param} باشد.', - 'less_than_equal_to' => 'فیلد {field} باید عددی کوکیتر یا مساوی {param} باشد.', - 'matches' => 'فیلد {field} با فیلد {param} همخوانی ندارد.', - 'max_length' => 'طول فیلد {field} نباید بیشتر از {param} کاراکتر باشد.', - 'min_length' => 'طول فیلد {field} باید حداقل {param} کاراکتر باشد.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'فیلد {field} باید یک عدد باشد.', - 'regex_match' => 'فرمت فیلد {field} رعایت نشده است.', - 'required' => 'فیلد {field} اجباری است.', - 'required_with' => 'وقتی {param} پر باشد، فیلد {field} اجباری است.', - 'required_without' => 'وقتی {param} پر نشده باشد، فیلد {field} اجباری است.', - 'timezone' => 'فیلد {field} باید یک منطقه‌ی زمانی صحیح باشد.', - 'valid_base64' => 'فیلد {field} باید یک رشته‌ی صحیح base64 باشد.', - 'valid_email' => 'فیلد {field} باید یک آدرس ای‌میل معتبر باشد.', - 'valid_emails' => 'تمام موارد {field} باید آدرس ای‌میل‌های معتبر باشند.', - 'valid_ip' => 'فیلد {field} باید یک IP معتبر باشد.', - 'valid_url' => 'فیلد {field} باید یک URL (آدرس اینترنتی) معتبر باشد.', - 'valid_date' => 'فیلد {field} باید یک تاریخ معتبر باشد.', - // Credit Cards - 'valid_cc_num' => '{field} یک شماره‌ی کارت اعتباری معتبر نیست.', - // Files - 'uploaded' => '{field} یک فایل آپلود شده‌ی معتبر نیست.', - 'max_size' => '{field} برای یک فایل، سایز خیلی بزرگ دارد.', - 'is_image' => '{field} یک عکس آپلود شده‌ی معتبر نیست.', - 'mime_in' => '{field} mime type معتبری ندارد.', - 'ext_in' => '{field} پسوند فایل معتبری ندارد.', - 'max_dims' => '{field} یا یک عکس صحیح نیست، یا عرض یا طول خیلی زیادی دارد.', -]; \ No newline at end of file diff --git a/app/Language/fa/View.php b/app/Language/fa/View.php deleted file mode 100644 index 41cfa6fe..00000000 --- a/app/Language/fa/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} تابع معتبری نیست.', - 'missingCellParameters' => '{class}::{method} پارامتری ندارد.', - 'invalidCellParameter' => '{0} نام پارامتر معتبری نیست.', - 'noCellClass' => 'No view cell class provided.', - 'invalidCellClass' => 'Unable to locate view cell class: {0}.', - 'tagSyntaxError' => 'You have a syntax error in your Parser tags: {0}', -]; \ No newline at end of file diff --git a/app/Language/fr/CLI.php b/app/Language/fr/CLI.php deleted file mode 100644 index d3535fc7..00000000 --- a/app/Language/fr/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Commande "{0}" untrouvable.', - 'helpUsage' => 'Utilisation :', - 'helpDescription' => 'Description :', - 'helpOptions' => 'Options :', - 'helpArguments' => 'Arguments :', - 'invalidColor' => 'Couleur {1} invalide : {0}.', -]; diff --git a/app/Language/fr/Cache.php b/app/Language/fr/Cache.php deleted file mode 100644 index c57b48bb..00000000 --- a/app/Language/fr/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => 'Cache config must have an array of $validHandlers.', - 'noBackup' => 'Cache config must have a handler and backupHandler set.', - 'handlerNotFound' => 'Cache config has an invalid handler or backup handler specified.', -]; diff --git a/app/Language/fr/Cast.php b/app/Language/fr/Cast.php deleted file mode 100644 index e5c2d291..00000000 --- a/app/Language/fr/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Unexpected control character found', - 'jsonErrorSyntax' => 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Unknown error', -]; diff --git a/app/Language/fr/Core.php b/app/Language/fr/Core.php deleted file mode 100644 index 5dd2405b..00000000 --- a/app/Language/fr/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Invalid file: {0}', - 'copyError' => 'An error was encountered while attempting to replace the file({0}). Please make sure your file directory is writable.', - 'missingExtension' => '{0} extension is not loaded.', - 'noHandlers' => '{0} must provide at least one Handler.', -]; diff --git a/app/Language/fr/Database.php b/app/Language/fr/Database.php deleted file mode 100644 index 1fba9b6c..00000000 --- a/app/Language/fr/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} is not a valid Model Event callback.', - 'invalidArgument' => 'You must provide a valid {0}.', - 'invalidAllowedFields' => 'Allowed fields must be specified for model: {0}', - 'emptyDataset' => 'There is no data to {0}.', - 'failGetFieldData' => 'Failed to get field data from database.', - 'failGetIndexData' => 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'Cette fonctionnalité n\'est pas disponible pour la base de données que vous utilisez.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/fr/Email.php b/app/Language/fr/Email.php deleted file mode 100644 index fa4e67af..00000000 --- a/app/Language/fr/Email.php +++ /dev/null @@ -1,60 +0,0 @@ - 'La méthode de validation de l\'email n\'accepte que les tableaux.', - 'invalidAddress' => 'Adresse email invalide : {0}', - 'attachmentMissing' => 'Impossible de localiser le ficher joint suivant : {0}', - 'attachmentUnreadable' => 'Impossible d\'ouvrir ce fichier joint : {0}', - 'noFrom' => 'Impossible d\'envoyer un email sans en-tête "From".', - 'noRecipients' => 'Vous devez spécifier des destinataires : To, Cc, ou Bcc', - 'sendFailurePHPMail' => 'Impossible d\'envoyer des emails avec la fonction mail() de PHP. Votre serveur n\'est peut-être pas configuré pour pouvoir utiliser cette méthode.', - 'sendFailureSendmail' => 'Impossible d\'envoyer des emails avec la méthode Sendmail de PHP. Votre serveur n\'est peut-être pas configuré pour pouvoir utiliser cette méthode.', - 'sendFailureSmtp' => 'Impossible d\'envoyer des emails avec la méthode SMTP de PHP. Votre serveur n\'est peut-être pas configuré pour pouvoir utiliser cette méthode.', - 'sent' => 'Votre message a bien été envoyé avec le protocole suivant : {0}', - 'noSocket' => 'Impossible d\'ouvrir un socket avec Sendmail. Veuillez vérifier la configuration de votre environnement.', - 'noHostname' => 'Vous n\'avez pas spécifié de nom d\'hôte SMTP.', - 'SMTPError' => 'L\'erreur SMTP suivante s\'est produite : {0}', - 'noSMTPAuth' => 'Erreur : Vous devez spécifier un nom d\'utilisateur et un mot de passe SMTP.', - 'failedSMTPLogin' => 'Échec lors de l\'envoi de la commande AUTH LOGIN. Erreur : {0}', - 'SMTPAuthUsername' => 'Impossible d\'identifier le nom d\'utilisateur. Erreur : {0}', - 'SMTPAuthPassword' => 'Impossible d\'identifier le mot de passe. Erreur : {0}', - 'SMTPDataFailure' => 'Impossible d\'envoyer les données : {0}', - 'exitStatus' => 'Code de retour : {0}', -]; diff --git a/app/Language/fr/Encryption.php b/app/Language/fr/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/fr/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/fr/Entity.php b/app/Language/fr/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/fr/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/fr/Files.php b/app/Language/fr/Files.php deleted file mode 100644 index a6a9ee82..00000000 --- a/app/Language/fr/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Fichier non trouvé : {0}', - 'cannotMove' => 'Impossible de déplacer le fichier {0} vers {1} ({2})', -// 'cannotCopy' => 'Impossible de copier vers {0} - vérifiez que votre répertoire est accessible en écriture', -]; diff --git a/app/Language/fr/Filters.php b/app/Language/fr/Filters.php deleted file mode 100644 index 8c08449a..00000000 --- a/app/Language/fr/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} filter must have a matching alias defined.', - 'incorrectInterface' => '{0} doit implémenter CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/fr/Format.php b/app/Language/fr/Format.php deleted file mode 100644 index 4bd4f997..00000000 --- a/app/Language/fr/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Failed to parse json string, error: "{0}".', - 'missingExtension' => 'The SimpleXML extension is required to format XML.', -]; diff --git a/app/Language/fr/HTTP.php b/app/Language/fr/HTTP.php deleted file mode 100644 index 658cf01d..00000000 --- a/app/Language/fr/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURL doit être activé pour utiliser la classe CURLRequest.', - 'invalidSSLKey' => 'Impossible de paramétrer la Clé SSL. {0} n\'est pas un fichier valide.', - 'sslCertNotFound' => 'Certificat SSL non trouvé : {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} is not a valid negotiation type. Must be one of: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Invalid HTTP Protocol Version. Must be one of: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'You must provide an array of supported values to all Negotiations.', - - // RedirectResponse - 'invalidRoute' => '{0} n\'est pas une route valide.', - - // DownloadResponse - 'cannotSetBinary' => 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'HTTP Response is missing a status code', - 'invalidStatusCode' => '{0} is not a valid HTTP return status code', - 'unknownStatusCode' => 'Unknown HTTP status code provided with no message: {0}', - - // URI - 'cannotParseURI' => 'Unable to parse URI: {0}', - 'segmentOutOfRange' => 'Request URI segment is our of range: {0}', - 'invalidPort' => 'Ports must be between 0 and 65535. Given: {0}', - 'malformedQueryString' => 'Query strings may not include URI fragments.', - - // Page Not Found - 'pageNotFound' => 'Page non trouvée', - 'emptyController' => 'Pas de contrôleur spécifié.', - 'controllerNotFound' => 'Le contrôleur ou sa méthode sont introuvables : {0}::{1}', - 'methodNotFound' => 'La méthode du contrôleur est introuvable : {0}', - - // CSRF - 'disallowedAction' => 'Votre demande n\'est pas autorisée.', - - // Uploaded file moving - 'alreadyMoved' => 'Le fichier uploadé a déjà été déplacé.', - 'invalidFile' => 'Le fichier original n\'est pas un fichier valide.', - 'moveFailed' => 'Impossible de déplacer le fichier {0} vers {1} ({2})', - - 'uploadErrOk' => 'The file uploaded with success.', - 'uploadErrIniSize' => 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => 'No file was uploaded.', - 'uploadErrCantWrite' => 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => 'The file "%s" was not uploaded due to an unknown error.', -]; diff --git a/app/Language/fr/Images.php b/app/Language/fr/Images.php deleted file mode 100644 index 57a1d6a3..00000000 --- a/app/Language/fr/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Vous devez spécifier une image source dans vos préférences.', - 'gdRequired' => 'La bibliothèque "GD image library" est nécessaire pour utiliser cette fonctionnalité.', - 'gdRequiredForProps' => 'Votre serveur doit supporter la bibliothèque "GD image library" afin de déterminer les propriétés de l\'image.', - 'gifNotSupported' => 'Les images GIF sont souvent non supportées du fait des restrictions de licence. Vous devrez peut-être utiliser des images JPG ou PNG à la place.', - 'jpgNotSupported' => 'Les images JPG ne sont pas supportées.', - 'pngNotSupported' => 'Les images PNG ne sont pas supportées.', - 'unsupportedImageCreate' => 'Votre serveur ne supporte pas la fonction GD nécessaire pour traiter ce type d\'image.', - 'jpgOrPngRequired' => 'Le protocole de redimensionnement d\'image spécifié dans vos préférences ne fonctionne qu\'avec les images de type JPEG ou PNG.', - 'rotateUnsupported' => 'La rotation d\'image ne semble pas être supportée par votre serveur.', - 'libPathInvalid' => 'Le chemin vers votre bibliothèque d\'image est incorrect. Veuillez paramétrer le chemin correct dans vos préférences image. {0, string)', - 'imageProcessFailed' => 'Échec du traitement de l\'image. Veuillez vérifier que votre serveur supporte le protocole choisi et que le chemin vers votre bibliothèque d\'image est correct.', - 'rotationAngleRequired' => 'Un angle de rotation est requis pour opérer une rotation de l\'image.', - 'invalidPath' => 'Le chemin vers l\'image est incorrect.', - 'copyFailed' => 'Échec durant la copie de l\'image.', - 'missingFont' => 'Impossible de trouver une police de caractéres à utiliser.', - 'saveFailed' => 'Impossible de sauvegarder l\'image. Veuillez vous assurer que l\'image et le répertoire de fichier ont les permissions en écriture.', - 'invalidDirection' => 'Seul un retournement `vertical` ou `horizontal` peut être effectué. Donné : {0}', - 'exifNotSupported' => 'La lecture des données EXIF n\'est pas supportée dans cette installation de PHP.', -]; diff --git a/app/Language/fr/Language.php b/app/Language/fr/Language.php deleted file mode 100644 index 8bbf082e..00000000 --- a/app/Language/fr/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line must be a string or array of strings.', -]; diff --git a/app/Language/fr/Log.php b/app/Language/fr/Log.php deleted file mode 100644 index 23f70714..00000000 --- a/app/Language/fr/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} est un niveau de log invalide.', -]; diff --git a/app/Language/fr/Migrations.php b/app/Language/fr/Migrations.php deleted file mode 100644 index ecb61647..00000000 --- a/app/Language/fr/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'La table des migrations doit être définie.', -// 'invalidType' => 'Type de numérotation de migration spécifié invalide: {0}', - 'disabled' => 'Les migrations ont été chargées mais sont désactivées ou mal paramétrées.', - 'notFound' => 'Fichier de migration non trouvé : ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Aucun fichier de migration trouvé', - 'gap' => 'Il y a un écart dans la séquence de migration du coté du numéro de version : ', - 'classNotFound' => 'La classe de migration "%s" n\'a pas pu être trouvée.', - 'missingMethod' => 'Il manque la méthode "%s" dans la classe de migration.', - - // Migration Command - 'migHelpLatest' => "\t\tMigre la base de données vers la dernière migration disponible.", - 'migHelpCurrent' => "\t\tMigre la base de données vers la version définie comme 'actuelle' dans la configuration.", - 'migHelpVersion' => "\tMigre la base de données vers la version {v}.", - 'migHelpRollback' => "\tLance toutes les migrations 'down' vers la version 0.", - 'migHelpRefresh' => "\t\tDésinstalle et relance toutes les migrations pour rafraîchir la base de données.", - 'migHelpSeed' => "\tLance le 'seeder' nommé [name].", - 'migCreate' => "\tCrée une nouvelle migration nommée [name]", - 'nameMigration' => 'Nomme le fichier de migration', - 'badCreateName' => 'Vous devez fournir un nom pour le fichier de migration.', - 'writeError' => 'Erreur durant la création du fichier.', - 'migNumberError' => 'Le numéro de migration doit comporter trois chiffres, et ne doit pas comporter de trous dans la séquence.', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', -// 'toLatest' => 'Migration vers la dernière version en cours...', - 'migInvalidVersion' => 'Numéro de version fourni invalide.', - 'toVersionPH' => 'Migration vers la version %s en cours...', - 'toVersion' => 'Migration vers la version actuelle en cours...', - 'rollingBack' => 'Roll back de toutes les migrations en cours...', - 'noneFound' => 'Aucune migration trouvée.', - 'on' => 'Migré sur : ', - 'migSeeder' => 'Nom du seeder', - 'migMissingSeeder' => 'Vous devez fournir un nom de seeder.', - 'removed' => 'Roll back en cours : ', - 'added' => 'Exécution en cours : ', - - 'version' => 'Version', - 'filename' => 'Nom de fichier', -]; diff --git a/app/Language/fr/Number.php b/app/Language/fr/Number.php deleted file mode 100644 index 1f4ec89d..00000000 --- a/app/Language/fr/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'To', - 'gigabyteAbbr' => 'Go', - 'megabyteAbbr' => 'Mo', - 'kilobyteAbbr' => 'Ko', - 'bytes' => 'Octets', - - // don't forget the space in front of these! - 'thousand' => ' millier', - 'million' => ' million', - 'billion' => ' milliard', - 'trillion' => ' billion', - 'quadrillion' => ' quadrillion', -]; diff --git a/app/Language/fr/Pager.php b/app/Language/fr/Pager.php deleted file mode 100644 index 614dbc6b..00000000 --- a/app/Language/fr/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Page de navigation', - 'first' => 'Premier', - 'previous' => 'Précédent', - 'next' => 'Suivant', - 'last' => 'Dernier', - 'older' => 'Plus ancien', - 'newer' => 'Plus récent', - 'invalidTemplate' => '{0} n\'est pas un template de pagination valide.', - 'invalidPaginationGroup' => '{0} n\'est pas un groupe de pagination valide.', -]; diff --git a/app/Language/fr/RESTful.php b/app/Language/fr/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/fr/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/fr/Redirect.php b/app/Language/fr/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/fr/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/fr/Router.php b/app/Language/fr/Router.php deleted file mode 100644 index 294833d4..00000000 --- a/app/Language/fr/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Un paramètre ne correspond pas au type attendu.', - 'missingDefaultRoute' => 'Impossible de déterminer ce qui doit être affiché. Aucune route par défaut n\'a été spécifiée dans le fichier de routage.', -]; diff --git a/app/Language/fr/Session.php b/app/Language/fr/Session.php deleted file mode 100644 index 8f3bf3f1..00000000 --- a/app/Language/fr/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` doit contenir le nom de la table pour que le gestionnaire de session de base de données puisse fonctionner.', - 'invalidSavePath' => 'Session : le chemin de sauvegarde configuré "{0}" n\'est pas un répertoire, n\'existe pas ou ne peut être créé.', - 'writeProtectedSavePath' => 'Session : le chemin de sauvegarde configuré "{0}" ne permet pas l\'écriture par le processus PHP.', - 'emptySavePath' => 'Session : aucun chemin de sauvegarde configuré.', - 'invalidSavePathFormat' => 'Session : format du chemin de sauvegarde Redis invalide : {0}', -]; diff --git a/app/Language/fr/Time.php b/app/Language/fr/Time.php deleted file mode 100644 index 4dd6e747..00000000 --- a/app/Language/fr/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Les mois doivent être entre 1 et 12. Déclaré : {0}', - 'invalidDay' => 'Les jours doivent être entre 1 et 31. Déclaré : {0}', - 'invalidOverDay' => 'Les jours doivent être entre 1 et {0}. Déclaré : {1}', - 'invalidHours' => 'Les heures doivent être entre 0 et 23. Déclaré : {0}', - 'invalidMinutes' => 'Les minutes doivent être entre 0 et 59. Déclaré : {0}', - 'invalidSeconds' => 'Les secondes doivent être entre 0 et 59. Déclaré : {0}', - 'years' => '{0, plural, =1{# année} other{# années}}', - 'months' => '{0, plural, =1{# mois} other{# mois}}', - 'weeks' => '{0, plural, =1{# semaine} other{# semaines}}', - 'days' => '{0, plural, =1{# jour} other{# jours}}', - 'hours' => '{0, plural, =1{# heure} other{# heures}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# seconde} other{# secondes}}', - 'ago' => 'depuis {0}', - 'inFuture' => 'dans {0}', - 'yesterday' => 'Hier', - 'tomorrow' => 'Demain', - 'now' => 'En ce moment', -]; diff --git a/app/Language/fr/Validation.php b/app/Language/fr/Validation.php deleted file mode 100644 index d0dd197f..00000000 --- a/app/Language/fr/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'No rulesets specified in Validation configuration.', - 'ruleNotFound' => '{0} n\'est pas une règle valide.', - 'groupNotFound' => '{0} n\'est pas un groupe de règles de validation.', - 'groupNotArray' => 'Le groupe de règles {0} doit être un tableau.', - 'invalidTemplate' => '{0} n\'est pas un modèle de Validation valide.', - - // Rule Messages - 'alpha' => 'Le champ {field} ne peut contenir que des caractères alphabétiques.', - 'alpha_dash' => 'Le champ {field} ne peut contenir que des caractères alphanumériques, des underscores, et des tirets.', - 'alpha_numeric' => 'Le champ {field} ne peut contenir que des caractères alphanumériques.', - 'alpha_numeric_space' => 'Le champ {field} ne peut contenir que des caractères alphanumériques et des espaces.', - 'alpha_space' => 'Le champ {field} ne peut contenir que des caractères alphabétiques et des espaces.', - 'decimal' => 'Le champ {field} doit contenir un nombre décimal.', - 'differs' => 'Le champ {field} doit être différent du champ {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'Le champ {field} doit avoir précisément {param} caractères de long.', - 'greater_than' => 'Le champ {field} doit contenir un nombre plus grand que {param}.', - 'greater_than_equal_to' => 'Le champ {field} doit être supérieur ou égal à {param}.', - 'in_list' => 'Le champ {field} doit être un élément de la liste suivante : {param}.', - 'hex' => 'Le champ {field} ne peut contenir que des caractères hexadécimaux.', - 'integer' => 'Le champ {field} doit contenir un nombre entier.', - 'is_natural' => 'Le champ {field} ne doit contenir que des chiffres.', - 'is_natural_no_zero' => 'Le champ {field} ne doit contenir que des chiffres et être supérieur à zéro.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Le champ {field} doit contenir une valeur unique.', - 'less_than' => 'Le champ {field} doit contenir un nombre inférieur à {param}.', - 'less_than_equal_to' => 'Le champ {field} doit contenir un nombre inférieur ou égal à {param}.', - 'matches' => 'Le champ {field} ne coïncide pas avec le champ {param}.', - 'max_length' => 'Le champ {field} ne peut pas dépasser une longueur de {param} caractères.', - 'min_length' => 'Le champ {field} doit contenir au moins {param} caractères.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'Le champ {field} ne doit contenir que des nombres.', - 'regex_match' => 'Le champ {field} n\'a pas le format attendu.', - 'required' => 'Le champ {field} est requis.', - 'required_with' => 'Le champ {field} est requis lorsque {param} est présent.', - 'required_without' => 'Le champ {field} est requis lorsque {param} n\'est pas présent.', - 'timezone' => 'Le champ {field} doit être un fuseau horaire valide.', - 'valid_base64' => 'Le champ {field} doit être une chaîne de caractères en base64 valide.', - 'valid_email' => 'Le champ {field} doit contenir une adresse email valide.', - 'valid_emails' => 'Le champ {field} doit contenir des adresses email valides.', - 'valid_ip' => 'Le champ {field} doit contenir une IP valide.', - 'valid_url' => 'Le champ {field} doit contenir une URL valide.', - 'valid_date' => 'Le champ {field} doit contenir une date valide.', - - // Credit Cards - 'valid_cc_num' => '{field} ne semble pas être un numéro de carte de crédit valide.', - - // Files - 'uploaded' => 'Le fichier envoyé {field} n\'est pas valide.', - 'max_size' => 'Le fichier {field} est trop volumineux.', - 'is_image' => 'Le fichier envoyé {field} n\'est pas une image valide.', - 'mime_in' => '{field} n\'a pas un type MIME valide.', - 'ext_in' => 'L\'extension du fichier {field} n\'est pas valide.', - 'max_dims' => 'Soit {field} n\'est pas une image, soit elle est trop haute ou trop large.', -]; diff --git a/app/Language/fr/View.php b/app/Language/fr/View.php deleted file mode 100644 index 0d24576c..00000000 --- a/app/Language/fr/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} n\'est pas une méthode valide.', - 'missingCellParameters' => '{class}::{method} n\'a pas de paramètres.', - 'invalidCellParameter' => '{0} n\'est pas un nom de paramètre valide.', - 'noCellClass' => 'Pas de class view cell fournie.', - 'invalidCellClass' => 'Impossible de localiser la class view cell: {0}.', - 'tagSyntaxError' => 'Il y a une erreur dans le tag Parser: {0}', -]; diff --git a/app/Language/id/CLI.php b/app/Language/id/CLI.php deleted file mode 100644 index 88aaa013..00000000 --- a/app/Language/id/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Perintah "{0}" tidak ditemukan.', - 'helpUsage' => 'Pemakaian:', - 'helpDescription' => 'Deskripsi:', - 'helpOptions' => 'Pilihan:', - 'helpArguments' => 'Argumen:', - 'invalidColor' => 'Warna {0} tidak valid: {1}.', -]; diff --git a/app/Language/id/Cache.php b/app/Language/id/Cache.php deleted file mode 100644 index 343bffba..00000000 --- a/app/Language/id/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Cache tidak bisa menulis pada {0}', - 'invalidHandlers' => 'Konfigurasi cache harus memiliki sebuah array dari $validHandlers.', - 'noBackup' => 'Konfigurasi cache harus memiliki sebuah set handler dan backupHandler.', - 'handlerNotFound' => 'Konfigurasi cache memiliki sebuah handler tidak valid atau handler cadangan yang ditentukan.', -]; diff --git a/app/Language/id/Cast.php b/app/Language/id/Cast.php deleted file mode 100644 index 37953256..00000000 --- a/app/Language/id/Cast.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Kedalaman tumpukan maksimum terlampaui', - 'jsonErrorStateMismatch' => 'Di bawah aliran atau mode tidak cocok', - 'jsonErrorCtrlChar' => 'Ditemukan karakter kontrol tak terduga', - 'jsonErrorSyntax' => 'Kesalahan sintaksis, JSON salah format', - 'jsonErrorUtf8' => 'Karakter UTF-8 salah bentuk, mungkin disandikan salah', - 'jsonErrorUnknown' => 'Kesalahan yang tidak diketahui', -]; diff --git a/app/Language/id/Core.php b/app/Language/id/Core.php deleted file mode 100644 index 8d1ab81f..00000000 --- a/app/Language/id/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Berkas tidak valid: {0}', - 'copyError' => 'Sebuah kesalahan terjadi saat mencoba mengganti berkas. Pastikan direktori berkas Anda dapat ditulis.', - 'missingExtension' => 'Ekstensi {0} tidak dimuat.', - 'noHandlers' => '{0} harus menyediakan setidaknya satu Handler.', -]; diff --git a/app/Language/id/Database.php b/app/Language/id/Database.php deleted file mode 100644 index e6c55a45..00000000 --- a/app/Language/id/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} bukan sebuah panggilan balik Model Event yang valid.', - 'invalidArgument' => 'Anda harus memberikan sebuah {0} yang valid.', - 'invalidAllowedFields' => 'Bidang yang diizinkan harus ditentukan untuk model: {0}', - 'emptyDataset' => 'Tidak ada data untuk {0}.', - 'failGetFieldData' => 'Gagal mengambil data bidang dari basis data.', - 'failGetIndexData' => 'Gagal mengambil data indeks dari basis data.', - 'failGetForeignKeyData' => 'Gagal mengambil data foreign key dari basis data.', - 'parseStringFail' => 'Gagal mengurai string kunci.', - 'featureUnavailable' => 'Fitur tidak tersedia untuk basis data yang Anda pakai.', - 'tableNotFound' => 'Tabel `{0}` tidak ditemukan pada basis data saat ini.', - 'noPrimaryKey' => 'Class model `{0}` belum menentukan sebuah Primary Key.', - 'noDateFormat' => 'Class model `{0}` tidak mempunyai dateFormat yang valid.', - 'fieldNotExists' => 'Bidang `{0}` tidak ditemukan.', - 'forEmptyInputGiven' => 'Pernyataan kosong diberikan untuk bidang `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Hanya satu kolom yang diizinkan dalam nama Kolom.', - ]; diff --git a/app/Language/id/Email.php b/app/Language/id/Email.php deleted file mode 100644 index e3f81dff..00000000 --- a/app/Language/id/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Metode validasi surel harus melewati sebuah array.', - 'invalidAddress' => 'Alamat surel tidak valid: {0}', - 'attachmentMissing' => 'Tidak dapat menemukan lampiran surel berikut: {0}', - 'attachmentUnreadable' => 'Tidak dapat membuka lampiran ini: {0}', - 'noFrom' => 'Tidak dapat mengirim surel tanpa kepala "Dari".', - 'noRecipients' => 'Anda harus menyertakan penerima: Kepada, Cc, or Bcc', - 'sendFailurePHPMail' => 'Tidak dapat mengirim surel menggunakan PHP mail(). Server Anda mungkin tidak dikonfigurasi untuk mengirim surel menggunakan metode ini.', - 'sendFailureSendmail' => 'Tidak dapat mengirim surel menggunakan PHP Sendmail. Server Anda mungkin tidak dikonfigurasi untuk mengirim surel menggunakan metode ini.', - 'sendFailureSmtp' => 'Tidak dapat mengirim surel menggunakan PHP SMTP. Server Anda mungkin tidak dikonfigurasi untuk mengirim surel menggunakan metode ini.', - 'sent' => 'Pesan Anda telah berhasil dikirim menggunakan protokol berikut: {0}', - 'noSocket' => 'Tidak dapat membuka sebuah soket ke Sendmail. Silakan periksa pengaturan.', - 'noHostname' => 'Anda tidak menentukan sebuah nama host SMTP.', - 'SMTPError' => 'Kesalahan SMTP berikut ditemukan: {0}', - 'noSMTPAuth' => 'Kesalahan: Anda harus menetapkan sebuah nama pengguna dan kata sandi SMTP.', - 'failedSMTPLogin' => 'Gagal mengirim perintah AUTH LOGIN. Kesalahan: {0}', - 'SMTPAuthUsername' => 'Gagal mengautentikasi nama pengguna. Kesalahan: {0}', - 'SMTPAuthPassword' => 'Gagal mengautentikasi kata sandi. Kesalahan: {0}', - 'SMTPDataFailure' => 'Tidak dapat mengirim data: {0}', - 'exitStatus' => 'Kode status keluar: {0}', -]; diff --git a/app/Language/id/Encryption.php b/app/Language/id/Encryption.php deleted file mode 100644 index 662f1e2d..00000000 --- a/app/Language/id/Encryption.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Tidak ada driver yang diminta; ', - 'noHandlerAvailable' => 'Tidak dapat menemukan penangan enkripsi {0} yang tersedia.', - 'unKnownHandler' => '"{0}" tidak dapat dikonfigurasi.', - 'starterKeyNeeded' => 'Encrypter membutuhkan kunci starter.', - 'authenticationFailed' => 'Dekripsi: otentikasi gagal.', - 'encryptionFailed' => 'Enkripsi gagal.', -]; diff --git a/app/Language/id/Entity.php b/app/Language/id/Entity.php deleted file mode 100644 index f01dece8..00000000 --- a/app/Language/id/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Mencoba mengakses properti yang tidak ada {0} dari {1}', -]; diff --git a/app/Language/id/Files.php b/app/Language/id/Files.php deleted file mode 100644 index 770360f0..00000000 --- a/app/Language/id/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Berkas tidak ditemukan: {0}', - 'cannotMove' => 'Tidak dapat memindahkan berkas {0} ke {1} ({2})', -// 'invalidFilename' => 'Nama berkas target tidak ada atau tidak valid: {0}', -// 'cannotCopy' => 'Tidak dapat menyalin ke {0} - pastikan folder bisa ditulis', -]; diff --git a/app/Language/id/Filters.php b/app/Language/id/Filters.php deleted file mode 100644 index 6b5c4bef..00000000 --- a/app/Language/id/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Filter \'{0}\' harus memiliki sebuah alias sesuai yang ditentukan.', - 'incorrectInterface' => '{0} harus menerapkan CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/id/Format.php b/app/Language/id/Format.php deleted file mode 100644 index ba816345..00000000 --- a/app/Language/id/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Gagal menguraikan string json, kesalahan: "{0}".', - 'missingExtension' => 'Ekstensi SimpleXML diperlukan untuk memformat XML.', -]; diff --git a/app/Language/id/HTTP.php b/app/Language/id/HTTP.php deleted file mode 100644 index 8bbffc8a..00000000 --- a/app/Language/id/HTTP.php +++ /dev/null @@ -1,99 +0,0 @@ - 'CURL harus diaktifkan untuk menggunakan kelas CURLRequest.', - 'invalidSSLKey' => 'Tidak dapat mengatur Kunci SSL. {0} bukan sebuah berkas yang valid.', - 'sslCertNotFound' => 'Sertifikat SSL tidak ditemukan di: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} bukan sebuah jenis negosiasi yang valid. Harus salah satu: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Versi Protokol HTTP Tidak Valid. Harus salah satu: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Anda harus memberikan sebuah array dari nilai yang didukung untuk semua Negosiasi.', - - // RedirectResponse - 'invalidRoute' => '{0} bukan sebuah rute yang valid.', - - // DownloadResponse - 'cannotSetBinary' => 'Saat mengatur filepath, tidak dapat mengatur binary.', - 'cannotSetFilepath' => 'Saat mengatur binary, tidak dapat mengatur filepath: {0}', - 'notFoundDownloadSource' => 'Tidak ditemukan badan sumber unduhan.', - 'cannotSetCache' => 'Itu tidak mendukung cache untuk mengunduh.', - 'cannotSetStatusCode' => 'Itu tidak mendukung perubahan kode status untuk mengunduh. kode: {0}, alasan: {1}', - - // Response - 'missingResponseStatus' => 'Tanggapan HTTP kehilangan sebuah kode status', - 'invalidStatusCode' => '{0} bukan sebuah kode status pengembalian HTTP yang valid', - 'unknownStatusCode' => 'Kode status HTTP tidak dikenal diberikan tanpa pesan: {0}', - - // URI - 'cannotParseURI' => 'Tidak dapat mengurai URI: {0}', - 'segmentOutOfRange' => 'Permintaan segmen URI berada di luar jangkauan: {0}', - 'invalidPort' => 'Port harus antara 0 dan 65535. Diberikan: {0}', - 'malformedQueryString' => 'String kueri tidak boleh menyertakan fragmen URI.', - - // Page Not Found - 'pageNotFound' => 'Halaman Tidak Ditemukan', - 'emptyController' => 'Tidak ada Controller yang ditentukan.', - 'controllerNotFound' => 'Controller atau metodenya tidak ditemukan: {0}::{1}', - 'methodNotFound' => 'Metode controller tidak ditemukan: {0}', - - // CSRF - 'disallowedAction' => 'Tindakan yang Anda minta tidak diizinkan.', - - // Uploaded file moving - 'alreadyMoved' => 'Berkas yang diunggah telah dipindahkan.', - 'invalidFile' => 'Berkas asli tersebut bukan berkas yang valid.', - 'moveFailed' => 'Tidak dapat memindahkan berkas {0} ke {1} ({2})', - - 'uploadErrOk' => 'Berkas berhasil diunggah.', - 'uploadErrIniSize' => 'Berkas "%s" melampaui pengaturan upload_max_filesize Anda.', - 'uploadErrFormSize' => 'Berkas "%s" melampaui batas unggahan yang ditentukan pada formulir Anda.', - 'uploadErrPartial' => 'Berkas "%s" hanya sebagian yang terunggah.', - 'uploadErrNoFile' => 'Tidak ada berkas yang terunggah.', - 'uploadErrCantWrite' => 'Berkas "%s" tidak dapat ditulis pada diska.', - 'uploadErrNoTmpDir' => 'Berkas tidak dapat diunggah: direktori sementara tidak ditemukan.', - 'uploadErrExtension' => 'Unggahan berkas dihentikan oleh ekstensi PHP.', - 'uploadErrUnknown' => 'Berkas "%s" tidak terunggah karena kesalahan yang tidak diketahui.', -]; diff --git a/app/Language/id/Images.php b/app/Language/id/Images.php deleted file mode 100644 index ea4f0557..00000000 --- a/app/Language/id/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Anda harus menentukan sebuah sumber gambar dalam preferensi Anda.', - 'gdRequired' => 'Pustaka gambar GD diperlukan untuk menggunakan fitur ini....', - 'gdRequiredForProps' => 'Server Anda harus mendukung pustaka gambar GD untuk menentukan properti gambar.', - 'gifNotSupported' => 'Gambar GIF sering tidak didukung karena pembatasan perizinan. Anda mungkin harus menggunakan gambar JPG atau PNG sebagai gantinya.', - 'jpgNotSupported' => 'Gambar JPG tidak didukung.', - 'pngNotSupported' => 'Gambar PNG tidak didukung.', - 'unsupportedImageCreate' => 'Server Anda tidak mendukung fungsi GD yang diperlukan untuk memproses jenis gambar ini.', - 'jpgOrPngRequired' => 'Protokol pengubahan ukuran gambar yang ditentukan dalam preferensi Anda hanya berfungsi dengan jenis gambar JPEG atau PNG.', - 'rotateUnsupported' => 'Rotasi gambar sepertinya tidak didukung oleh server Anda.', - 'libPathInvalid' => 'Jalur ke pustaka gambar Anda tidak benar. Silakan mengatur jalur yang benar dalam preferensi gambar Anda. {0, string)', - 'imageProcessFailed' => 'Pemrosesan gambar gagal. Harap verifikasi bahwa server Anda mendukung protokol yang dipilih dan jalur ke pustaka gambar Anda sudah benar.', - 'rotationAngleRequired' => 'Sudut rotasi diperlukan untuk memutar gambar.', - 'invalidPath' => 'Jalur menuju gambar tidak benar.', - 'copyFailed' => 'Salinan gambar gagal.', - 'missingFont' => 'Tidak dapat menemukan sebuah huruf untuk digunakan.', - 'saveFailed' => 'Tidak dapat menyimpan gambar. Pastikan gambar dan direktori berkas dapat ditulis.', - 'invalidDirection' => 'Arah balik hanya bisa `vertical` atau `horizontal`. Diberikan: {0}', - 'exifNotSupported' => 'Membaca data EXIF tidak didukung oleh instalasi PHP ini.', -]; diff --git a/app/Language/id/Language.php b/app/Language/id/Language.php deleted file mode 100644 index 15281f44..00000000 --- a/app/Language/id/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'Get line harus berupa sebuah string atau array string.' -]; diff --git a/app/Language/id/Log.php b/app/Language/id/Log.php deleted file mode 100644 index c404616f..00000000 --- a/app/Language/id/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} adalah sebuah level log yang tidak valid.', -]; diff --git a/app/Language/id/Migrations.php b/app/Language/id/Migrations.php deleted file mode 100644 index e728cfff..00000000 --- a/app/Language/id/Migrations.php +++ /dev/null @@ -1,80 +0,0 @@ - 'Tabel migrasi harus diatur.', -// 'invalidType' => 'Jenis penomoran migrasi tidak valid telah ditentukan: {0}', - 'disabled' => 'Migrasi telah dimuat tetapi dinonaktifkan atau pengaturan salah.', - 'notFound' => 'Berkas migrasi tidak ditemukan: ', - 'batchNotFound' => 'Sejumlah target tidak ditemukan: ', - 'empty' => 'Tidak ditemukan berkas Migrasi', - 'gap' => 'Ada sebuah celah dalam urutan migrasi dekat nomor versi: ', - 'classNotFound' => 'Kelas migrasi "%s" tidak dapat ditemukan.', - 'missingMethod' => 'Kelas migrasi kehilangan metode "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigrasi basis data ke migrasi terbaru yang tersedia.", - 'migHelpCurrent' => "\t\tMigrasi basis data ke versi yang ditetapkan sebagai 'saat ini' dalam konfigurasi.", - 'migHelpVersion' => "\tMigrasi basis data ke versi {v}.", - 'migHelpRollback' => "\tMenjalankan semua migrasi 'turun' ke versi 0.", - 'migHelpRefresh' => "\t\tUninstal dan jalankan kembali semua migrasi untuk menyegarkan basis data.", - 'migHelpSeed' => "\tMenjalankan seeder bernama [name].", - 'migCreate' => "\tMenciptakan sebuah nama migrasi baru bernama [name]", - 'nameMigration' => 'Beri nama berkas migrasi', - 'badCreateName' => 'Anda harus memberikan sebuah nama berkas migrasi.', - 'writeError' => 'Kesalahan saat mencoba membuat berkas.', - 'migNumberError' => 'Nomor migrasi harus tiga digit dan tidak boleh ada jarak pada urutan.', - - 'latest' => 'Menjalankan semua migrasi baru...', - 'generalFault' => 'Migrasi gagal!', -// 'toLatest' => 'Migrasi ke versi terbaru...', - 'migInvalidVersion' => 'Nomor versi tidak valid diberikan.', - 'toVersionPH' => 'Migrasi ke versi %s...', - 'toVersion' => 'Migrasi ke versi saat ini...', - 'rollingBack' => 'Mengembalikan semua migrasi...', - 'noneFound' => 'Tidak ada migrasi yang ditemukan.', - 'on' => 'Dimigrasi Pada: ', - 'migSeeder' => 'Nama seeder', - 'migMissingSeeder' => 'Anda harus memberikan sebuah nama seeder.', - 'removed' => 'Mengembalikan: ', - 'added' => 'Berjalan: ', - - 'version' => 'Versi', - 'filename' => 'Nama berkas', -]; diff --git a/app/Language/id/Number.php b/app/Language/id/Number.php deleted file mode 100644 index 5c2f9931..00000000 --- a/app/Language/id/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' ribu', - 'million' => ' juta', - 'billion' => ' milyar', - 'trillion' => ' triliun', - 'quadrillion' => ' kuadriliun', -]; diff --git a/app/Language/id/Pager.php b/app/Language/id/Pager.php deleted file mode 100644 index bb27ac85..00000000 --- a/app/Language/id/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Navigasi halaman', - 'first' => 'Pertama', - 'previous' => 'Sebelumnya', - 'next' => 'Berikutnya', - 'last' => 'Terakhir', - 'older' => 'Lebih lama', - 'newer' => 'Lebih baru', - 'invalidTemplate' => '{0} bukan sebuah template Pager yang valid.', - 'invalidPaginationGroup' => '{0} bukan sebuah grup Pagination yang valid.', -]; diff --git a/app/Language/id/RESTful.php b/app/Language/id/RESTful.php deleted file mode 100644 index 0f410fd9..00000000 --- a/app/Language/id/RESTful.php +++ /dev/null @@ -1,42 +0,0 @@ - '"{0}"-tindakan tidak dilaksanakan.', -]; diff --git a/app/Language/id/Redirect.php b/app/Language/id/Redirect.php deleted file mode 100644 index ee86cb0c..00000000 --- a/app/Language/id/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Tidak dapat mengalihkan ke "{0}". Kode status kesalahan "{1}"', -]; diff --git a/app/Language/id/Router.php b/app/Language/id/Router.php deleted file mode 100644 index c5fe7018..00000000 --- a/app/Language/id/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Sebuah parameter tidak cocok dengan tipe yang diharapkan.', - 'missingDefaultRoute' => 'Tidak dapat menentukan apa yang harus ditampilkan. Sebuah rute default belum ditentukan dalam berkas routing.', -]; diff --git a/app/Language/id/Session.php b/app/Language/id/Session.php deleted file mode 100644 index 9910a890..00000000 --- a/app/Language/id/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` harus memiliki nama tabel untuk Handler Sesi Basis Data agar bekerja.', - 'invalidSavePath' => 'Sesi: Jalur penyimpanan terkonfigurasi "{0}" bukan sebuah direktori, tidak ada atau tidak dapat dibuat.', - 'writeProtectedSavePath' => 'Sesi: Jalur penyimpanan terkonfigurasi "{0}" tidak dapat ditulis oleh proses PHP.', - 'emptySavePath' => 'Sesi: Tidak ada jalur penyimpanan yang dikonfigurasi.', - 'invalidSavePathFormat' => 'Sesi: Format jalur penyimpanan Redis tidak valid: {0}', -]; diff --git a/app/Language/id/Time.php b/app/Language/id/Time.php deleted file mode 100644 index 41b77990..00000000 --- a/app/Language/id/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Bulan harus antara 1 dan 12. Diberikan: {0}', - 'invalidDay' => 'Hari harus antara 1 dan 31. Diberikan: {0}', - 'invalidOverDay' => 'Hari harus antara 1 dan {0}. Diberikan: {1}', - 'invalidHours' => 'Jam harus antara 0 dan 23. Diberikan: {0}', - 'invalidMinutes' => 'Menit harus di antara 0 dan 59. Diberikan: {0}', - 'invalidSeconds' => 'Detik harus antara 0 dan 59. Diberikan: {0}', - 'years' => '{0, plural, =1{# tahun} other{# tahun}}', - 'months' => '{0, plural, =1{# bulan} other{# bulan}}', - 'weeks' => '{0, plural, =1{# pekan} other{# pekan}}', - 'days' => '{0, plural, =1{# hari} other{# hari}}', - 'hours' => '{0, plural, =1{# jam} other{# jam}}', - 'minutes' => '{0, plural, =1{# menit} other{# menit}}', - 'seconds' => '{0, plural, =1{# detik} other{# detik}}', - 'ago' => '{0} lalu', - 'inFuture' => 'di {0}', - 'yesterday' => 'Kemarin', - 'tomorrow' => 'Besok', - 'now' => 'Baru saja', -]; diff --git a/app/Language/id/Validation.php b/app/Language/id/Validation.php deleted file mode 100644 index 5a9f37b9..00000000 --- a/app/Language/id/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'Tidak ada aturan yang ditentukan dalam konfigurasi Validasi.', - 'ruleNotFound' => '{0} bukan sebuah aturan yang valid.', - 'groupNotFound' => '{0} bukan sebuah grup aturan validasi.', - 'groupNotArray' => '{0} grup aturan harus berupa sebuah array.', - 'invalidTemplate' => '{0} bukan sebuah template Validasi yang valid.', - - // Rule Messages - 'alpha' => 'Bidang {field} hanya boleh mengandung karakter alfabet.', - 'alpha_dash' => 'Bidang {field} hanya boleh berisi karakter alfanumerik, setrip bawah, dan tanda pisah.', - 'alpha_numeric' => 'Bidang {field} hanya boleh berisi karakter alfanumerik.', - 'alpha_numeric_space' => 'Bidang {field} hanya boleh berisi karakter alfanumerik dan spasi.', - 'alpha_space' => 'Bidang {field} hanya boleh berisi karakter alfabet dan spasi.', - 'decimal' => 'Bidang {field} harus mengandung sebuah angka desimal.', - 'differs' => 'Bidang {field} harus berbeda dari bidang {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'Bidang {field} harus tepat {param} panjang karakter.', - 'greater_than' => 'Bidang {field} harus berisi sebuah angka yang lebih besar dari {param}.', - 'greater_than_equal_to' => 'Bidang {field} harus berisi sebuah angka yang lebih besar atau sama dengan {param}.', - 'in_list' => 'Bidang {field} harus salah satu dari: {param}.', - 'integer' => 'Bidang {field} harus mengandung bilangan bulat.', - 'is_natural' => 'Bidang {field} hanya boleh berisi angka.', - 'is_natural_no_zero' => 'Bidang {field} hanya boleh berisi angka dan harus lebih besar dari nol.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Bidang {field} harus mengandung sebuah nilai unik.', - 'less_than' => 'Bidang {field} harus berisi sebuah angka yang kurang dari {param}.', - 'less_than_equal_to' => 'Bidang {field} harus berisi sebuah angka yang kurang dari atau sama dengan {param}.', - 'matches' => 'Bidang {field} tidak cocok dengan bidang {param}.', - 'max_length' => 'Bidang {field} tidak bisa melebihi {param} panjang karakter.', - 'min_length' => 'Bidang {field} setidaknya harus {param} panjang karakter.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'Bidang {field} hanya boleh mengandung angka.', - 'regex_match' => 'Bidang {field} tidak dalam format yang benar.', - 'required' => 'Bidang {field} diperlukan.', - 'required_with' => 'Bidang {field} diperlukan saat {param} hadir.', - 'required_without' => 'Bidang {field} diperlukan saat {param} tidak hadir.', - 'timezone' => 'Bidang {field} harus berupa sebuah zona waktu yang valid.', - 'valid_base64' => 'Bidang {field} harus berupa sebuah string base64 yang valid.', - 'valid_email' => 'Bidang {field} harus berisi sebuah alamat email yang valid.', - 'valid_emails' => 'Bidang {field} harus berisi semua alamat email yang valid.', - 'valid_ip' => 'Bidang {field} harus berisi sebuah IP yang valid.', - 'valid_url' => 'Bidang {field} harus berisi sebuah URL yang valid.', - 'valid_date' => 'Bidang {field} harus berisi sebuah tanggal yang valid.', - - // Credit Cards - 'valid_cc_num' => '{field} tidak tampak sebagai sebuah nomor kartu kredit yang valid.', - - // Files - 'uploaded' => '{field} bukan sebuah berkas diunggah yang valid.', - 'max_size' => '{field} terlalu besar dari sebuah berkas.', - 'is_image' => '{field} bukan berkas gambar diunggah yang valid.', - 'mime_in' => '{field} tidak memiliki sebuah tipe mime yang valid.', - 'ext_in' => '{field} tidak memiliki sebuah ekstensi berkas yang valid.', - 'max_dims' => '{field} bukan gambar, atau terlalu lebar atau tinggi.', -]; diff --git a/app/Language/id/View.php b/app/Language/id/View.php deleted file mode 100644 index 88aaa6b9..00000000 --- a/app/Language/id/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} bukan sebuah metode yang valid.', - 'missingCellParameters' => '{class}::{method} tidak memiliki parameter.', - 'invalidCellParameter' => '{0} bukan sebuah nama parameter yang valid.', - 'noCellClass' => 'Tidak ada kelas view cell yang disediakan.', - 'invalidCellClass' => 'Tidak dapat menemukan kelas view cell: {0}.', - 'tagSyntaxError' => 'Anda memiliki sebuah kesalahan sintaks di tag Parser Anda: {0}', -]; diff --git a/app/Language/it/CLI.php b/app/Language/it/CLI.php deleted file mode 100644 index d099506b..00000000 --- a/app/Language/it/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Command "{0}" not found.', - 'helpUsage' => 'Uso:', - 'helpDescription' => 'Descrizione:', - 'helpOptions' => 'Opzioni:', - 'helpArguments' => 'Argomenti:', - 'invalidColor' => 'Colore {0} non valido: {1}.', -]; diff --git a/app/Language/it/Cache.php b/app/Language/it/Cache.php deleted file mode 100644 index f5afbc01..00000000 --- a/app/Language/it/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => 'La configurazione della Cache deve avere un array di $validHandlers.', - 'noBackup' => 'La configurazione della Cache deve avere un set Gestore e un Gestore di backup.', - 'handlerNotFound' => 'Nella configurazione della Cache è indicato un Gestore o un Gestore di backup non valido.', -]; diff --git a/app/Language/it/Cast.php b/app/Language/it/Cast.php deleted file mode 100644 index e5c2d291..00000000 --- a/app/Language/it/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Unexpected control character found', - 'jsonErrorSyntax' => 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Unknown error', -]; diff --git a/app/Language/it/Core.php b/app/Language/it/Core.php deleted file mode 100644 index 0ec8218e..00000000 --- a/app/Language/it/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Non valido il file: {0}', - 'copyError' => 'Riscontrato un errore nel tentativo di riposizionare il file. Si prega di assicurarsi che la cartella dei file sia scrivibile.', - 'missingExtension' => '{0} estensione non è caricata.', - 'noHandlers' => '{0} deve prevedere almeno un Gestore.', -]; diff --git a/app/Language/it/Database.php b/app/Language/it/Database.php deleted file mode 100644 index 691fee57..00000000 --- a/app/Language/it/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} non è una valida chiamata dell\'evento del Model.', - 'invalidArgument' => 'Devi fornire un valido {0}.', - 'invalidAllowedFields' => 'I campi autorizzati devono essere specificati per il model: {0}', - 'emptyDataset' => 'Nessun dato presente in {0}.', - 'failGetFieldData' => 'Failed to get field data from database.', - 'failGetIndexData' => 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'This feature is not available for the database you are using.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/it/Datatables.php b/app/Language/it/Datatables.php deleted file mode 100644 index 93da1682..00000000 --- a/app/Language/it/Datatables.php +++ /dev/null @@ -1,27 +0,0 @@ - '{ - "sEmptyTable": "Nessun dato presente nella tabella", - "sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi", - "sInfoEmpty": "Vista da 0 a 0 di 0 elementi", - "sInfoFiltered": "(filtrati da _MAX_ elementi totali)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Visualizza _MENU_ elementi", - "sLoadingRecords": "Caricamento...", - "sProcessing": "Elaborazione...", - "sSearch": "Cerca:", - "sZeroRecords": "La ricerca non ha portato alcun risultato.", - "oPaginate": { - "sFirst": "Inizio", - "sPrevious": "Precedente", - "sNext": "Successivo", - "sLast": "Fine" - }, - "oAria": { - "sSortAscending": ": attiva per ordinare la colonna in ordine crescente", - "sSortDescending": ": attiva per ordinare la colonna in ordine decrescente" - } -}' - -]; diff --git a/app/Language/it/Email.php b/app/Language/it/Email.php deleted file mode 100644 index e8c995e2..00000000 --- a/app/Language/it/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Il metodo di validazione della email deve essere passato come array.', - 'invalidAddress' => 'Indirizzo email non valido: {0}', - 'attachmentMissing' => 'Non è stato possibile trovare il seguente allegato alla email: {0}', - 'attachmentUnreadable' => 'Impossibile aprire questo allegato: {0}', - 'noFrom' => 'Non si può inviare una mail senza "Da" nella intestazione.', - 'noRecipients' => 'Devi inserire i destinatari: A, Cc, o Ccn', - 'sendFailurePHPMail' => 'Impossibile inviare email usando PHP mail(). Il tuo server potrebbe non essere configurato per inviare email usando questo methodo.', - 'sendFailureSendmail' => 'Impossibile inviare email usando PHP Sendmail. Il tuo server potrebbe non essere configurato per inviare email usando questo methodo.', - 'sendFailureSmtp' => 'Impossibile inviare email usando PHP SMTP. Il tuo server potrebbe non essere configurato per inviare email usando questo methodo.', - 'sent' => 'Il tuo messaggio è stato inviato con successo utilizzando il seguente protocollo: {0}', - 'noSocket' => 'Non possibile aprire un socket a Sendmail. Prego verifica le configurazioni.', - 'noHostname' => 'Non hai specificato alcun hostname SMTP.', - 'SMTPError' => 'Si è verificato il seguente errore SMTP: {0}', - 'noSMTPAuth' => 'Errore: devi indicare uno username e una password per SMTP.', - 'failedSMTPLogin' => 'Fallito l\'invio del comando AUTH LOGIN. Errore: {0}', - 'SMTPAuthUsername' => 'Fallita l\'autenticazione dello username. Errore: {0}', - 'SMTPAuthPassword' => 'Fallita l\'autenticazione della password. Errore: {0}', - 'SMTPDataFailure' => 'Impossibile inviare i dati: {0}', - 'exitStatus' => 'Codice dello stato di uscita: {0}', -]; diff --git a/app/Language/it/Encryption.php b/app/Language/it/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/it/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/it/Entity.php b/app/Language/it/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/it/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/it/Files.php b/app/Language/it/Files.php deleted file mode 100644 index 47c9bbb8..00000000 --- a/app/Language/it/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'File non trovato: {0}', - 'cannotMove' => 'Non è possibile spostare il file {0} in {1} ({2})', -// 'invalidFilename' => 'Il nome del file di riferimento manca o non è valido: {0}', -// 'cannotCopy' => 'Non è possibile copiare in {0} - assicurati che la cartella sia scrivibile', -]; diff --git a/app/Language/it/Filters.php b/app/Language/it/Filters.php deleted file mode 100644 index 17335bac..00000000 --- a/app/Language/it/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - '\'{0}\' il filtro deve avere un alias di riferimento definito.', - 'incorrectInterface' => '{0} deve implementare CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/it/Format.php b/app/Language/it/Format.php deleted file mode 100644 index 6c53d212..00000000 --- a/app/Language/it/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Fallita l\'elaborazione della stringa json, errore: "{0}".', - 'missingExtension' => 'L\'estensione SimpleXML è richiesta per il formato XML.', -]; diff --git a/app/Language/it/HTTP.php b/app/Language/it/HTTP.php deleted file mode 100644 index cbfa59b3..00000000 --- a/app/Language/it/HTTP.php +++ /dev/null @@ -1,99 +0,0 @@ - 'CURL deve essere abilitato per usare la classe CURLRequest.', - 'invalidSSLKey' => 'Non si riesce ad utilizzare la chiave SSL. {0} non è un file valido.', - 'sslCertNotFound' => 'Il certificato SSL non è stato trovato in: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} non è un tipo di negoziazione valido. Deve essere uno fra questi: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Versione del Protocollo HTTP non valida. Deve essere uno di: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Devi fornire un array di valori supportati a tutte le Negoziazioni.', - - // RedirectResponse - 'invalidRoute' => '{0} non è un percorso valido.', - - // DownloadResponse - 'cannotSetBinary' => 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'Alla risposta HTTP manca un codice di stato', - 'invalidStatusCode' => '{0} non è un valido codice di stato di ritorno da HTTP', - 'unknownStatusCode' => 'Codice di stato HTTP sconosciuto consegnato senza messaggi: {0}', - - // URI - 'cannotParseURI' => 'Impossibile elaborare URI: {0}', - 'segmentOutOfRange' => 'Il richiesto segmento URI è fuori limiti: {0}', - 'invalidPort' => 'Le porte devono essere fra 0 e 65535. Indicato: {0}', - 'malformedQueryString' => 'Le stringhe di richiesta non possono includere frammenti URI.', - - // Page Not Found - 'pageNotFound' => 'Pagina non trovata', - 'emptyController' => 'Nessun Controller specificato.', - 'controllerNotFound' => 'Il Controller o il suo metodo non è stato trovato: {0}::{1}', - 'methodNotFound' => 'Il metodo del Controller non è stato trovato: {0}', - - // CSRF - 'disallowedAction' => 'L\'azione richiesta non è permessa.', - - // Uploaded file moving - 'alreadyMoved' => 'Il file uploadato è già stato spostato.', - 'invalidFile' => 'Il file originale non è un file valido.', - 'moveFailed' => 'Non si può spostare il file {0} verso {1} ({2})', - - 'uploadErrOk' => 'The file uploaded with success.', - 'uploadErrIniSize' => 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => 'No file was uploaded.', - 'uploadErrCantWrite' => 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => 'The file "%s" was not uploaded due to an unknown error.', - ]; diff --git a/app/Language/it/Images.php b/app/Language/it/Images.php deleted file mode 100644 index 40a97f8d..00000000 --- a/app/Language/it/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Devi specificare una sorgente immagine nelle tue preferenze.', - 'gdRequired' => 'La libreria GD di gestione immagini è richiesta per poter utilizzare questa caratteristica.', - 'gdRequiredForProps' => 'Il tuo server deve supportare la libreria GD di gestione immagini per determinare le proprietà dell\'immagine.', - 'gifNotSupported' => 'Le immagini GIF spesso non sono supportate a causa delle restrizioni di licenza. Potresti, invece, dover usare immagini JPG or PNG.', - 'jpgNotSupported' => 'Immagini JPG non sono supportate.', - 'pngNotSupported' => 'Immagini PNG non sono supportate.', - 'unsupportedImageCreate' => 'Il tuo server non supporta la funzione GD richiesta per processare questo tipo di immagine.', - 'jpgOrPngRequired' => 'Il protocollo di ridimensionamento dell\'immagine specificato nelle tue preferenze funziona solo con i tipi di immagine JPEG o PNG.', - 'rotateUnsupported' => 'La rotazione dell\'immagine sembra non essere supportata dal tuo server.', - 'libPathInvalid' => 'Il percorso della tua libreria di gestione immagini non è corretto. Si prega di indicare il persorso corretto nelle tue preferenze immagine. {0, string)', - 'imageProcessFailed' => 'Elaborazione dell\'immagine fallita. Per favore verifica che il tuo server supporti il protocollo scelto e che il percorso della tua libreria di gestione immagini sia corretto.', - 'rotationAngleRequired' => 'Un angolo di rotazione è richiesto per ruotare l\'immagine.', - 'invalidPath' => 'Il percorso dell\'immagine non è corretto.', - 'copyFailed' => 'L\'esecuzione del lavoro di copia dell\'immagine è fallito.', - 'missingFont' => 'Impossibile trovare un font da usare.', - 'saveFailed' => 'Impossibile salvare l\'immagine. Prego assicurati che l\'immagine e la cartella siano scrivibili.', - 'invalidDirection' => 'La direzione per capovolgere può essere solo `vertical` o `horizontal`. Selezionato: {0}', - 'exifNotSupported' => 'La lettura dei dati EXIF non è supportata da questa installazione PHP.', -]; diff --git a/app/Language/it/Language.php b/app/Language/it/Language.php deleted file mode 100644 index 4c5d7e8a..00000000 --- a/app/Language/it/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'La linea di richiesta deve essere una stringa o un array di stringhe.' -]; diff --git a/app/Language/it/Log.php b/app/Language/it/Log.php deleted file mode 100644 index 6a8ce4cd..00000000 --- a/app/Language/it/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} non è un valido livello di log.', -]; diff --git a/app/Language/it/Main.php b/app/Language/it/Main.php deleted file mode 100644 index f8dff724..00000000 --- a/app/Language/it/Main.php +++ /dev/null @@ -1,53 +0,0 @@ - 'Dashboard', - 'manage' => 'Gestisci', - 'users' => 'Utenti', - 'addUser' => 'Aggiungi Utente', - 'editUsers' => 'Gestisci Utenti', - 'groups' => 'Gruppi', - 'addGroup' => 'Aggiungi Gruppo', - 'editGroups' => 'Gestisci Gruppi', - 'brands' => 'Brands', - 'category' => 'Categorie', - 'store' => 'Negozio', - 'stores' => 'Negozi', - 'attributes' => 'Attributi', - 'products' => 'Prodotti', - 'addProduct' => 'Aggiungi Prodotto', - 'manageProducts' => 'Gestisci Prodotti', - 'editProduct' => 'Modifica Prodotto', - 'orders' => 'Ordini', - 'addOrder' => 'Aggiungi Ordine', - 'editOrders' => 'Gestisci Ordini', - 'reports' => 'Reports', - 'company' => 'Azienda', - 'profile' => 'Profilo', - 'setting' => 'Impostazioni', - 'logout' => 'Logout', - - 'action' => 'Azione', - 'status' => 'Stato', - 'save' => 'Salva', - 'yes' => 'Si', - 'no' => 'No', - 'close' => 'Chiudi', - 'back' => 'Indietro', - 'delConf' => 'Vuoi davvero eliminare?', - 'createdOK' => 'Creato con successo', - 'updatedOK' => 'Aggiornato con successo', - 'error' => 'Errore!!', - - 'permission' => 'Permessi', - 'create' => 'Crea', - 'update' => 'Modifica', - 'view' => 'Visualizza', - 'delete' => 'Elimina', - - 'productName' => 'Nome prodotto', - 'price' => 'Prezzo', - 'qty' => 'Quantità', - 'availability' => 'Disponibilità', - 'description' => 'Descrizione', - -]; diff --git a/app/Language/it/Migrations.php b/app/Language/it/Migrations.php deleted file mode 100644 index 572c6006..00000000 --- a/app/Language/it/Migrations.php +++ /dev/null @@ -1,80 +0,0 @@ - 'La tavola delle Migrazioni deve essere indicata.', -// 'invalidType' => 'E\' stata specificata una numerazione di migrazione non valida: {0}', - 'disabled' => 'Le Migrazioni sono state caricate ma sono disabilitate o configurate in modo non corretto.', - 'notFound' => 'File di Migrazione non trovato: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Nessun file di Migrazione è stato trovato', - 'gap' => 'Vi è una lacuna nella sequenza di migrazione vicino al numero di versione: ', - 'classNotFound' => 'Non è possibile trovare la classe di migrazione "%s" .', - 'missingMethod' => 'Alla classe di migrazione manca un metodo "%s" .', - - // Migration Command - 'migHelpLatest' => "\t\tEffettua la migrazione del database alla ultima migrazione disponibile.", - 'migHelpCurrent' => "\t\tEffettua la migrazione del database alla versione selezionata come 'current' nella configurazione.", - 'migHelpVersion' => "\tEffettua la migrazione del database alla versione {v}.", - 'migHelpRollback' => "\tElabora tutte le migrazioni 'down' alla versione 0.", - 'migHelpRefresh' => "\t\tDisinstalla e rielabora tutte le migrazioni a un database riavviato.", - 'migHelpSeed' => "\tAvvia il seminatore denominato [name].", - 'migCreate' => "\tCrea una nuova migrazione denominata [name]", - 'nameMigration' => 'Denomina il file di migrazione', - 'badCreateName' => 'Devi fornire un nome al file di migrazione.', - 'writeError' => 'Si è verificato un errore tentando di creare il file.', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', -// 'toLatest' => 'Migrazione verso la più recente versione...', - 'migInvalidVersion' => 'Fornito un numero di versione non valido.', - 'toVersionPH' => 'Migrazione verso la versione %s...', - 'toVersion' => 'Migrazione verso la versione corrente...', - 'rollingBack' => 'Ritorna indietro tutte le migrazioni...', - 'noneFound' => 'Nessuna migrazione è stata trovata.', - 'on' => 'Migrato a: ', - 'migSeeder' => 'Nome seminatrice', - 'migMissingSeeder' => 'Devi fornire un nome seminatrice.', - 'removed' => 'Tornando indietro: ', - 'added' => 'Elaborazione: ', - - 'version' => 'Versione', - 'filename' => 'Nome file', -]; diff --git a/app/Language/it/Number.php b/app/Language/it/Number.php deleted file mode 100644 index 51f0132e..00000000 --- a/app/Language/it/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' mille', - 'million' => ' milione', - 'billion' => ' miliardo', - 'trillion' => ' mille miliardi', - 'quadrillion' => ' milione di miliardi', -]; diff --git a/app/Language/it/Pager.php b/app/Language/it/Pager.php deleted file mode 100644 index 3b8391e6..00000000 --- a/app/Language/it/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Selezione Pagina', - 'first' => 'Primo', - 'previous' => 'Precedente', - 'next' => 'Prossimo', - 'last' => 'Ultimo', - 'older' => 'Più datato', - 'newer' => 'Più recente', - 'invalidTemplate' => '{0} non è un valido Pager template.', - 'invalidPaginationGroup' => '{0} non è un valido gruppo di Paginazione.', -]; diff --git a/app/Language/it/RESTful.php b/app/Language/it/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/it/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/it/Redirect.php b/app/Language/it/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/it/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/it/Router.php b/app/Language/it/Router.php deleted file mode 100644 index 52e0bcc9..00000000 --- a/app/Language/it/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Un parametro non rientra nella tipologia attesa.', - 'missingDefaultRoute' => 'Impossibile determinare cosa si dovrebbe mostrare. Non è stato specificato un percorso di default nel file percorsi (routing).', -]; diff --git a/app/Language/it/Session.php b/app/Language/it/Session.php deleted file mode 100644 index c37db689..00000000 --- a/app/Language/it/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` deve avere il nome della tavola per far funzionare il Gestore della Sessione del Database.', - 'invalidSavePath' => 'Sessione: il configurato percorso di salvataggio "{0}" non è una cartella, non esiste o non può essere creato.', - 'writeProtectedSavePath' => 'Sessione: il configurato percorso di salvataggio "{0}" non è scrivibile dal processo PHP.', - 'emptySavePath' => 'Sessione: nessun percorso di salvataggio configurato.', - 'invalidSavePathFormat' => 'Sessione: il formato del percorso di salvataggio Redis non è valido : {0}', -]; diff --git a/app/Language/it/Time.php b/app/Language/it/Time.php deleted file mode 100644 index 634d2615..00000000 --- a/app/Language/it/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Mesi deve essere fra 1 e 12. Indicato: {0}', - 'invalidDay' => 'Giorni deve essere fra 1 e 31. Indicato: {0}', - 'invalidOverDay' => 'Giorni deve essere fra 1 e {0}. Indicato: {1}', - 'invalidHours' => 'Ore deve essere fra 0 e 23. Indicato: {0}', - 'invalidMinutes' => 'Minuti deve essere fra 0 e 59. Indicato: {0}', - 'invalidSeconds' => 'Secondi deve essere fra 0 e 59. Indicato: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '{0} fa', - 'inFuture' => 'fra {0}', - 'yesterday' => 'Ieri', - 'tomorrow' => 'Domani', - 'now' => 'Adesso', -]; diff --git a/app/Language/it/Validation.php b/app/Language/it/Validation.php deleted file mode 100644 index a0074848..00000000 --- a/app/Language/it/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'Nessun set di regole è stato specificato nella configurazione della Validazione.', - 'ruleNotFound' => '{0} non è una regola valida.', - 'groupNotFound' => '{0} non è un gruppo di regole di validazione.', - 'groupNotArray' => '{0} il gruppo di regole deve essere un array.', - 'invalidTemplate' => '{0} non è un valido template di Validazione.', - - // Rule Messages - 'alpha' => 'Il campo {field} può contenere solamente caratteri dell\'alfabeto.', - 'alpha_dash' => 'Il campo {field} può contenere solamente caratteri alfanumerici, lineette basse, e lineette (meno).', - 'alpha_numeric' => 'Il campo {field} può contenere solamente caratteri alfanumerici.', - 'alpha_numeric_space' => 'Il campo {field} può contenere solamente caratteri alfanumerici e spazi.', - 'alpha_space' => 'Il campo {field} può contenere solamente caratteri dell\'alfabeto e spazi.', - 'decimal' => 'Il campo {field} deve contenere un numero decimale.', - 'differs' => 'Il campo {field} deve essere diverso dal campo {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'Il campo {field} deve essere esattamente di {param} caratteri.', - 'greater_than' => 'Il campo {field} deve contenere un numero maggiore di {param}.', - 'greater_than_equal_to' => 'Il campo {field} deve contenere un numero maggiore o uguale a {param}.', - 'hex' => 'Il campo {field} può contenere solamente caratteri esadecimali.', - 'in_list' => 'Il campo {field} deve essere uno tra: {param}.', - 'integer' => 'Il campo {field} deve contenere un intero.', - 'is_natural' => 'Il campo {field} deve contenere solo caratteri numerici.', - 'is_natural_no_zero' => 'Il campo {field} deve contenere solo caratteri numerici e deve essere maggiore di zero.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Il campo {field} deve contenere un valore univoco.', - 'less_than' => 'Il campo {field} deve contenere un numero minore di {param}.', - 'less_than_equal_to' => 'Il campo {field} deve contenere un numero minore o uguale a {param}.', - 'matches' => 'Campo {field} non corrispondente al campo {param} .', - 'max_length' => 'Il campo {field} non può superare i {param} caratteri.', - 'min_length' => 'Il campo {field} deve essere almeno di {param} caratteri.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'Il campo {field} deve contenere solo numeri.', - 'regex_match' => 'Il formato per il campo {field} non è corretto.', - 'required' => 'Il campo {field} è obbligatorio.', - 'required_with' => 'Il campo {field} è obbligatorio quando {param} è presente.', - 'required_without' => 'Il campo {field} è obbligatorio quando {param} non è presente.', - 'timezone' => 'Il campo {field} deve essere una timezone valida.', - 'valid_base64' => 'Il campo {field} deve essere una stringa in base64 valida.', - 'valid_email' => 'Il campo {field} deve contenere un indirizzo email valido.', - 'valid_emails' => 'Il campo {field} deve contenere tutti indirizzi email validi.', - 'valid_ip' => 'Il campo {field} deve contenere un IP valido.', - 'valid_url' => 'Il campo {field} deve contenere un URL valido.', - 'valid_date' => 'Il campo {field} deve contenere una data valida.', - - // Credit Cards - 'valid_cc_num' => '{field} non sembra essere un numero di carta di credito valido.', - - // Files - 'uploaded' => 'Il file {field} non è valido.', - 'max_size' => 'Il file {field} supera le dimensioni consentite.', - 'is_image' => 'Il file {field} non è un\'immagine valida.', - 'mime_in' => 'Il file {field} non ha un mime consentito.', - 'ext_in' => 'Il file {field} non ha una estesione valida.', - 'max_dims' => 'Il file {field} o non è una immagine oppure l\'immagine ha dimensioni troppo grandi.', -]; diff --git a/app/Language/it/View.php b/app/Language/it/View.php deleted file mode 100644 index 1129bc03..00000000 --- a/app/Language/it/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} non è un metodo valido.', - 'missingCellParameters' => '{class}::{method} non ha alcun parametro.', - 'invalidCellParameter' => '{0} non è un nome valido del parametro.', - 'noCellClass' => 'Nessuna classe view cell fornita.', - 'invalidCellClass' => 'Impossibile trovare la classe view cell: {0}.', - 'tagSyntaxError' => 'Hai un errore di sintassi nei tuoi tags Parser: {0}', -]; diff --git a/app/Language/ja/CLI.php b/app/Language/ja/CLI.php deleted file mode 100644 index 97878531..00000000 --- a/app/Language/ja/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - '"{0}"というコマンドはありません。', //Command "{0}" not found. - 'helpUsage' => '使用法:', //Usage: - 'helpDescription' => '説明:', //Description: - 'helpOptions' => 'オプション:', //Options: - 'helpArguments' => '引数:', //Arguments: - 'invalidColor' => '「{1}」は無効な {0} カラーです。', //Invalid {0} color: {1}. -]; diff --git a/app/Language/ja/Cache.php b/app/Language/ja/Cache.php deleted file mode 100644 index 48175922..00000000 --- a/app/Language/ja/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - '{0} へキャッシュの書き込みができません。', //Cache unable to write to {0} - 'invalidHandlers' => 'キャッシュコンフィグは $validHandlers の配列が必要です。', //Cache config must have an array of $validHandlers. - 'noBackup' => 'キャッシュコンフィグはハンドラとバックアップ・ハンドラが必要です。', //Cache config must have a handler and backupHandler set. - 'handlerNotFound' => 'キャッシュコンフィグに無効なハンドラまたはバックアップ・ハンドラが指定されています。', //Cache config has an invalid handler or backup handler specified. -]; diff --git a/app/Language/ja/Cast.php b/app/Language/ja/Cast.php deleted file mode 100644 index 13037abd..00000000 --- a/app/Language/ja/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - '最大スタック深さを超えました', //Maximum stack depth exceeded - 'jsonErrorStateMismatch' => 'アンダーフローまたはモードの不一致です', //Underflow or the modes mismatch - 'jsonErrorCtrlChar' => '予期しない制御文字が見つかりました', //Unexpected control character found - 'jsonErrorSyntax' => '構文エラー、不正な JSON', //Syntax error, malformed JSON - 'jsonErrorUtf8' => '不正な UTF-8 文字があり、誤ってエンコードされた可能性があります。', //Malformed UTF-8 characters, possibly incorrectly encoded - 'jsonErrorUnknown' => '未知のエラー', //Unknown error -]; diff --git a/app/Language/ja/Core.php b/app/Language/ja/Core.php deleted file mode 100644 index 3fe30635..00000000 --- a/app/Language/ja/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - '無効なファイル: {0}', //Invalid file: {0} - 'copyError' => 'ファイル({0})を置換しようとしたときにエラーが発生しました。ファイルまたはディレクトリが書き込み可能であることを確認してください。', //An error was encountered while attempting to replace the file({0}). Please make sure your file directory is writable. - 'missingExtension' => '{0} 拡張モジュールはロードされませんでした。', //{0} extension is not loaded. - 'noHandlers' => '{0} は少なくとも1つのハンドラを指定する必要があります。', //{0} must provide at least one Handler. -]; diff --git a/app/Language/ja/Database.php b/app/Language/ja/Database.php deleted file mode 100644 index 48c70b4f..00000000 --- a/app/Language/ja/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} は有効なモデルイベントコールバックではありません。', //{0} is not a valid Model Event callback. - 'invalidArgument' => '有効な {0} を与えてください。', //You must provide a valid {0}. - 'invalidAllowedFields' => 'モデル「{0}」には許可フィールドを指定する必要があります。: ', //Allowed fields must be specified for model: {0} - 'emptyDataset' => '{0} へのデータはありません。', //There is no data to {0}. - 'failGetFieldData' => 'データベースからフィールド・データの取得に失敗しました。', //Failed to get field data from database. - 'failGetIndexData' => 'データベースからインデックス・データの取得に失敗しました。', //Failed to get index data from database. - 'failGetForeignKeyData' => 'データベースからの外部キー・データの取得に失敗しました。', //Failed to get foreign key data from database. - 'parseStringFail' => 'キー文字列の解析に失敗しました。', //Parsing key string failed. - 'featureUnavailable' => 'この機能は、使用しているデータベースでは利用できません。', //This feature is not available for the database you are using. - 'tableNotFound' => 'テーブル `{0}` が現在のデータベースに見つかりませんでした。', //Table `{0}` was not found in the current database. - 'noPrimaryKey' => 'モデルクラス `{0}` で主キーを指定していません。', //`{0}` model class does not specify a Primary Key. - 'noDateFormat' => 'モデルクラス `{0}` に有効なdateFormatがありません。', //`{0}` model class does not have a valid dateFormat. - 'fieldNotExists' => 'フィールド `{0}` はありません。', //Field `{0}` not found. - 'forEmptyInputGiven' => 'フィールド `{0}` に空の文が与えられてます。', //Empty statement is given for the field `{0}` - 'forFindColumnHaveMultipleColumns' => 'カラム名には単一のカラムのみ使用可能です。', //Only single column allowed in Column name. -]; diff --git a/app/Language/ja/Email.php b/app/Language/ja/Email.php deleted file mode 100644 index 641c0997..00000000 --- a/app/Language/ja/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'メール検証メソッドには配列を渡す必要があります。', //The email validation method must be passed an array. - 'invalidAddress' => '無効なメールアドレス: {0}', //Invalid email address: {0} - 'attachmentMissing' => '次のメールの添付ファイルを見つけることができません。: {0}', //Unable to locate the following email attachment: {0} - 'attachmentUnreadable' => 'この添付ファイルを開くことができません。: {0}', //Unable to open this attachment: {0} - 'noFrom' => '"From"ヘッダの無いメールは送信できません。', //Cannot send mail with no "From" header. - 'noRecipients' => 'To, Cc, または Bccを受信者に含める必要があります。', //You must include recipients: To, Cc, or Bcc - 'sendFailurePHPMail' => 'PHP関数mail()がメール送信に利用できません。この方法でメールを送信するようにサーバーが設定されていない可能性があります。', //Unable to send email using PHP mail(). Your server might not be configured to send mail using this method. - 'sendFailureSendmail' => 'PHPでSendmailコマンドがメール送信に利用できません。この方法でメールを送信するようにサーバーが設定されていない可能性があります。', //Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method. - 'sendFailureSmtp' => 'PHPでSMTPを使ったメール送信が利用できません。この方法でメールを送信するようにサーバーが設定されていない可能性があります。', //Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method. - 'sent' => 'あなたのメッセージは、以下のプロトコルを使用して正常に送信されました。: {0}', //Your message has been successfully sent using the following protocol: {0} - 'noSocket' => 'Sendmailへのソケットが開けません。設定を確認してください。', //Unable to open a socket to Sendmail. Please check settings. - 'noHostname' => 'SMTPホスト名を指定していません。', //You did not specify a SMTP hostname. - 'SMTPError' => '以下のSMTPエラーが発生しました。: {0}', //The following SMTP error was encountered: {0} - 'noSMTPAuth' => 'エラー: SMTPのユーザー名とパスワードを設定する必要があります。', //Error: You must assign a SMTP username and password. - 'failedSMTPLogin' => 'AUTH LOGIN コマンドの送信に失敗しました。 エラー: {0}', //Failed to send AUTH LOGIN command. Error: {0} - 'SMTPAuthUsername' => 'ユーザ名の認証に失敗しました。 エラー: {0}', //Failed to authenticate username. Error: {0} - 'SMTPAuthPassword' => 'パスワードの認証に失敗しました。 エラー: {0}', //Failed to authenticate password. Error: {0} - 'SMTPDataFailure' => 'データの送信ができません: {0}', //Unable to send data: {0} - 'exitStatus' => '終了ステータスコード: {0}', //Exit status code: {0} -]; diff --git a/app/Language/ja/Encryption.php b/app/Language/ja/Encryption.php deleted file mode 100644 index 1cccdfd5..00000000 --- a/app/Language/ja/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'ドライバは不要です。', //No driver requested; Miss Daisy will be so upset! ← ダジャレは翻訳しません - 'noHandlerAvailable' => '利用可能な {0} 暗号化ハンドラが見つかりません。', //Unable to find an available {0} encryption handler. - 'unKnownHandler' => '"{0}" は設定できません。', //"{0}" cannot be configured. - 'starterKeyNeeded' => '暗号化にはスターターキーが必要です。', //Encrypter needs a starter key. - 'authenticationFailed' => '復号化: 認証に失敗しました。', //Decrypting: authentication failed. - 'encryptionFailed' => '暗号化に失敗しました。', //Encryption failed. -]; diff --git a/app/Language/ja/Entity.php b/app/Language/ja/Entity.php deleted file mode 100644 index 2e47adb7..00000000 --- a/app/Language/ja/Entity.php +++ /dev/null @@ -1,42 +0,0 @@ - '{1}の実在しないプロパティ {0} にアクセスしようとします。', //Trying to access non existent property {0} of {1} -]; diff --git a/app/Language/ja/Files.php b/app/Language/ja/Files.php deleted file mode 100644 index 1157bf4b..00000000 --- a/app/Language/ja/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'ファイルがありません: {0}', //File not found: {0} - 'cannotMove' => '{0} から {1} へファイルの移動ができません。 ({2})', //Could not move file {0} to {1} ({2}) -]; diff --git a/app/Language/ja/Filters.php b/app/Language/ja/Filters.php deleted file mode 100644 index 4c45f268..00000000 --- a/app/Language/ja/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} フィルタには、一致するエイリアスが定義されていなければなりません。', //{0} filter must have a matching alias defined. - 'incorrectInterface' => '{0} は CodeIgniter\Filters\FilterInterface を実装する必要があります。', //{0} must implement CodeIgniter\Filters\FilterInterface. -]; diff --git a/app/Language/ja/Format.php b/app/Language/ja/Format.php deleted file mode 100644 index 5818cb5c..00000000 --- a/app/Language/ja/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'JSON文字列のパースに失敗しました。 エラー: "{0}"', //Failed to parse json string, error: "{0}". - 'missingExtension' => 'XMLをフォーマットするにはSimpleXML拡張機能が必要です。', //The SimpleXML extension is required to format XML. -]; diff --git a/app/Language/ja/HTTP.php b/app/Language/ja/HTTP.php deleted file mode 100644 index 78f014dc..00000000 --- a/app/Language/ja/HTTP.php +++ /dev/null @@ -1,99 +0,0 @@ - 'CURLRequestクラスを使用するには、CURLが有効になっている必要があります。', //CURL must be enabled to use the CURLRequest class. - 'invalidSSLKey' => 'SSLキーを設定できません。{0} は有効なファイルではありません。', //Cannot set SSL Key. {0} is not a valid file. - 'sslCertNotFound' => '{0} にSSL証明書が見つかりません', //SSL certificate not found at: {0} - 'curlError' => '{0} : {1}', //{0} : {1} - - // IncomingRequest - 'invalidNegotiationType' => '{0} は有効なネゴシエーションタイプではありません。値は次のいずれかでなければなりません:media, charset, encoding, language', //{0} is not a valid negotiation type. Must be one of: media, charset, encoding, language. - - // Message - 'invalidHTTPProtocol' => 'HTTP プロトコルのバージョンが無効です。値は次のいずれかでなければなりません:{0}', //Invalid HTTP Protocol Version. Must be one of: {0} - - // Negotiate - 'emptySupportedNegotiations' => 'すべてのネゴシエーションにサポートされている値の配列を設定する必要があります。', //You must provide an array of supported values to all Negotiations. - - // RedirectResponse - 'invalidRoute' => 'リバースルーティング中に {0} ルートが見つかりません。', //{0} route cannot be found while reverse-routing. - - // DownloadResponse - 'cannotSetBinary' => 'ファイルパスを設定する場合、バイナリを設定できません。', //When setting filepath can not set binary. - 'cannotSetFilepath' => 'バイナリを設定するとファイルパスを設定できません: {0}', //When setting binary can not set filepath: {0} - 'notFoundDownloadSource' => 'ダウンロードボディのソースが見つかりません。', //Not found download body source. - 'cannotSetCache' => 'ダウンロード用のキャッシングには対応していません。', //It does not supported caching for downloading. - 'cannotSetStatusCode' => 'ダウンロード用のステータスコードの変更には対応していません。 コード: {0}, 理由: {1}', //It does not supported change status code for downloading. code: {0}, reason: {1} - - // Response - 'missingResponseStatus' => 'HTTPレスポンスにステータスコードがありません。', //HTTP Response is missing a status code - 'invalidStatusCode' => '{0} は有効な HTTP リターンステータスコードではありません。', //{0} is not a valid HTTP return status code - 'unknownStatusCode' => 'メッセージの無い未知のHTTPステータスコードです。: {0}', //Unknown HTTP status code provided with no message: {0} - - // URI - 'cannotParseURI' => 'URI を解析できません。: {0}', //Unable to parse URI: {0} - 'segmentOutOfRange' => 'リクエストURIセグメントが範囲外です: {0}', //Request URI segment is our of range: {0} ← out of rangeの間違いでは? - 'invalidPort' => 'ポートは0~65535の間である必要があります。 値: {0}', //Ports must be between 0 and 65535. Given: {0} - 'malformedQueryString' => 'クエリ文字列はURIフラグメントを含んではいけません。', //Query strings may not include URI fragments. - - // Page Not Found - 'pageNotFound' => 'ページが見つかりません。', //Page Not Found - 'emptyController' => 'コントローラが指定されていません。', //No Controller specified. - 'controllerNotFound' => 'コントローラまたはそのメソッドが見つかりません。: {0}::{1}', //Controller or its method is not found: {0}::{1} - 'methodNotFound' => 'コントローラのメソッドが見つかりません。: {0}', //Controller method is not found: {0} - - // CSRF - 'disallowedAction' => '要求されたアクションは許可されていません。', //The action you requested is not allowed. - - // Uploaded file moving - 'alreadyMoved' => 'アップロードしたファイルは既に移動済みです。', //The uploaded file has already been moved. - 'invalidFile' => 'オリジナルファイルは有効なファイルではありません。', //The original file is not a valid file. - 'moveFailed' => 'ファイル{0}を{1}に移動できませんでした。({2})', //Could not move file {0} to {1} ({2}) - - 'uploadErrOk' => 'ファイルのアップロードに成功しました。', //The file uploaded with success. - 'uploadErrIniSize' => 'ファイル "%s" がupload_max_filesize ini ディレクティブの値を超えています。', //The file "%s" exceeds your upload_max_filesize ini directive. - 'uploadErrFormSize' => 'ファイル "%s" がフォームに定義されたアップロード制限を超えました。', //The file "%s" exceeds the upload limit defined in your form. - 'uploadErrPartial' => 'ファイル "%s" が部分的にしかアップロードされていませんでした。', //The file "%s" was only partially uploaded. - 'uploadErrNoFile' => 'ファイルはアップロードされませんでした。', //No file was uploaded. - 'uploadErrCantWrite' => 'ファイル "%s"はディスクに書き込めませんでした。', //The file "%s" could not be written on disk. - 'uploadErrNoTmpDir' => 'ファイルをアップロードできませんでした。: 一時ディレクトリが見つかりません。', //File could not be uploaded: missing temporary directory. - 'uploadErrExtension' => 'ファイルアップロードはPHP機能拡張により停止されました。', //File upload was stopped by a PHP extension. - 'uploadErrUnknown' => 'ファイル "%s" は未知のエラーのためアップロードされませんでした。', //The file "%s" was not uploaded due to an unknown error. -]; diff --git a/app/Language/ja/Images.php b/app/Language/ja/Images.php deleted file mode 100644 index f4efb69e..00000000 --- a/app/Language/ja/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - '環境設定でソース画像を指定する必要があります。', //You must specify a source image in your preferences. - 'gdRequired' => 'この機能を利用するにはGDイメージライブラリが必要です。', //The GD image library is required to use this feature. - 'gdRequiredForProps' => 'イメージのプロパティを決定するためには、サーバがGDイメージライブラリをサポートしている必要があります。', //Your server must support the GD image library in order to determine the image properties. - 'gifNotSupported' => 'ライセンスの制限により、GIF画像はサポートされないことがよくあります。代わりに JPG または PNG 画像を使用する必要があるかもしれません。', //GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead. - 'jpgNotSupported' => 'JPG画像には対応していません。', //JPG images are not supported. - 'pngNotSupported' => 'PNG画像には対応していません。', //PNG images are not supported. - 'fileNotSupported' => '与えられたファイルはサポートされている画像の種類ではありません。', //The supplied file is not a supported image type. - 'unsupportedImageCreate' => 'お使いのサーバーは、このタイプの画像を処理するために必要なGDファンクションをサポートしていません。', //Your server does not support the GD function required to process this type of image. - 'jpgOrPngRequired' => '環境設定で指定された画像サイズ変更プロトコルは、JPEGまたはPNG画像でのみ動作します。', //The image resize protocol specified in your preferences only works with JPEG or PNG image types. - 'rotateUnsupported' => 'お使いのサーバーでは、画像の回転はサポートされていないようです。', //Image rotation does not appear to be supported by your server. - 'libPathInvalid' => 'イメージライブラリのパスが正しくありません。画像環境設定で正しいパスを設定してください。 {0}', //The path to your image library is not correct. Please set the correct path in your image preferences. {0, string) ← {0, string) is typo? - 'imageProcessFailed' => '画像処理に失敗しました。サーバーが選択したプロトコルをサポートしていること、およびイメージライブラリへのパスが正しいことを確認してください。', //Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct. - 'rotationAngleRequired' => '画像を回転させるには回転角度を指定してください。', //An angle of rotation is required to rotate the image. - 'invalidPath' => '画像へのパスが正しくありません。', //The path to the image is not correct. - 'copyFailed' => '画像コピールーチンが失敗しました。', //The image copy routine failed. - 'missingFont' => '使用するフォントが見つかりません。', //Unable to find a font to use. - 'saveFailed' => '画像を保存できません。画像とファイルディレクトリが書き込み可能であることを確認してください。', //Unable to save the image. Please make sure the image and file directory are writable. - 'invalidDirection' => 'フリップの方向は `vertical` と `horizontal` のどちらか一方のみを指定することができます。値: {0}', //Flip direction can be only `vertical` or `horizontal`. Given: {0} - 'exifNotSupported' => 'EXIFデータの読み込みは、このPHPのインストールではサポートされていません。', //Reading EXIF data is not supported by this PHP installation. -]; diff --git a/app/Language/ja/Language.php b/app/Language/ja/Language.php deleted file mode 100644 index 72d6d586..00000000 --- a/app/Language/ja/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - '行を取得するには、文字列または文字列の配列でなければなりません。', //Get line must be a string or array of strings. -]; diff --git a/app/Language/ja/Log.php b/app/Language/ja/Log.php deleted file mode 100644 index eebb1269..00000000 --- a/app/Language/ja/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} は無効なログレベルです。', //{0} is an invalid log level. -]; diff --git a/app/Language/ja/Migrations.php b/app/Language/ja/Migrations.php deleted file mode 100644 index 76a42ad4..00000000 --- a/app/Language/ja/Migrations.php +++ /dev/null @@ -1,80 +0,0 @@ - 'マイグレーション・テーブルを設定する必要があります。', //Migrations table must be set. - 'disabled' => 'マイグレーションは読み込まれていますが、無効化されているか、設定が間違っています。', //Migrations have been loaded but are disabled or setup incorrectly. - 'notFound' => 'マイグレーション・ファイルが見つかりません。: ', //Migration file not found: - 'batchNotFound' => 'ターゲットバッチが見つかりません: ', //Target batch not found: - 'empty' => 'マイグレーション・ファイルが見つかりませんでした。', //No Migration files found - 'gap' => 'バージョン番号付近のマイグレーション・シーケンスに飛びがあります: ', //There is a gap in the migration sequence near version number: - 'classNotFound' => 'マイグレーション・クラス "%s" が見つかりませんでした。', //The migration class "%s" could not be found. - 'missingMethod' => 'マイグレーション・クラスには "%s" メソッドがありません。', //The migration class is missing an "%s" method. - - // Migration Command - 'migHelpLatest' => "\t\tデータベースを最新の利用可能なマイグレーションに移行します。", //\t\tMigrates database to latest available migration. - 'migHelpCurrent' => "\t\t'current'設定のバージョンにデータベースを移行します。", //\t\tMigrates database to version set as 'current' in configuration. - 'migHelpVersion' => "\tデータベースをバージョン {v} に移行します。", //\tMigrates database to version {v}. - 'migHelpRollback' => "\tすべてのマイグレーションをバージョン0に「ダウン」します", //\tRuns all migrations 'down' to version 0. - 'migHelpRefresh' => "\t\tデータベースを一新するためにすべての移行をアンインストールして再実行します。", //\t\tUninstalls and re-runs all migrations to freshen database. - 'migHelpSeed' => "\t[name]というseederを実行します。", //\tRuns the seeder named [name]. - 'migCreate' => "\t[name]という名前の新しいマイグレーションを作成します。", //\tCreates a new migration named [name] - 'nameMigration' => 'マイグレーション・ファイルの名前', //Name the migration file - 'badCreateName' => 'マイグレーション・ファイル名を指定する必要があります。', //You must provide a migration file name. - 'writeError' => '{0} ファイルを作成しようとするとエラーが発生します。ディレクトリが書き込み可能かどうかを確認してください。', //Error trying to create {0} file, check if the directory is writable. - 'migNumberError' => 'マイグレーション・ナンバーは3桁でなければならず、シーケンスに飛びがあってはなりません。', //Migration number must be three digits, and there must not be any gaps in the sequence. - 'rollBackConfirm' => '本当にロールバックしますか?', //Are you sure you want to rollback? - 'refreshConfirm' => '本当にリフレッシュしますか?', //Are you sure you want to refresh? - - 'latest' => 'すべての新しいマイグレーションを実行しています...', //Running all new migrations... - 'generalFault' => 'マイグレーション失敗!', //Migration failed! - 'migInvalidVersion' => '無効なバージョン番号です。', //Invalid version number provided. - 'toVersionPH' => 'バージョン %s に移行しています...', //Migrating to version %s... - 'toVersion' => 'currentバージョンに移行しています...', //Migrating to current version... - 'rollingBack' => 'バッチへのマイグレーションをロールバック: ', //Rolling back migrations to batch: - 'noneFound' => 'マイグレーションは見つかりませんでした。', //No migrations were found. - 'on' => '移行先: ', //Migrated On: - 'migSeeder' => 'seeder名', //Seeder name - 'migMissingSeeder' => 'seeder名が必要です。', //You must provide a seeder name. - 'removed' => 'ロールバック: ', //Rolling back: - 'added' => '実行中: ', //Running: - - 'version' => 'バージョン', //Version - 'filename' => 'ファイル名', //Filename -]; diff --git a/app/Language/ja/Number.php b/app/Language/ja/Number.php deleted file mode 100644 index 2ac508ef..00000000 --- a/app/Language/ja/Number.php +++ /dev/null @@ -1,55 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - // Japanese numeral are ten-thousand-based, cause it can not adapt 'number_to_amount()' as below. - // 日本語の位取りは万進法なのでnumber_to_amount()の動作に適応するのは困難なためローカライズしません。 - // あえて使いたい人は、完全ではありませんがコメントの内容に置き換えることも可能です - 'thousand' => ' thousand', //thousand → '千' - 'million' => ' million', //million → '百万' - 'billion' => ' billion', //billion → '0億' 1 billionは 10億 ただし、カンマ位取りがおかしくなります(1,0000億というような表示になります) - 'trillion' => ' trillion', //trillion → '兆' - 'quadrillion' => ' quadrillion', //quadrillion → ',000兆' 京としたいところだが 1 quadrillion は 1000兆なので -]; diff --git a/app/Language/ja/Pager.php b/app/Language/ja/Pager.php deleted file mode 100644 index e557141b..00000000 --- a/app/Language/ja/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'ページナビゲーション', //Page navigation - 'first' => '最初', //First - 'previous' => '前へ', //Previous - 'next' => '次へ', //Next - 'last' => '最後', //Last - 'older' => '古い', //Older - 'newer' => '新しい', //Newer - 'invalidTemplate' => '{0} は有効なページャーテンプレートではありません。', //{0} is not a valid Pager template. - 'invalidPaginationGroup' => '{0} は有効なページネーショングループではありません。', //{0} is not a valid Pagination group. -]; diff --git a/app/Language/ja/RESTful.php b/app/Language/ja/RESTful.php deleted file mode 100644 index 9c2f5b7c..00000000 --- a/app/Language/ja/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" アクションは実装されていません.', //"{0}" action not implemented. -]; diff --git a/app/Language/ja/Redirect.php b/app/Language/ja/Redirect.php deleted file mode 100644 index d9a025cb..00000000 --- a/app/Language/ja/Redirect.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}"へリダイレクトできません。エラーステータスコード "{1}"', //Unable to redirect to "{0}". Error status code "{1}" -]; diff --git a/app/Language/ja/Router.php b/app/Language/ja/Router.php deleted file mode 100644 index 44c73f03..00000000 --- a/app/Language/ja/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'パラメータが予想される型と一致しません。', //A parameter does not match the expected type. - 'missingDefaultRoute' => '何を表示するか決定できません。デフォルトルートがルーティングファイルで指定されていません。', //Unable to determine what should be displayed. A default route has not been specified in the routing file. -]; diff --git a/app/Language/ja/Session.php b/app/Language/ja/Session.php deleted file mode 100644 index 06dfaf07..00000000 --- a/app/Language/ja/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath`はDBセッションハンドラが動作するテーブルが必要です。', //`sessionSavePath` must have the table name for the Database Session Handler to work. - 'invalidSavePath' => 'Session: 設定された保存パス"{0}"はディレクトリではないか、存在しないか、作成できません。', //Session: Configured save path "{0}" is not a directory, does not exist or cannot be created. - 'writeProtectedSavePath' => 'Session: 設定された保存パス"{0}"はPHPプロセスから書き込みができません。', //Session: Configured save path "{0}" is not writable by the PHP process. - 'emptySavePath' => 'Session: 保存パスが存在しません。', //Session: No save path configured. - 'invalidSavePathFormat' => 'Session: 無効な Redis 保存パス形式です。: {0}', //Session: Invalid Redis save path format: {0} -]; diff --git a/app/Language/ja/Time.php b/app/Language/ja/Time.php deleted file mode 100644 index 93a737f7..00000000 --- a/app/Language/ja/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - '月は1から12を指定してください。 入力された値: {0}', //Months must be between 1 and 12. Given: {0} - 'invalidDay' => '日は1から31を指定してください。 入力された値: {0}', //Days must be between 1 and 31. Given: {0} - 'invalidOverDay' => '日は1から{0}を指定してください。 入力された値: {1}', //Days must be between 1 and {0}. Given: {1} - 'invalidHours' => '時は0から23を指定してください。 入力された値: {0}', //Hours must be between 0 and 23. Given: {0} - 'invalidMinutes' => '分は0から59を指定してください。 入力された値: {0}', //Minutes must be between 0 and 59. Given: {0} - 'invalidSeconds' => '秒は0から59を指定してください。 入力された値: {0}', //Seconds must be between 0 and 59. Given: {0} - 'years' => '{0, plural, =1{# 年} other{# 年}}', //{0, plural, =1{# year} other{# years}} - 'months' => '{0, plural, =1{# ヶ月} other{# ヶ月}}', //{0, plural, =1{# month} other{# months}} - 'weeks' => '{0, plural, =1{# 週間} other{# 週間}}', //{0, plural, =1{# week} other{# weeks}} - 'days' => '{0, plural, =1{# 日} other{# 日}}', //{0, plural, =1{# day} other{# days}} - 'hours' => '{0, plural, =1{# 時間} other{# 時間}}', //{0, plural, =1{# hour} other{# hours}} - 'minutes' => '{0, plural, =1{# 分} other{# 分}}', //{0, plural, =1{# minute} other{# minutes}} - 'seconds' => '{0, plural, =1{# 秒} other{# 秒}}', //{0, plural, =1{# second} other{# seconds}} - 'ago' => '{0}前', //{0} ago - 'inFuture' => '{0}後', //in {0} - 'yesterday' => '昨日', //Yesterday - 'tomorrow' => '明日', //Tomorrow - 'now' => 'ついさっき', //Just now -]; diff --git a/app/Language/ja/Validation.php b/app/Language/ja/Validation.php deleted file mode 100644 index 8b094d2b..00000000 --- a/app/Language/ja/Validation.php +++ /dev/null @@ -1,98 +0,0 @@ - 'バリデーション構成で指定されたルールセットはありません。', //No rulesets specified in Validation configuration. - 'ruleNotFound' => '{0}は有効なルールではありません。', //{0} is not a valid rule. - 'groupNotFound' => '{0}はバリデーションルールグループではありません。', //{0} is not a validation rules group. - 'groupNotArray' => '{0}ルールグループは配列でなければなりません。', //{0} rule group must be an array. - 'invalidTemplate' => '{0}は有効なバリデーションテンプレートではありません。', //{0} is not a valid Validation template. - - // Rule Messages - 'alpha' => '{field} は半角英字のみ利用可能です。', //The {field} field may only contain alphabetical characters. - 'alpha_dash' => '{field} は半角の英数・アンダースコア・ハイフンのみ利用可能です。', //The {field} field may only contain alphanumeric, underscore, and dash characters. - 'alpha_numeric' => '{field} は半角英数のみ利用可能です。', //The {field} field may only contain alphanumeric characters. - 'alpha_numeric_punct' => '{field} は半角の英数・空白と「~ ! # $ % & * - _ + = | : .」のみ利用可能です。', //The {field} field may contain only alphanumeric characters, spaces, and ~ ! # $ % & * - _ + = | : . characters. - 'alpha_numeric_space' => '{field} は半角の英数と空白のみ利用可能です。', //The {field} field may only contain alphanumeric and space characters. - 'alpha_space' => '{field} は半角の英字と空白のみ利用可能です。', //The {field} field may only contain alphabetical characters and spaces. - 'decimal' => '{field} は半角数値を入力してください。', //The {field} field must contain a decimal number. - 'differs' => '{field} には {param} と異なる値を入力してください。', //The {field} field must differ from the {param} field. - 'equals' => '{field} は {param} と同じ値でなければなりません。', //The {field} field must be exactly: {param}. - 'exact_length' => '{field} の文字数は、{param}文字で入力してください。', //The {field} field must be exactly {param} characters in length. - 'greater_than' => '{field} には {param} より大きな半角数値を入力してください。', //The {field} field must contain a number greater than {param}. - 'greater_than_equal_to' => '{field} には {param} 以上の半角数値を入力してください。', //The {field} field must contain a number greater than or equal to {param}. - 'hex' => '{field} は16進数で入力してください。', //The {field} field may only contain hexidecimal characters. - 'in_list' => '{field} には、{param} のいずれかの値を入力してください', //The {field} field must be one of: {param}. - 'integer' => '{field} には、半角整数を入力してください。', //The {field} field must contain an integer. - 'is_natural' => '{field} には、半角数字のみを入力してください。', //The {field} field must only contain digits. - 'is_natural_no_zero' => '{field} には、半角数字で0より大きな数値を入力してください。', //The {field} field must only contain digits and must be greater than zero. - 'is_not_unique' => '{field} には、データベース内に存在する値を入力してください。', //The {field} field must contain a previously existing value in the database. - 'is_unique' => '{field} はユニークな値でなければなりません。', //The {field} field must contain a unique value. - 'less_than' => '{field} は {param} より小さな半角数値を入力してください。', //The {field} field must contain a number less than {param}. - 'less_than_equal_to' => '{field} は {param} 以下の半角数値を入力してください。', //The {field} field must contain a number less than or equal to {param}. - 'matches' => '{field} と {param} が一致しません。.', //The {field} field does not match the {param} field. - 'max_length' => '{field} は {param} 文字以内で入力してください。', //The {field} field cannot exceed {param} characters in length. - 'min_length' => '{field} は {param} 文字以上で入力してください。', //The {field} field must be at least {param} characters in length. - 'not_equals' => '{field} を {param} にすることはできません。', //The {field} field cannot be: {param}. - 'numeric' => '{field} は半角の数値のみを入力してください。.', //The {field} field must contain only numbers. - 'regex_match' => '{field} は正しいフォーマットではありません。', //The {field} field is not in the correct format. - 'required' => '{field} 必須項目です。', //The {field} field is required. - 'required_with' => '{field} は {param} が存在する場合には必須項目です。', //The {field} field is required when {param} is present. - 'required_without' => '{field} は {param} が存在しない場合には必須項目です。', //The {field} field is required when {param} is not present. - 'string' => '{field} には、有効な文字列入力してください。', //The {field} field must be a valid string. - 'timezone' => '{field} には、有効なタイムゾーンを入力してください。', //The {field} field must be a valid timezone. - 'valid_base64' => '{field} には、有効なbase64文字列を入力してください。', //The {field} field must be a valid base64 string. - 'valid_email' => '{field} には、有効なメールアドレスを入力してください。', //The {field} field must contain a valid email address. - 'valid_emails' => '{field} には、すべて有効なメールアドレスを入力してください。', //The {field} field must contain all valid email addresses. - 'valid_ip' => '{field} には、有効なIPアドレスを入力してください。', //The {field} field must contain a valid IP. - 'valid_url' => '{field} には、有効なURLを入力してください。', //The {field} field must contain a valid URL. - 'valid_date' => '{field} には、有効な日付を入力してください。', //The {field} field must contain a valid date. - - // Credit Cards - 'valid_cc_num' => '{field} は有効なクレジットカード番号ではないようです。', //{field} does not appear to be a valid credit card number. - - // Files - 'uploaded' => '{field} は有効なファイルではありません。', //{field} is not a valid uploaded file. - 'max_size' => '{field} はファイルサイズが大きすぎます。', //{field} is too large of a file. - 'is_image' => '{field} には画像ファイルを指定してください。', //{field} is not a valid, uploaded image file. - 'mime_in' => '{field} は有効なMIMEタイプではありません。', //{field} does not have a valid mime type. - 'ext_in' => '{field} は有効なファイル拡張子ではありません。', //{field} does not have a valid file extension. - 'max_dims' => '{field} は画像ではないか、幅が広すぎるか高すぎるかのどちらかです。', //{field} is either not an image, or it is too wide or tall. -]; diff --git a/app/Language/ja/View.php b/app/Language/ja/View.php deleted file mode 100644 index 49599955..00000000 --- a/app/Language/ja/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} は有効なメソッドではありません。', //{class}::{method} is not a valid method. - 'missingCellParameters' => '{class}::{method} にはパラメータがありません。', //{class}::{method} has no params. - 'invalidCellParameter' => '{0} は有効なパラメータ名ではありません。', //{0} is not a valid param name. - 'noCellClass' => 'ビューセルクラスは提供されていません。', //No view cell class provided. - 'invalidCellClass' => 'ビューセルクラス「{0}」を見つけることができません。', //Unable to locate view cell class: {0}. - 'tagSyntaxError' => 'パーサータグ「{0}」に構文エラーがあります。。', //You have a syntax error in your Parser tags: {0} -]; diff --git a/app/Language/ko/CLI.php b/app/Language/ko/CLI.php deleted file mode 100644 index 99642550..00000000 --- a/app/Language/ko/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - '"{0}" 명령어를 찾지 못했습니다.', // 'Command "{0}" not found.', - 'helpUsage' => '사용:', // 'Usage:', - 'helpDescription' => '설명:', // 'Description:', - 'helpOptions' => '옵션:', // 'Options:', - 'helpArguments' => '인수:', //'Arguments:', - 'invalidColor' => '유효하지 않은 {0} 색상: {1}.', // CI4 기준 : {0}에는 'foreground' 또는 'background' 문자열이 들어감. // 'Invalid {0} color: {1}.', -]; diff --git a/app/Language/ko/Cache.php b/app/Language/ko/Cache.php deleted file mode 100644 index b5236067..00000000 --- a/app/Language/ko/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - '{0}에 캐시를 쓸 수 없습니다.',// 'Cache unable to write to {0}', - 'invalidHandlers' => '캐시 구성에는 $validHandlers 배열이 있어야 합니다.', // 'Cache config must have an array of $validHandlers.', - 'noBackup' => '캐시 구성에는 핸들러와 백업 핸들러 세트가 설정되어야 합니다.', // 'Cache config must have a handler and backupHandler set.', - 'handlerNotFound' => '캐시 구성에 잘못된 핸들러 또는 백업 핸들러가 지정되어 있습니다.', // 'Cache config has an invalid handler or backup handler specified.', -]; diff --git a/app/Language/ko/Cast.php b/app/Language/ko/Cast.php deleted file mode 100644 index 4d52be4e..00000000 --- a/app/Language/ko/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - '최대 스택 깊이 초과', // 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow 또는 modes 불일치', // 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => '예상치 못한 제어 문자 존재', // 'Unexpected control character found', - 'jsonErrorSyntax' => 'JSON 구문 오류', // 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'UTF-8 문자열 구문 오류. 인코딩이 잘못되었을 수도 있습니다.', // 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => '알 수 없는 에러', //'Unknown error', -]; diff --git a/app/Language/ko/Core.php b/app/Language/ko/Core.php deleted file mode 100644 index f88ba5ca..00000000 --- a/app/Language/ko/Core.php +++ /dev/null @@ -1,46 +0,0 @@ - '유효하지 않은 파일: {0}', // 'Invalid file: {0}', - 'copyError' => '파일({0}) 교체를 시도하는 도중에 에러가 발생하였습니다. 파일 디렉터리에 쓰기 권한이 있는지 확인해주십시오.', // 'An error was encountered while attempting to replace the file({0}). Please make sure your file directory is writable.', - 'missingExtension' => '{0} 확장이 로드되지 않았습니다.', // '{0} extension is not loaded.', - 'noHandlers' => '{0} : 적어도 하나 이상의 Handler가 반드시 제공되어야 합니다.', // CI4 기준 : {0}에는 class 또는 handler명이 들어감. // '{0} must provide at least one Handler.', -]; diff --git a/app/Language/ko/Database.php b/app/Language/ko/Database.php deleted file mode 100644 index 4c07f173..00000000 --- a/app/Language/ko/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0}의 경우는 유효하지 않은 Model Event callback입니다.', // CI4 기준 : {0}에는 method가 들어감. '은, 는, 이, 가' 조사를 붙이기가 애매해서 '{0}의 경우는'라고 덧붙임. // '{0} is not a valid Model Event callback.', - 'invalidArgument' => '{0} 대신 반드시 유효한 인수가 제공되어야 합니다.', // CI4 기준 : {0}에는 argument가 들어감. // 'You must provide a valid {0}.', - 'invalidAllowedFields' => 'Model을 위한 fileds는 반드시 명시가 되어야 합니다: {0}', // 'Allowed fields must be specified for model: {0}', - 'emptyDataset' => '{0} : data가 들어있지 않습니다.', // CI4 기준 : DB 작업 관련, data가 없는 경우. {0}에는 'insert', 'update', 'chunk'가 들어감. // 'There is no data to {0}.', - 'failGetFieldData' => '데이터베이스로부터 field 가져오기 실패.', // 'Failed to get field data from database.', - 'failGetIndexData' => '데이터베이스로부터 index 데이터 가져오기 실패.', // 'Failed to get index data from database.', - 'failGetForeignKeyData' => '데이터베이스로부터 foreign key 데이터 가져오기 실패.', // 'Failed to get foreign key data from database.', - 'parseStringFail' => 'key string 구문 분석을 실패함.', // CI4 rc.3기준 : 'parseStringFail'를 사용하는 곳을 찾지 못했음. 차후 CI 팀에 의해서 변경될 수도 있을 듯함. 차후, 사용되는 구문에 따라서 해석이 변경될 수 있음. // 'Parsing key string failed.', - 'featureUnavailable' => '사용 중인 데이터베이스에서 이 기능을 사용할 수 없습니다.', // 'This feature is not available for the database you are using.', - 'tableNotFound' => '데이터베이스에서 찾을 수 없는 테이블: `{0}`', // 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => 'Primary Key가 명시되지 않은 model class: `{0}`', // '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '유효한 dateFormat(날짜 형식)을 갖고 있지 않은 model class: `{0}`', // '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => '`{0}` 경우, 필드를 찾지 못했습니다: `{0}`', // 'Field `{0}` not found.', - 'forEmptyInputGiven' => '필드에 `{0}` 경우를 사용하기 위해서 비어있는 구문이 지정되었습니다.', // CI4 기준 : {0}에 string $argument 또는 'Select'가 들어감. // 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'column 명에는 오직 하나의 column만이 허용됩니다.', // 'Only single column allowed in Column name.', -]; diff --git a/app/Language/ko/Email.php b/app/Language/ko/Email.php deleted file mode 100644 index cb2f0322..00000000 --- a/app/Language/ko/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'email 검증 메서드에는 반드시 배열을 넘겨줘야 합니다.', // CI4 기준 : is_array()를 통과하지 못한 경우에 발생하는 에러 메시지. // 'The email validation method must be passed an array.', - 'invalidAddress' => '유효하지 않은 이메일 주소: {0}', // 'Invalid email address: {0}', - 'attachmentMissing' => '다음 첨부파일을 찾을 수 없습니다: {0}', // 'Unable to locate the following email attachment: {0}', - 'attachmentUnreadable' => '이 첨부파일을 열 수 없습니다: {0}', // 'Unable to open this attachment: {0}', - 'noFrom' => '"From"헤더 정보(발신인) 없이 메일을 보낼 수 없습니다.', // 'Cannot send mail with no "From" header.', - 'noRecipients' => '반드시 수신인(To, Cc, 또는 Bcc)을 지정해야 합니다.', // 'You must include recipients: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'PHP의 mail()을 사용해서 메일을 보낼 수 없습니다. PHP의 mail()을 사용해서, 메일을 보낼 수 없도록 서버에 설정되어 있을 수도 있습니다.', // 'Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.', - 'sendFailureSendmail' => 'PHP의 Sendmail을 사용해서 메일을 보낼 수 없습니다. PHP의 Sendmail을 사용해서, 메일을 보낼 수 없도록 서버에 설정되어 있을 수도 있습니다.', // 'Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.', - 'sendFailureSmtp' => 'PHP의 SMTP를 사용해서 메일을 보낼 수 없습니다. PHP의 SMTP를 사용해서, 메일을 보낼 수 없도록 서버에 설정되어 있을 수도 있습니다.', // 'Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.', - 'sent' => '다음 protocol을 사용해서 메일 보내기 성공: {0}', // 'Your message has been successfully sent using the following protocol: {0}', - 'noSocket' => 'Sendmaill을 사용하기 위해서 소켓을 열 수가 없습니다. 환경설정을 확인해 주세요.', // 'Unable to open a socket to Sendmail. Please check settings.', - 'noHostname' => 'SMTP hostname을 지정하지 않았습니다.', // 'You did not specify a SMTP hostname.', - 'SMTPError' => '다음의 SMTP 에러가 발생하였습니다: {0}', // 'The following SMTP error was encountered: {0}', - 'noSMTPAuth' => '에러: SMTP에서 사용되는 username(ID)과 password를 지정해야 합니다.', // 'Error: You must assign a SMTP username and password.', - 'failedSMTPLogin' => '로그인 명령을 보낼 수 없습니다. SMTP 에러: {0}', // CI4 기준 : 334 에러 // 'Failed to send AUTH LOGIN command. Error: {0}', - 'SMTPAuthUsername' => 'username(ID) 인증 실패. SMTP 에러: {0}', // 'Failed to authenticate username. Error: {0}', - 'SMTPAuthPassword' => 'password 인증 실패. SMTP 에러: {0}', // 'Failed to authenticate password. Error: {0}', - 'SMTPDataFailure' => 'SMTP를 통해, data를 전송할 수 없습니다. {0}', // CI4 기준 : sendData() 결과가 false일 경우 에러 메시지 발생. // 'Unable to send data: {0}', - 'exitStatus' => '종료 상태 코드: {0}', // 'Exit status code: {0}', -]; diff --git a/app/Language/ko/Encryption.php b/app/Language/ko/Encryption.php deleted file mode 100644 index 1f48c04a..00000000 --- a/app/Language/ko/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - '드라이버가 요청되지 않았습니다.', // 미스 데이지가 화낼 것입니다. (역자 주: 영화 Driving Miss Daisy)', // 영어권 문화와 관련된 유머 - 미스 데이지 제외 : (역자 주: 1989년 개봉된 아카데미 작품상을 받은 드라마/코미디 영화 Driving Miss Daisy) @see: https://en.wikipedia.org/wiki/Driving_Miss_Daisy)', // 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => '사용이 가능한 {0} 암호화 핸들러를 찾을 수 없습니다.', // 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '알 수 없는 드라이버: "{0}" 경우는 설정될 수 없습니다.', // '"{0}" cannot be configured.', - 'starterKeyNeeded' => '암호화 처리 시 start key가 필요합니다.', // CI4 기준 : Encryption.php initialize()에서 key가 없거나, OpenSSLHandler.php encrypt()에서 암호화 키값이 없는 경우. 에러 메시지. // 'Encrypter needs a starter key.', - 'authenticationFailed' => '복호화: 인증 실패', // 'Decrypting: authentication failed.', - 'encryptionFailed' => '암호화 실패함', // 'Encryption failed.', -]; diff --git a/app/Language/ko/Entity.php b/app/Language/ko/Entity.php deleted file mode 100644 index 302e06ca..00000000 --- a/app/Language/ko/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - '{1}의 존재하지 않는 속성 {0}에 접근을 시도 중입니다.', // 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/ko/Files.php b/app/Language/ko/Files.php deleted file mode 100644 index 987bee0d..00000000 --- a/app/Language/ko/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - '파일을 찾을 수 없습니다: {0}', // 'File not found: {0}', - 'cannotMove' => '파일 {0} 경우에 {1} ({2}) 쪽으로 이동할 수 없습니다.', // 'Could not move file {0} to {1} ({2})', -]; diff --git a/app/Language/ko/Filters.php b/app/Language/ko/Filters.php deleted file mode 100644 index 63335d99..00000000 --- a/app/Language/ko/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} 필터는 매치되는 별칭이 정의되어 있어야 합니다.', // '{0} filter must have a matching alias defined.', - 'incorrectInterface' => '{0} 경우에는 CodeIgniter\Filters\FilterInterface 인터페이스를 구현해야 합니다.', // '은(는)' 보조사 대신 '경우에는' 사용. // CI4 기준 : if (! $class instanceof FilterInterface) 경우에 에러 메시지 // '{0} must implement CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/ko/Format.php b/app/Language/ko/Format.php deleted file mode 100644 index 49d58c99..00000000 --- a/app/Language/ko/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'JSON 문자열 파싱 실패, 에러: "{0}".', // 'Failed to parse json string, error: "{0}".', - 'missingExtension' => 'XML 형식을 지정하려면 SimpleXML 확장이 필요합니다.', // 'The SimpleXML extension is required to format XML.', -]; diff --git a/app/Language/ko/HTTP.php b/app/Language/ko/HTTP.php deleted file mode 100644 index 91fb59bb..00000000 --- a/app/Language/ko/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURLRequest 클래스를 사용하기 위해서 CURL이 반드시 활성화되어야 합니다.', // 'CURL must be enabled to use the CURLRequest class.', - 'invalidSSLKey' => 'SSL Key를 설정할 수 없습니다. {0} 경우는 유효하지 않는 파일입니다.', // 'Cannot set SSL Key. {0} is not a valid file.', - 'sslCertNotFound' => '해당 파일에서 SSL 인증서를 찾을 수 없습니다: {0}', // 'SSL certificate not found at: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '요청된 {0} 경우, 유효하지 않은 negotiation type입니다. 다음 중에 하나를 사용하십시오: media, charset, encoding, language.', // @See: https://httpd.apache.org/docs/2.2/ko/content-negotiation.html @see: https://tools.ietf.org/html/rfc2295 @see: https://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html // '{0} is not a valid negotiation type. Must be one of: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => '유효하지 않은 HTTP 프로토콜 버전입니다. 다음 버전 중에 하나를 사용하십시오: {0}', // CI4 기준 : protected $validProtocolVersions = ['1.0', '1.1', '2',]; // 'Invalid HTTP Protocol Version. Must be one of: {0}', - - // Negotiate - 'emptySupportedNegotiations' => '모든 Negotiations에 지원되는 값의 배열이 반드시 제공되어야 합니다.', // 'You must provide an array of supported values to all Negotiations.', - - // RedirectResponse - 'invalidRoute' => '(유효하지 않은 route). 리버스 라우팅을 하는 동안에, 페이지 redirect를 위한 {0} route는 발견되지 않았습니다.', // '{0} route cannot be found while reverse-routing.', - - // DownloadResponse - 'cannotSetBinary' => '다운로드 에러: 파일 경로를 설정할 때에 바이너리로 설정할 수 없습니다.', // DownloadResponse.php setBinary() : 바이너리 문자열을 위한 다운로드 설정 실패. // 'When setting filepath can not set binary.', - 'cannotSetFilepath' => '다운로드 에러: 바이너리 설정 중에 파일 경로를 설정할 수 없습니다.', // 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => '다운로드 에러: 다운로드 본문 소스를 찾을 수 없음.', // 'Not found download body source.', - 'cannotSetCache' => '다운로드 에러: 다운로드를 위해 지원되는 caching이 아닙니다.', // 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => '다운로드 에러: 다운로드를 위해 상태 코드를 변경하는 것을 지원하지 않습니다. code: {0}, reason: {1}', // 'It does not supported change status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'HTTP 응답에 HTTP 상태 코드가 누락되어 있습니다.', // 'HTTP Response is missing a status code', - 'invalidStatusCode' => '{0} 경우에 유효하지 않은 HTTP 상태 코드를 반환함.' , // CI4 rc.3기준 : 소스에서 if ($code < 100 || $code > 599)로 HTTP status code 체크함. // '{0} is not a valid HTTP return status code', - 'unknownStatusCode' => '아무런 메시지 없이 제공된, 알 수 없는 HTTP 상태 코드: {0}', // 'Unknown HTTP status code provided with no message: {0}', - - // URI - 'cannotParseURI' => '구문 분석을 할 수 없는 URI: {0}', // 'Unable to parse URI: {0}', - 'segmentOutOfRange' => '요청한 URL 세그먼트가 범위를 벗어났습니다: {0}', // 'Request URI segment is our of range: {0}', - 'invalidPort' => '포트 값은 0에서 65535 사이의 값을 사용해야 합니다. 사용된 값: {0}', // 'Ports must be between 0 and 65535. Given: {0}', - 'malformedQueryString' => 'URI 요청 문자열에 URI fragments가 포함되어 있지 않을 수 있습니다.', // 'Query strings may not include URI fragments.', - - // Page Not Found - 'pageNotFound' => '페이지를 찾을 수 없습니다.', // 'Page Not Found', - 'emptyController' => '컨트롤러가 명시되지 않았습니다.', // 'No Controller specified.', - 'controllerNotFound' => '컨트롤러 또는 해당 메서드를 찾을 수 없습니다: {0}::{1}', // 'Controller or its method is not found: {0}::{1}', - 'methodNotFound' => '컨트롤러 메서드를 찾을 수 없습니다: {0}', // 'Controller method is not found: {0}', - - // CSRF - 'disallowedAction' => '해당 요청은 허용되지 않습니다.', // 'The action you requested is not allowed.', - - // Uploaded file moving - 'alreadyMoved' => '업로드된 파일은 이미 옮겨졌습니다.', // 'The uploaded file has already been moved.', - 'invalidFile' => '원본 파일은 유효한 파일이 아닙니다.', // 'The original file is not a valid file.', - 'moveFailed' => '파일 {0} 경우에 {1} ({2}) 쪽으로 이동할 수 없습니다.', // 'Could not move file {0} to {1} ({2})', - - 'uploadErrOk' => '파일이 성공적으로 업로드가 되었습니다.', // 'The file uploaded with success.', - 'uploadErrIniSize' => '업로드 에러: 해당 파일 "%s"의 경우, 용량이 ini 파일의 upload_max_filesize 설정값을 초과하였습니다.', // 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => '업로드 에러: 해당 파일 "%s"의 경우, 용량이 form에 정의된 업로드 제한 값을 초과하였습니다.', // 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => '업로드 에러: 해당 파일 "%s"의 경우, 부분적으로만 업로드가 되었습니다.', // 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => '업로드 에러: 업로드된 파일이 없습니다.', // 'No file was uploaded.', - 'uploadErrCantWrite' => '업로드 에러: 해당 파일 "%s"의 경우, disk에 쓸 수 없습니다.', // 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => '(업로드 에러) 파일을 업로드할 수 없습니다: 임시 디렉터리가 없습니다.', // 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => '업로드 에러: PHP 확장에 의해 파일 업로드가 중지되었습니다.', // 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => '업로드 에러: 해당 파일 "%s"의 경우, 알 수 없는 에러로 인해 업로드할 수 없습니다.', // 'The file "%s" was not uploaded due to an unknown error.', -]; diff --git a/app/Language/ko/Images.php b/app/Language/ko/Images.php deleted file mode 100644 index fb9c88cb..00000000 --- a/app/Language/ko/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - '환경 설정에서 반드시 원본 이미지가 지정되어야 합니다.', // 'You must specify a source image in your preferences.', - 'gdRequired' => '이 기능을 사용하려면 GD image 라이브러리가 필요합니다.', // 'The GD image library is required to use this feature.', - 'gdRequiredForProps' => '이미지의 속성을 확인하려면 서버에서 GD image 라이브러리가 지원되어야 합니다.', // 'Your server must support the GD image library in order to determine the image properties.', - 'gifNotSupported' => 'GIF 이미지들은 라이선스 제한으로 지원되지 않는 경우가 많습니다. GIF 이미지 대신에 JPG 또는 PNG 형식의 이미지를 사용할 수도 있을 것입니다.', // 'GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead.', - 'jpgNotSupported' => 'JPG 이미지들은 지원되지 않습니다.', // 'JPG images are not supported.', - 'pngNotSupported' => 'PNG 이미지들은 지원되지 않습니다.', // 'PNG images are not supported.', - 'fileNotSupported' => '제공된 파일은 지원하지 않는 이미지 타입입니다.', // 'The supplied file is not a supported image type.', - 'unsupportedImageCreate' => '이 형식의 이미지를 처리하기 위해서 필요한 GD 함수가 서버에서 지원되지 않습니다.', // 'Your server does not support the GD function required to process this type of image.', - 'jpgOrPngRequired' => '환경 설정에 명시된 이미지 크기 조절 프로토콜은 JPEG 또는 PNG 타입의 이미지만 조절할 수 있습니다.', // 'The image resize protocol specified in your preferences only works with JPEG or PNG image types.', - 'rotateUnsupported' => '서버에서 이미지 회원을 지원하지 않는 것 같습니다.', // 'Image rotation does not appear to be supported by your server.', - 'libPathInvalid' => '이미지 라이브러리 경로가 올바르지 않습니다. 올바른 경로를 이미지 환경설정에서 설정하여 주십시오. {0, string)', // 'The path to your image library is not correct. Please set the correct path in your image preferences. {0, string)', - 'imageProcessFailed' => '이미지 처리 실패. 이미지 라이브러리의 경로가 올바르게 설정되어있는, 선택한 프로토콜이 서버에서 지원하도록 확인하여 주십시오.', // 'Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct.', - 'rotationAngleRequired' => '이미지를 회전시키기 위해서 회전 각도가 필요합니다.', // 'An angle of rotation is required to rotate the image.', - 'invalidPath' => '이미지 경로가 올바르지 않습니다.', // 'The path to the image is not correct.', - 'copyFailed' => '해당 이미지의 복사 루틴이 실패했습니다.', // 'The image copy routine failed.', - 'missingFont' => '이미지 처리에서 사용되는 폰트를 찾을 수 없습니다.', // 'Unable to find a font to use.', - 'saveFailed' => '파일을 저장할 수 없습니다. 해당 이미지 및 파일 디렉터리에 쓸 수 있도록 해주십시오.', // 'Unable to save the image. Please make sure the image and file directory are writable.', - 'invalidDirection' => '젖힌 방향은 가로 또는 세로 방향만 가능합니다. 제공: {0}', // 'Flip direction can be only `vertical` or `horizontal`. Given: {0}', - 'exifNotSupported' => '해당 PHP 설치에서는 EXIF 데이터를 읽을 수 있도록 지원되지 않습니다.', //'Reading EXIF data is not supported by this PHP installation.', -]; diff --git a/app/Language/ko/Language.php b/app/Language/ko/Language.php deleted file mode 100644 index 18b5b6a5..00000000 --- a/app/Language/ko/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - '한 줄 가져오기는 문자열 또는 문자열이 들어있는 배열이 되어야 합니다.', // 'Get line must be a string or array of strings.', -]; diff --git a/app/Language/ko/Log.php b/app/Language/ko/Log.php deleted file mode 100644 index 126db99e..00000000 --- a/app/Language/ko/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} 경우에는 올바르지 않은 로그 레벨입니다.', // '{0} is an invalid log level.', -]; diff --git a/app/Language/ko/Migrations.php b/app/Language/ko/Migrations.php deleted file mode 100644 index 3156cad7..00000000 --- a/app/Language/ko/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - '마이그레이션 테이블은 반드시 설정되어야 합니다.', // 'Migrations table must be set.', - 'disabled' => '마이그레이션이 로드되었지만, 사용할 수 없거나 설정이 잘못되었습니다.', //'Migrations have been loaded but are disabled or setup incorrectly.', - 'notFound' => '마이그레이션 파일 찾기 실패: ', // 'Migration file not found: ', - 'batchNotFound' => '대상이 되는 batch 찾기 실패: ', // 'Target batch not found: ', - 'empty' => '마이그레이션 파일을 찾을 수 없습니다.', // 'No Migration files found', - 'gap' => '순차적인 마이그레이션 sequence 값 부근의 버전 번호 값에 차이가 있습니다.', // 'There is a gap in the migration sequence near version number: ', - 'classNotFound' => '해당 마이그레이션 클래스 "%s" 찾기 실패', // 'The migration class "%s" could not be found.', - 'missingMethod' => '해당 마이그레이션 클래스의 "%s" 메서드를 찾을 수 없습니다.', // 'The migration class is missing an "%s" method.', - - // Migration Command - 'migHelpLatest' => "\t\t데이터베이스를 사용이 가능한 최신 마이그레이션으로 마이그레이트합니다.", // "\t\tMigrates database to latest available migration.", - 'migHelpCurrent' => "\t\t환경설정에서 데이터베이스의 버전을 'current'로 마이그레이트합니다.", // "\t\tMigrates database to version set as 'current' in configuration.", - 'migHelpVersion' => "\t데이터베이스의 버전을 {v} 경우로 마이그레이트.", // "\tMigrates database to version {v}.", - 'migHelpRollback' => "\t버전을 0으로 설정하기 위해, 모든 마이그레이션들의 'down()'을 실행합니다.", // "\tRuns all migrations 'down' to version 0.", - 'migHelpRefresh' => "\t\t데이터베이스를 새로 만들기 위해서 모든 마이그레이션을 내렸다가 다시 실행합니다.", // "\t\tUninstalls and re-runs all migrations to freshen database.", - 'migHelpSeed' => "\t[name]이라고 명명된 seeder를 실행합니다.", // "\tRuns the seeder named [name].", - 'migCreate' => "\t[name]이라고 명명된 새로운 마이그레이션을 생성합니다.", // "\tCreates a new migration named [name]", - 'nameMigration' => '마이그레이션 파일 이름 지정', // 'Name the migration file', - 'badCreateName' => '반드시 마이그레이션 파일명이 지정되어야 합니다.', // 'You must provide a migration file name.', - 'writeError' => '파일 생성 시도 중에 에러 발생', // 'Error trying to create file.', - 'migNumberError' => '마이그레이션 숫자 값은 반드시 세 자리 숫자 값이어야 합니다. 그리고 순차적인 마이그레이션 값에 간격이 없어야 합니다.', // 'Migration number must be three digits, and there must not be any gaps in the sequence.', - - 'latest' => '새로운 모든 마이그레이션들을 실행 중...', // 'Running all new migrations...', - 'generalFault' => '마이그레이션 실패!', // 'Migration failed!', - 'migInvalidVersion' => '유효하지 않은 숫자 버전 값이 지정되었습니다.', // 'Invalid version number provided.', - 'toVersionPH' => '버전 %s 경우로 마이그레이션 중...', // 'Migrating to version %s...', - 'toVersion' => '현재 버전으로 마이그레이션 중...', // 'Migrating to current version...', - 'rollingBack' => '일괄적으로 마이그레이션을 되돌리는 중: ', // 'Rolling back migrations to batch: ', - 'noneFound' => '마이그레이션을 찾지 못했습니다.', // 'No migrations were found.', - 'on' => '마이그레이션 대상: ', // 'Migrated On: ', - 'migSeeder' => 'Seeder 명', // 'Seeder name', - 'migMissingSeeder' => '반드시 Seeder 명을 지정하여야 합니다.', // 'You must provide a seeder name.', - 'removed' => '되돌리기: ', // 'Rolling back: ', - 'added' => '실행 중: ', // 'Running: ', - - 'version' => '버전', // 'Version', - 'filename' => '파일명', // 'Filename', -]; diff --git a/app/Language/ko/Number.php b/app/Language/ko/Number.php deleted file mode 100644 index be3f1e1e..00000000 --- a/app/Language/ko/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' thousand(천)', // ' thousand', - 'million' => ' million(백만)', // ' million', - 'billion' => ' billion(십억)', // ' billion', - 'trillion' => ' trillion(조)', // ' trillion', - 'quadrillion' => ' quadrillion(천조)', // ' quadrillion', -]; diff --git a/app/Language/ko/Pager.php b/app/Language/ko/Pager.php deleted file mode 100644 index b47b36b0..00000000 --- a/app/Language/ko/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - '페이지 내비게이션', // 'Page navigation', - 'first' => '처음', // 'First', - 'previous' => '이전', // 'Previous', - 'next' => '다음', // 'Next', - 'last' => '마지막', // 'Last', - 'older' => '과거', // 'Older', - 'newer' => '최근', // 'Newer', - 'invalidTemplate' => '{0}의 경우는 유효하지 않은 Pager 템플릿입니다.', // '{0} is not a valid Pager template.', - 'invalidPaginationGroup' => '{0}의 경우는 유효하지 않은 Pagination 그룹입니다.', // '{0} is not a valid Pagination group.', -]; diff --git a/app/Language/ko/RESTful.php b/app/Language/ko/RESTful.php deleted file mode 100644 index 51af2153..00000000 --- a/app/Language/ko/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" 동작이 구현되지 않았습니다.', // '"{0}" action not implemented.', -]; diff --git a/app/Language/ko/Redirect.php b/app/Language/ko/Redirect.php deleted file mode 100644 index f833f31b..00000000 --- a/app/Language/ko/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} 쪽으로 페이지 전환을 할 수 없습니다. 에러 상태 코드 : "{1}"', // 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/ko/Router.php b/app/Language/ko/Router.php deleted file mode 100644 index eef7f60e..00000000 --- a/app/Language/ko/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - '파라미터가 예상한 타입으로 매치되지 않았습니다.', // 'A parameter does not match the expected type.', - 'missingDefaultRoute' => '어떤 페이지를 표시해야 하는지 결정할 수 없습니다. 라우팅 파일에 기본 경로가 지정되지 않았습니다.', // 'Unable to determine what should be displayed. A default route has not been specified in the routing file.', -]; diff --git a/app/Language/ko/Session.php b/app/Language/ko/Session.php deleted file mode 100644 index d2ea247b..00000000 --- a/app/Language/ko/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '데이터베이스 세션 핸들러가 동작하기 위해서, 반드시 `sessionSavePath`에 테이블 명이 지정되어야 합니다.', // '`sessionSavePath` must have the table name for the Database Session Handler to work.', - 'invalidSavePath' => 'Session: 설정된 세션 저장 경로 "{0}"의 경우, 디렉터리가 아니거나 존재하지 않거나 생성할 수 없습니다.', // 'Session: Configured save path "{0}" is not a directory, does not exist or cannot be created.', - 'writeProtectedSavePath' => 'Session: 설정된 세션 저장 경로 "{0}"의 경우, PHP 프로세스에 의해 쓰기를 할 수 없습니다.', // 'Session: Configured save path "{0}" is not writable by the PHP process.', - 'emptySavePath' => 'Session: 저장 경로가 설정되어 있지 않습니다.', // 'Session: No save path configured.', - 'invalidSavePathFormat' => 'Session: 유효하지 않는 Redis 세션 저장 경로 형식: {0}', // 'Session: Invalid Redis save path format: {0}', -]; diff --git a/app/Language/ko/Time.php b/app/Language/ko/Time.php deleted file mode 100644 index ef880bd6..00000000 --- a/app/Language/ko/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - '"월"은 1에서 12가 되어야 합니다. 지정한 값: {0}', // 'Months must be between 1 and 12. Given: {0}', - 'invalidDay' => '"일"은 1에서 31이 되어야 합니다. 지정한 값: {0}', // 'Days must be between 1 and 31. Given: {0}', - 'invalidOverDay' => '"일"은 1에서 {0}경우가 되어야 합니다. 지정한 값: {1}', // 'Days must be between 1 and {0}. Given: {1}', - 'invalidHours' => '"시간"은 0에서 23이 되어야 합니다. 지정한 값: {0}', // 'Hours must be between 0 and 23. Given: {0}', - 'invalidMinutes' => '"분"은 0에서 59가 되어야 합니다. 지정한 값: {0}', // 'Minutes must be between 0 and 59. Given: {0}', - 'invalidSeconds' => '"초"는 0에서 59가 되어야 합니다. 지정한 값: {0}', // 'Seconds must be between 0 and 59. Given: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '과거 {0} 전에', // '{0} ago', - 'inFuture' => '앞으로 {0} 이내에', // 'in {0}', - 'yesterday' => '어제', // 'Yesterday', - 'tomorrow' => '내일', // 'Tomorrow', - 'now' => '현재', // 'Just now', -]; diff --git a/app/Language/ko/Validation.php b/app/Language/ko/Validation.php deleted file mode 100644 index 3bf9ced4..00000000 --- a/app/Language/ko/Validation.php +++ /dev/null @@ -1,97 +0,0 @@ - 'Validation 설정에서 지정된 규칙 집합이 없습니다.', // 'No rulesets specified in Validation configuration.', - 'ruleNotFound' => '{0} 경우는 유효한 규칙이 아닙니다.', // '{0} is not a valid rule.', - 'groupNotFound' => '{0} 경우는 유효성 규칙 그룹이 아닙니다.', // '{0} is not a validation rules group.', - 'groupNotArray' => '{0} 규칙 그룹은 반드시 배열이어야 합니다.', // '{0} rule group must be an array.', - 'invalidTemplate' => '{0} 경우는 유효한 Validation 템플릿이 아닙니다.', // '{0} is not a valid Validation template.', - - // Rule Messages - 'alpha' => '{field} 필드에는 알파벳 문자만 포함시킬 수 있습니다.', // 'The {field} field may only contain alphabetical characters.', - 'alpha_dash' => '{field} 필드에는 알파벳 문자, 밑줄(_) 그리고 붙임표(-)만 포함시킬 수 있습니다.', // 'The {field} field may only contain alpha-numeric characters, underscores, and dashes.', - 'alpha_numeric' => '{field} 필드에는 알파벳, 숫자만 포함시킬 수 있습니다.', // 'The {field} field may only contain alpha-numeric characters.', - 'alpha_numeric_punct' => '{field} 필드에는 알파벳, 공백, ~ ! # $ % & * - _ + = | : . 문자만 포함할 수 있습니다.', // 'The {field} field may contain only alphanumeric characters, spaces, and ~ ! # $ % & * - _ + = | : . characters.', - 'alpha_numeric_space' => '{field} 필드에는 알파벳, 숫자 그리고 공백만 포함시킬 수 있습니다.', // 'The {field} field may only contain alpha-numeric characters and spaces.', - 'alpha_space' => '{field} 필드에는 알파벳과 공백만 포함시킬 수 있습니다.', // 'The {field} field may only contain alphabetical characters and spaces.', - 'decimal' => '{field} 필드에는 소수(decimal number)만 포함시킬 수 있습니다.', // 'The {field} field must contain a decimal number.', - 'differs' => '{field} 필드는 {param} 필드와 서로 달라야 합니다.', // 'The {field} field must differ from the {param} field.', - 'equals' => '{field} 필드와 {param} 필드는 서로 같아야 합니다.', // 'The {field} field must be exactly: {param}.', - 'exact_length' => '{field} 필드의 길이는 {param} 이어야 합니다.', // 'The {field} field must be exactly {param} characters in length.', - 'greater_than' => '{field} 필드 값은 {param}보다 커야 합니다.', // 'The {field} field must contain a number greater than {param}.', - 'greater_than_equal_to' => '{field} 필드 값은 {param} 이상이어야 합니다.', // 'The {field} field must contain a number greater than or equal to {param}.', - 'hex' => '{field} 필드에는 16진수만 포함할 수 있습니다.', // 'The {field} field may only contain hexidecimal characters.', - 'in_list' => '{field} 필드는 반드시 {param} 중에 하나여야 합니다.', // 'The {field} field must be one of: {param}.', - 'integer' => '{field} 필드는 정수여야 합니다.', // 'The {field} field must contain an integer.', - 'is_natural' => '{field} 필드는 숫자여야 합니다.', // 'The {field} field must only contain digits.', - 'is_natural_no_zero' => '{field} 필드는 0보다 큰 숫자여야 합니다.', // 'The {field} field must only contain digits and must be greater than zero.', - 'is_not_unique' => '{field} 필드에는 데이터베이스에 존재하는 기존 값을 포함해야 합니다.', // 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => '{field} 필드는 유일한 값이어야 합니다.', // 'The {field} field must contain a unique value.', - 'less_than' => '{field} 필드 값은 {param}보다 작아야 합니다.', // 'The {field} field must contain a number less than {param}.', - 'less_than_equal_to' => '{field} 필드 값은 {param} 이하여야 합니다.', // 'The {field} field must contain a number less than or equal to {param}.', - 'matches' => '{field} 필드와 {param} 필드가 서로 일치하지 않습니다.', // 'The {field} field does not match the {param} field.', - 'max_length' => '{field} 길이는 {param} 글자 수를 초과할 수 없습니다.', // 'The {field} field cannot exceed {param} characters in length.', - 'min_length' => '{field} 길이는 적어도 {param} 글자 수보다 커야 합니다.', // 'The {field} field must be at least {param} characters in length.', - 'not_equals' => '{field} 필드는 다음이 될 수 없습니다: {param}', // 'The {field} field cannot be: {param}.', - 'numeric' => '{field} 필드는 오직 숫자만 포함되어야 합니다.', // 'The {field} field must contain only numbers.', - 'regex_match' => '{field} 필드의 형식이 맞지 않습니다.', // 'The {field} field is not in the correct format.', - 'required' => '{field} 필드가 있어야 합니다.', // 'The {field} field is required.', - 'required_with' => '{field} 필드는 {param} 값이 있을 때, 해당 필드가 있어야 합니다.', // 'The {field} field is required when {param} is present.', - 'required_without' => '{field} 필드는 {param} 값이 없을 때, 해당 필드가 있어야 합니다.', // 'The {field} field is required when {param} is not present.', - 'timezone' => '{field} 필드는 반드시 유요한 시간대(timezone)이어야 합니다.', // 'The {field} field must be a valid timezone.', - 'valid_base64' => '{field} 필드는 유효한 base64문자열이어야 합니다.', // 'The {field} field must be a valid base64 string.', - 'valid_email' => '{field} 필드 값은 유효한 이메일 주소이어야 합니다.', // 'The {field} field must contain a valid email address.', - 'valid_emails' => '{field} 필드의 값들은 유효한 이메일 주소이어야 합니다.', // 'The {field} field must contain all valid email addresses.', - 'valid_ip' => '{field} 필드 값은 유요한 IP 주소이어야 합니다.', // 'The {field} field must contain a valid IP.', - 'valid_url' => '{field} 필드 값은 유요한 URL 주소이어야 합니다.', // 'The {field} field must contain a valid URL.', - 'valid_date' => '{field} 필드 값은 유요한 날짜여야 합니다.', // 'The {field} field must contain a valid date.', - - // Credit Cards - 'valid_cc_num' => '{field}의 값은 잘못된 신용카드 번호입니다.', // '{field} does not appear to be a valid credit card number.', - - // Files - 'uploaded' => '{field} 업로드 파일이 올바르지 않습니다.', // '{field} is not a valid uploaded file.', - 'max_size' => '{field} 파일이 너무 큽니다.', // '{field} is too large of a file.', - 'is_image' => '{field} 파일이 유효한 이미지 파일이 아닙니다.', // '{field} is not a valid, uploaded image file.', - 'mime_in' => '{field} 경우, 유효한 MIME 타입을 갖고 있지 않습니다.', // '{field} does not have a valid mime type.', - 'ext_in' => '{field} 경우, 유요한 파일 확장자를 갖고 있지 않습니다.', // '{field} does not have a valid file extension.', - 'max_dims' => '{field} 경우, 이미지가 아니거나 이미지의 크기가 너무 넓거나 큽니다.', // '{field} is either not an image, or it is too wide or tall.', -]; diff --git a/app/Language/ko/View.php b/app/Language/ko/View.php deleted file mode 100644 index 2567bb51..00000000 --- a/app/Language/ko/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} 메서드가 유효하지 않습니다.', // '{class}::{method} is not a valid method.', - 'missingCellParameters' => '{class}::{method} 메서드가 가진 파라미터가 없습니다.', // '{class}::{method} has no params.', - 'invalidCellParameter' => '{0} 경우, 유요한 파라미터가 아닙니다.', //'{0} is not a valid param name.', - 'noCellClass' => '지원되는 뷰 셀 클래스가 아닙니다.', // 'No view cell class provided.', - 'invalidCellClass' => '뷰 셀 클래스의 위치를 찾을 수 없습니다: {0}', // 'Unable to locate view cell class: {0}.', - 'tagSyntaxError' => 'Parse 태그에 구문 오류가 있습니다: {0}', // 'You have a syntax error in your Parser tags: {0}', -]; diff --git a/app/Language/lt/CLI.php b/app/Language/lt/CLI.php deleted file mode 100644 index f0a0751b..00000000 --- a/app/Language/lt/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Komandos „{0}“ rasti nepavyko.', - 'helpUsage' => 'Naudojimas:', - 'helpDescription' => 'Aprašymas:', - 'helpOptions' => 'Parinktys:', - 'helpArguments' => 'Argumentai:', - 'invalidColor' => 'Neteisinga {0} spalva: {1}.', -]; diff --git a/app/Language/lt/Cache.php b/app/Language/lt/Cache.php deleted file mode 100644 index 85dd0659..00000000 --- a/app/Language/lt/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Laikinąjai atmintinei nepavyko rašyti į {0}', - 'invalidHandlers' => 'Laikinosios atmintinės konfigūracijos faile turi būti $validHandlers masyvas.', - 'noBackup' => 'Laikinosios atmintinės konfigūracijos faile turi būti nustatytas įvykių doroklio ir atsarginio įvykių doroklio parametras.', - 'handlerNotFound' => 'Laikinosios atmintinės knfigūracijos faile nurodytas neteisingas įvykių doroklio ar atsarginio įvykių doroklio parametras.', -]; diff --git a/app/Language/lt/Cast.php b/app/Language/lt/Cast.php deleted file mode 100644 index 629e62e0..00000000 --- a/app/Language/lt/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Viršytas maksimalus dėklo gylis', - 'jsonErrorStateMismatch' => 'Nepakankama tėkmė arba režimų neatitiimas', - 'jsonErrorCtrlChar' => 'Aptiktas nelauktas kontrolės simbolis', - 'jsonErrorSyntax' => 'Sintaksės klaida, netesingai suformuotas JSON', - 'jsonErrorUtf8' => 'Neteisingi UTF-8 simboliai, JSON gali būti neteisingai užkoduotas', - 'jsonErrorUnknown' => 'Nežinoma klaida', -]; diff --git a/app/Language/lt/Core.php b/app/Language/lt/Core.php deleted file mode 100644 index 5f471a5b..00000000 --- a/app/Language/lt/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Neteisingas failas: {0}', - 'copyError' => 'Bandant pakeisti failą ({0}) susidurta su klaida. Prašome patikrinti, ar galima rašyti į direktoriją, kurioje yra failas.', - 'missingExtension' => '{0} praplėtimas nėra įkeltas.', - 'noHandlers' => '{0} turi teikti bent vieną doroklį.', -]; diff --git a/app/Language/lt/Database.php b/app/Language/lt/Database.php deleted file mode 100644 index 7bf22154..00000000 --- a/app/Language/lt/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} nėra teisingas modelio įvykio iškviečiamasis atsakas.', - 'invalidArgument' => 'Turite pateikti teisingą {0}.', - 'invalidAllowedFields' => 'Leidžiami laukai turi būti nurodyti modeliui: {0}', - 'emptyDataset' => '{0} Nėra duomenų.', - 'failGetFieldData' => 'Nepavyko gauti lauko duomenų iš duomenų bazės.', - 'failGetIndexData' => 'Iš duomenų bazės nepavyko gauti indekso duomenų.', - 'failGetForeignKeyData' => 'Nepavyko gauti svetimojo rakto duomenų iš duomenų bazės.', - 'parseStringFail' => 'Nepavyko išanalizuoti rakto eilutės.', - 'featureUnavailable' => 'Ši savybė nėra naudojama su duomenų baze, kurią naudojate.', - 'tableNotFound' => 'Lentelės `{0}` dabartinėje duomenų bazėje nėra.', - 'noPrimaryKey' => '`{0}` modelio klasė nenurodo pirminio rakto.', - 'noDateFormat' => '`{0}` modelio klasė neturi teisingo dateFormat.', - 'fieldNotExists' => 'Nepavyko rasti lauko `{0}`.', - 'forEmptyInputGiven' => 'Laukui `{0}` pateiktas tuščias teiginys', - 'forFindColumnHaveMultipleColumns' => 'Stulpelio pavadinimą leidžiama sudaryti iš vieno stulpelio.', -]; diff --git a/app/Language/lt/Email.php b/app/Language/lt/Email.php deleted file mode 100644 index 5592c59a..00000000 --- a/app/Language/lt/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'El. adreso patikrinimo metodui turi būti perduotas masyvas.', - 'invalidAddress' => 'Nevalidus el. pašto adresas: {0}', - 'attachmentMissing' => 'Nepavyksta rasti šio el. laiško priedo: {0}', - 'attachmentUnreadable' => 'Nepavyksta atverti šio priedo: {0}', - 'noFrom' => 'Negalima siųsti el. laiško be „From“ antraštės.', - 'noRecipients' => 'Turite įtraukti gavėjus: To, Cc, arba Bcc', - 'sendFailurePHPMail' => 'Nepavyksta siųsti laiško naudojant PHP mail() funkciją. Jūsų serveris greičiausiai nesukonfigūruotas siųsti laiškus šiuo metodu.', - 'sendFailureSendmail' => 'Nepavyksta siųsti laiško naudojant PHP Sendmail funkciją. Jūsų serveris greičiausiai nesukonfigūruotas siųsti laiškus šiuo metodu.', - 'sendFailureSmtp' => 'Nepavyksta siųsti laiško naudojant PHP SMTP funkciją. Jūsų serveris greičiausiai nesukonfigūruotas siųsti laiškus šiuo metodu.', - 'sent' => 'Jūsų laiškas buvo išsiųstas naudojant šį protokolą: {0}', - 'noSocket' => 'Nepavyksta atverti lizdo į Sendmail. Prašome patikrinti nustatymus.', - 'noHostname' => 'Jūs nenurodėte SMTP mazgo pavadinimo.', - 'SMTPError' => 'Buvo susidurta su šia SMTP klaida: {0}', - 'noSMTPAuth' => 'Klaida: turite nurodyti SMTP vartotojo vardą ir slaptažodį.', - 'failedSMTPLogin' => 'Nepavyko išsiųsti AUTH LOGIN komandos. Klaida: {0}', - 'SMTPAuthUsername' => 'Nepavyko autentifikuotis šiuo vardu. Klaida: {0}', - 'SMTPAuthPassword' => 'Nepavyko autentifikuotis šiuo slaptažodžiu. Klaida: {0}', - 'SMTPDataFailure' => 'Nepavyko išsiųsti duomenų: {0}', - 'exitStatus' => 'Išėjimo būklės kodas: {0}', -]; diff --git a/app/Language/lt/Encryption.php b/app/Language/lt/Encryption.php deleted file mode 100644 index 319e6c69..00000000 --- a/app/Language/lt/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Neužprašytas valdiklis; panelė Deizė bus labai nuliūdusi!', - 'noHandlerAvailable' => 'Nepavyksta rasti prieinamo {0} šifravimo doroklio.', - 'unKnownHandler' => '„{0}“ negali būti konfigūruotas.', - 'starterKeyNeeded' => 'Šifruokliui reikia starterio rakto.', - 'authenticationFailed' => 'Dešifravimas: autentifikavimas nepavyko.', - 'encryptionFailed' => 'Užšifruoti nepavyko.', -]; diff --git a/app/Language/lt/Entity.php b/app/Language/lt/Entity.php deleted file mode 100644 index a739fd4b..00000000 --- a/app/Language/lt/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Bandoma pasiekti neegzistuojančią {1} savybę {0}', -]; diff --git a/app/Language/lt/Files.php b/app/Language/lt/Files.php deleted file mode 100644 index b16261c9..00000000 --- a/app/Language/lt/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Failo rasti nepavyko: {0}', - 'cannotMove' => 'Nepavyko perkelti failo {0} į {1} ({2})', -]; diff --git a/app/Language/lt/Filters.php b/app/Language/lt/Filters.php deleted file mode 100644 index 7110e1f0..00000000 --- a/app/Language/lt/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} filtras turi turėti nustatytą slapyvardį.', - 'incorrectInterface' => '{0} turi įgyvendinti CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/lt/Format.php b/app/Language/lt/Format.php deleted file mode 100644 index 3ae760b6..00000000 --- a/app/Language/lt/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Nepavyko nuskaityti json eilutės, klaida: „{0}“.', - 'missingExtension' => 'XML formatavimui reikalingas SimpleXML praplėtimas.', -]; diff --git a/app/Language/lt/HTTP.php b/app/Language/lt/HTTP.php deleted file mode 100644 index 9023f72e..00000000 --- a/app/Language/lt/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'Norint naudoti CURLRequest klasę CURL turi būti įgalintas.', - 'invalidSSLKey' => 'Nepavyksta nustatyti SSL rakto. {0} nėra taisyklingas failas.', - 'sslCertNotFound' => 'SSL sertifikatas narastas adresu: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} nėra taisyklingas derybų tipas. Turi būti vienas iš: media, simbolių rinkinys, koduotė, kalba.', - - // Message - 'invalidHTTPProtocol' => 'Neteisinga HTTP protokolo versija. Turi būti viena iš: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Visoms deryboms turite pateikti palaikomas reikšmes.', - - // RedirectResponse - 'invalidRoute' => '{0} maršrutas negali būti nustatytas antvirkštinio maršrutizavimo metu.', - - // DownloadResponse - 'cannotSetBinary' => 'Nustatant failo kelią negali būti naudojama dvejetainė reikšmė.', - 'cannotSetFilepath' => 'Nustatant dvejetainę reikšmę negalima nustatyti failo kelio: {0}', - 'notFoundDownloadSource' => 'Nerastas atsiuntimo turinio šaltinis.', - 'cannotSetCache' => 'Nepalaiko padėjimo (caching) atsiuntimui.', - 'cannotSetStatusCode' => 'Nepalaiko pakeisto statuso kodo atsiuntimo tvarkymui. Kodas: {0}, priežastis: {1}', - - // Response - 'missingResponseStatus' => 'HTTP atsakui trūksta statuso kodo', - 'invalidStatusCode' => '{0} nėra teisingas HTTP atsako statuso kodas', - 'unknownStatusCode' => 'Nežinomas HTTP statuso kodas pateiktas be pranešimo: {0}', - - // URI - 'cannotParseURI' => 'Nepavyko išnagrinėti URI: {0}', - 'segmentOutOfRange' => 'Užklausos URI segmentas ne reikšmių aibės ribose: {0}', - 'invalidPort' => 'Prievadų numeriai turi būti tarp 0 ir 65535. Gautasis: {0}', - 'malformedQueryString' => 'Užklausų eilutės turi neįtraukti URI fragmentų.', - - // Page Not Found - 'pageNotFound' => 'Puslapis nerastas', - 'emptyController' => 'Nenurodytas kontroleris.', - 'controllerNotFound' => 'Kontroleris arba jo metodas nerastas: {0}::{1}', - 'methodNotFound' => 'Kontrolerio metodas nerastas: {0}', - - // CSRF - 'disallowedAction' => 'Veiksmas, kurio prašote, neleistinas.', - - // Uploaded file moving - 'alreadyMoved' => 'Įkeltasis failas jau perkeltas.', - 'invalidFile' => 'Pirminis failas nėra teisingas failas.', - 'moveFailed' => 'Nepavyko perkelti failo {0} į {1} ({2})', - - 'uploadErrOk' => 'Failas įkeltas sėkmingai.', - 'uploadErrIniSize' => 'Failo „%s“ dydis viršija jūsų upload_max_filesize ini direktyvą.', - 'uploadErrFormSize' => 'Failo „%s“ dydis viršija formoje nurodytą maksimalų failo dydį.', - 'uploadErrPartial' => 'Failas „%s“ buvo tik dalinai įkeltas.', - 'uploadErrNoFile' => 'Nebuvo įkeltas joks failas.', - 'uploadErrCantWrite' => 'Failo„%s“ nepavyko įrašyti į diską.', - 'uploadErrNoTmpDir' => 'Failo įkelti nepavyko: nėra laikinosios direktorijos.', - 'uploadErrExtension' => 'Failo įkėlimą sustabdė PHP išplėtimas.', - 'uploadErrUnknown' => 'Failo „%s“ nepavyko įkelti dėl nežinomos klaidos.', -]; diff --git a/app/Language/lt/Images.php b/app/Language/lt/Images.php deleted file mode 100644 index a9528dde..00000000 --- a/app/Language/lt/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Turite nurodyti šaltinio paveikslėlį nustatymuose.', - 'gdRequired' => 'Norint naudoti šią savybę reikalinga GD paveikslėlių biblioteka.', - 'gdRequiredForProps' => 'Norint nustatyti paveikslėlių savybes serveris turi palaikyti GD paveikslėlių biblioteką.', - 'gifNotSupported' => 'GIF paveikslėliai dažnai nėra palaikomi dėl licenzijavimo apribojimų. Vietoje jų gali tekti naudoti JPG arba PNG paveikslėlius.', - 'jpgNotSupported' => 'JPG paveikslėliai nepalaikomi.', - 'pngNotSupported' => 'PNG paveikslėliai nepalaikomi.', - 'unsupportedImageCreate' => 'Serveris nepalaiko GD funkcijos, kurios reikia šio paveikslėlio apdorojimui.', - 'jpgOrPngRequired' => 'Paveikslėlių dydžio keitimo protokolas, nurodytas Jūsų nustatymuose, veikia tik su JPG arba PNG paveikslėlių tipais.', - 'rotateUnsupported' => 'Paveikslėlių sukimas atrodo nėra palaikomas serverio.', - 'libPathInvalid' => 'Paveikslėlių apdorojimo bibliotekos kelias neteisingas. Prašome paveikslėlių nustatymuose nurodyti teisingą kelią. {0, string)', - 'imageProcessFailed' => 'Paveikslėlio apdorojimas nepavyko. Prašome įsitikinti, kad serveris palaiko pasirinktą protokolą, ir kad kelias iki paveikslėlių bibliotekos nurodytas teisingai.', - 'rotationAngleRequired' => 'Paveikslėlio pasukimui reikia nurodyti sukimo kampą.', - 'invalidPath' => 'Paveikslėlio kelias nurodytas neteisingai.', - 'copyFailed' => 'Paveikslėlio kopijavimas nepavyko.', - 'missingFont' => 'Nepavyksta rasti naudotino šrifto.', - 'saveFailed' => 'Nepavyko išsaugoti paveikslėlio. Prašome įsitikinti, kad į paveikslėlio vardą ir direktoriją galima rašyti.', - 'invalidDirection' => 'Apvertimo kryptis gali būti arba `vertical`, arba `horizontal`. Nurodyta: {0}', - 'exifNotSupported' => 'Serverio PHP nepalaiko EXIF duomenų skaitymo.', -]; diff --git a/app/Language/lt/Language.php b/app/Language/lt/Language.php deleted file mode 100644 index fd78f574..00000000 --- a/app/Language/lt/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get eilutė turi būti eilutės arba eilučių masyvo tipo.', -]; diff --git a/app/Language/lt/Log.php b/app/Language/lt/Log.php deleted file mode 100644 index 42001b5d..00000000 --- a/app/Language/lt/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} yra netinkamas žurnalo įrašo lygmuo.', -]; diff --git a/app/Language/lt/Migrations.php b/app/Language/lt/Migrations.php deleted file mode 100644 index 8791bbf6..00000000 --- a/app/Language/lt/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - 'Turi būti nustatyta migracijų lentelė.', - 'disabled' => 'Migracijos buvo įkeltos, bet yra išjungtos, arba nustatytos neteisingai.', - 'notFound' => 'Migracijų failas nerastas: ', - 'batchNotFound' => 'Tikslinis paketas nerastas: ', - 'empty' => 'Nerasta migracijų failų', - 'gap' => 'Migracijų sekoje netoli versijos numerio yra tarpas: ', - 'classNotFound' => 'Migracijos klasė „%s“ nerasta.', - 'missingMethod' => 'Migracijos klasei trūksta „%s“ metodo.', - - // Migration Command - 'migHelpLatest' => "\t\tMigruoja duomenų bazes naudojant vėliausią prieinamą migraciją.", - 'migHelpCurrent' => "\t\tMigruoja duomenų bazę iki versijos, kuri konfigūracijoje nurodyta kaip 'current'.", - 'migHelpVersion' => "\tMigruoja duomenų bazę iki versijos {v}.", - 'migHelpRollback' => "\tVykdo visas migracijas 'down' iki versijos 0.", - 'migHelpRefresh' => "\t\tIšinstaliuoja ir iš naujo įvykdo visas migracijas siekiant atšviežinti duomenų bazę.", - 'migHelpSeed' => "\tvykdo sėjiką, pavadintą [name].", - 'migCreate' => "\tSukuria naują migraciją vardu [name]", - 'nameMigration' => 'Įvardinkite migracijos failą', - 'badCreateName' => 'Turite nurodyti migracijos failo vardą.', - 'writeError' => 'Klaida bandant sukurti failą.', - 'migNumberError' => 'Migracijos numerį turi sudaryti trys skaitmenys, o jų sekoje neturi būti jokių tarpų.', - - 'latest' => 'Vykdomos visos migracijos...', - 'generalFault' => 'Migracijos nepavyko!', - 'migInvalidVersion' => 'Nurodytas neteisingas versijos numeris.', - 'toVersionPH' => 'Migruojama iki versijos %s...', - 'toVersion' => 'Migruojama iki dabartinės versijos...', - 'rollingBack' => 'Migracijos anuliuojamos iki paketo: ', - 'noneFound' => 'Nerasta migracijų.', - 'on' => 'Migruota: ', - 'migSeeder' => 'Sėjiko vardas', - 'migMissingSeeder' => 'Turite nurodyti sėjimo vardą.', - 'removed' => 'Anuliuojama: ', - 'added' => 'Vykdoma: ', - - 'version' => 'Versija', - 'filename' => 'Failo pavadinimas', -]; diff --git a/app/Language/lt/Number.php b/app/Language/lt/Number.php deleted file mode 100644 index 70d7d485..00000000 --- a/app/Language/lt/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Baitai', - - // don't forget the space in front of these! - 'thousand' => ' tūkstantis', - 'million' => ' milijonas', - 'billion' => ' milijardas', - 'trillion' => ' trilijonas', - 'quadrillion' => ' kvadriljonas', -]; diff --git a/app/Language/lt/Pager.php b/app/Language/lt/Pager.php deleted file mode 100644 index 98c1bb2d..00000000 --- a/app/Language/lt/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Puslapio navigacija', - 'first' => 'pirmas', - 'previous' => 'ankstesnis', - 'next' => 'kitas', - 'last' => 'paskutinis', - 'older' => 'senesnis', - 'newer' => 'naujesnis', - 'invalidTemplate' => '{0} nėra teisingas puslapiuotojo šablonas.', - 'invalidPaginationGroup' => '{0} nėra teisinga puslapiavimo grupė.', -]; diff --git a/app/Language/lt/RESTful.php b/app/Language/lt/RESTful.php deleted file mode 100644 index a40becfb..00000000 --- a/app/Language/lt/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" veiksmas neįgyvendintas.', -]; diff --git a/app/Language/lt/Redirect.php b/app/Language/lt/Redirect.php deleted file mode 100644 index a0ea9409..00000000 --- a/app/Language/lt/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - ' Nepavyksta nukreipti „{0}“. Klaidos kodas „{1}“', -]; diff --git a/app/Language/lt/Router.php b/app/Language/lt/Router.php deleted file mode 100644 index 3b80ab8b..00000000 --- a/app/Language/lt/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parametras neatitinka laukiamo tipo.', - 'missingDefaultRoute' => 'Nepavyksta nustatyti, kas turi būti rodoma. Maršrutizavimo faile nėra nustatytas numatytasis maršrutas.', -]; diff --git a/app/Language/lt/Session.php b/app/Language/lt/Session.php deleted file mode 100644 index 61301d71..00000000 --- a/app/Language/lt/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Norint, kad duomenų bazės doroklė veiktų, `sessionSavePath` turi turėti duomenų bazės lentelės pavadinimą.', - 'invalidSavePath' => 'Sesija: konfigūracijoje nustatytas įrašymo kelias „{0}“ nėra direktorija, neegzistuoja arba negali būti sukurtas.', - 'writeProtectedSavePath' => 'Sesija: konfigūracijoje nustatytas įrašymo kelias „{0}“ nėra prieinamas php procesui įrašymui.', - 'emptySavePath' => 'Sesija: konfigūracijoje nenustatytas įrašymo kelias.', - 'invalidSavePathFormat' => 'Sesija: negaliojantis Redis įrašymo kelio formatas: {0}', -]; diff --git a/app/Language/lt/Time.php b/app/Language/lt/Time.php deleted file mode 100644 index c268f602..00000000 --- a/app/Language/lt/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Menesių reikšmės gali būti nuo 1 iki 12. Įrašyta: {0}', - 'invalidDay' => 'Dienų reikšmės gali būti nuo 1 iki 31. Įrašyta: {0}', - 'invalidOverDay' => 'Dienų reikšmės gali būti nuo 1 iki {0}. Įrašyta: {1}', - 'invalidHours' => 'Valandų reikšmės gali būti nuo 0 iki 23. Įrašyta: {0}', - 'invalidMinutes' => 'Minučių reikšmės gali būti nuo 0 iki 59. Įrašyta: {0}', - 'invalidSeconds' => 'Sekundžių reikšmės gali būti nuo 0 iki 59. Įrašyta: {0}', - 'years' => '{0, plural, =1{# metai} other{# metai}}', - 'months' => '{0, plural, =1{# mėnuo} other{# mėnesiai}}', - 'weeks' => '{0, plural, =1{# savaitė} other{# savaitės}}', - 'days' => '{0, plural, =1{# diena} other{# dienos}}', - 'hours' => '{0, plural, =1{# valanda} other{# valandos}}', - 'minutes' => '{0, plural, =1{# minutė} other{# minutės}}', - 'seconds' => '{0, plural, =1{# sekundė} other{# sekundės}}', - 'ago' => 'prieš {0}', - 'inFuture' => 'po {0}', - 'yesterday' => 'Vakar', - 'tomorrow' => 'Rytoj', - 'now' => 'Dabar', -]; diff --git a/app/Language/lt/Validation.php b/app/Language/lt/Validation.php deleted file mode 100644 index 2e2dd142..00000000 --- a/app/Language/lt/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'Validavimo konfigūracijoje nenurodyta jokių taisyklių.', - 'ruleNotFound' => '{0} nėra tinkama taisyklė.', - 'groupNotFound' => '{0} nėra validavimo taisyklių grupė.', - 'groupNotArray' => '{0} taisyklių grupė turi būti masyvas.', - 'invalidTemplate' => '{0} nėra tinkamas validavimo šablonas.', - - // Rule Messages - 'alpha' => 'Lauke {field} gali būti tik abėcėlės raidės.', - 'alpha_dash' => 'Lauke {field} gali būti tik raidės, skaičiai, brūkšneliai ir apatiniai brūkšneliai.', - 'alpha_numeric' => 'Lauke {field} gali būti tik raidės ir skaičiai.', - 'alpha_numeric_space' => 'Lauke {field} gali būti tik raidės, skaičiai ir tarpai.', - 'alpha_space' => 'Lauke {field} gali būti tik raidės ir tarpai.', - 'decimal' => 'Lauke {field} turi būti dešimtainis skaičius.', - 'differs' => 'Laukas {field} turi skirtis nuo {param} lauko.', - 'equals' => 'Laukas {field} turi tiksliai atitikti: {param}.', - 'exact_length' => 'Laukas {field} turi būti tiksliai {param} ženklų ilgio.', - 'greater_than' => 'Lauke {field} turi būti skaičius, didesnis nei {param}.', - 'greater_than_equal_to' => 'Lauke {field} turi būti skaičius, didesnis ar lygus {param}.', - 'in_list' => 'Lauko {field} reikšmė turi atitikti vieną iš: {param}.', - 'integer' => 'Lauke {field} gali būti tik sveikasis skaičius.', - 'is_natural' => 'Lauke {field} gali būti tik skaitmenys.', - 'is_natural_no_zero' => 'Lauke {field} gali būti tik skaitmenys, ir jo reikšmė turi būti didesnė nei nulis.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Lauke {field} turi būti unikali reikšmė.', - 'less_than' => 'Lauke {field} turi būti skaičius, mažesnis už {param}.', - 'less_than_equal_to' => 'Lauke {field} turi būti skaičius, mažesnis ar lygus {param}.', - 'matches' => 'Laukas {field} neatitinka {param} lauko.', - 'max_length' => 'Laukas {field} negali būti ilgesnis, nei {param} ženklai/-ų.', - 'min_length' => 'Lauke {field} negali būti mažiau nei {param} ženklų.', - 'not_equals' => 'Lauko {field} reikšmė negali būti {param}.', - 'numeric' => 'Lauke {field} gali būti tik skaičiai.', - 'regex_match' => 'Laulas {field} yra neteisingo formato.', - 'required' => 'Laukas {field} yra privalomas.', - 'required_with' => 'Laukas {field} yra privalomas kai yra nustatytas {param}.', - 'required_without' => 'Laukas {field} yra privalomas kai nėra nustatytas {param}.', - 'timezone' => 'Laukas {field} turi atitikti egzistuojančią laiko zoną.', - 'valid_base64' => 'Lauke {field} turi būti validi base64 eilutė.', - 'valid_email' => 'Lauke {field} turi būti teisyklingas el. pašto adresas.', - 'valid_emails' => 'Lauke {field} visi el. pašto adresai turi būti teisyklingi.', - 'valid_ip' => 'Lauke {field} turi būti taisyklingas IP adresas.', - 'valid_url' => 'Lauke {field} turi būti taisyklingas URL.', - 'valid_date' => 'Lauke {field} turi būti taisyklinga data.', - - // Credit Cards - 'valid_cc_num' => 'Nepanašu, kad lauke {field} būtų įrašytas taisyklingas kredito kortelės numeris.', - - // Files - 'uploaded' => '{field} nėra realus įkeltas failas.', - 'max_size' => '{field} failas yra per didelis.', - 'is_image' => '{field} nėra taisyklingas įkeltas paveikslėlis.', - 'mime_in' => '{field} nėra taisyklingo mime tipo.', - 'ext_in' => '{field} neturi taisyklingo failo praplėtimo.', - 'max_dims' => '{field} nėra paveikslėlis, arba paveikslėlis yra per platus ar per aukštas.', -]; diff --git a/app/Language/lt/View.php b/app/Language/lt/View.php deleted file mode 100644 index d50749ee..00000000 --- a/app/Language/lt/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} nėra teisingas metodas.', - 'missingCellParameters' => '{class}::{method} neturi parametrų.', - 'invalidCellParameter' => '{0} nėra teisingas parametro pavadinimas.', - 'noCellClass' => 'Nenurodyta peržiūros užklausos klasė.', - 'invalidCellClass' => 'Nepavyksta rasti peržiūros užklausos klasės: {0}.', - 'tagSyntaxError' => 'Analizatoriaus žymose yra sintaksės klaida: {0}', -]; diff --git a/app/Language/ml/CLI.php b/app/Language/ml/CLI.php deleted file mode 100644 index b0505db7..00000000 --- a/app/Language/ml/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - '"{0}" കമാൻഡ് കണ്ടെത്തിയില്ല.', - 'helpUsage' => 'ഉപയോഗം:', - 'helpDescription' => 'വിവരണം:', - 'helpOptions' => 'ഓപ്ഷനുകൾ:', - 'helpArguments' => 'വാദങ്ങൾ:', - 'invalidColor' => 'അസാധുവായ {0} നിറം: {1}.', -]; diff --git a/app/Language/ml/Cache.php b/app/Language/ml/Cache.php deleted file mode 100644 index e6b8e5b6..00000000 --- a/app/Language/ml/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'കാഷെ {0} ലേക്ക് എഴുതാൻ കഴിയുന്നില്ല', - 'invalidHandlers' => 'കാഷെ കോൺഫിഗറേഷന് $ validHandlers ന്റെ ഒരു നിര ഉണ്ടായിരിക്കണം.', - 'noBackup' => 'കാഷെ കോൺഫിഗറേഷന് ഒരു ഹാൻഡ്‌ലറും ബാക്കപ്പ് ഹാൻഡ്‌ലർ സെറ്റും ഉണ്ടായിരിക്കണം.', - 'handlerNotFound' => 'കാഷെ കോൺഫിഗറേഷനിൽ അസാധുവായ ഹാൻഡ്‌ലർ അല്ലെങ്കിൽ ബാക്കപ്പ് ഹാൻഡ്‌ലർ വ്യക്തമാക്കിയിട്ടുണ്ട്.', -]; diff --git a/app/Language/ml/Cast.php b/app/Language/ml/Cast.php deleted file mode 100644 index b2ae40c5..00000000 --- a/app/Language/ml/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'പരമാവധി സ്റ്റാക്ക് ഡെപ്ത് കവിഞ്ഞു', - 'jsonErrorStateMismatch' => 'അണ്ടർ‌ഫ്ലോ അല്ലെങ്കിൽ‌ മോഡുകൾ‌ പൊരുത്തപ്പെടുന്നില്ല', - 'jsonErrorCtrlChar' => 'അപ്രതീക്ഷിത നിയന്ത്രണ പ്രതീകം കണ്ടെത്തി', - 'jsonErrorSyntax' => 'വാക്യഘടന പിശക്, കേടായ JSON', - 'jsonErrorUtf8' => 'തെറ്റായ എൻ‌കോഡുചെയ്‌ത യു‌ടി‌എഫ് -8 പ്രതീകങ്ങൾ‌ കേടായി', - 'jsonErrorUnknown' => 'അജ്ഞാത പിശക്', -]; diff --git a/app/Language/ml/Core.php b/app/Language/ml/Core.php deleted file mode 100644 index a96f46d3..00000000 --- a/app/Language/ml/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'അസാധുവായ ഫയൽ: {0}', - 'copyError' => 'ഫയൽ ({0}) മാറ്റിസ്ഥാപിക്കാൻ ശ്രമിക്കുമ്പോൾ ഒരു പിശക് നേരിട്ടു. നിങ്ങളുടെ ഫയൽ ഡയറക്ടറി എഴുതാനാകുമെന്ന് ഉറപ്പാക്കുക.', - 'missingExtension' => '{0} വിപുലീകരണം ലോഡുചെയ്തിട്ടില്ല.', - 'noHandlers' => '{0} കുറഞ്ഞത് ഒരു ഹാൻഡ്‌ലറെങ്കിലും നൽകണം.', -]; diff --git a/app/Language/ml/Database.php b/app/Language/ml/Database.php deleted file mode 100644 index 2c46e218..00000000 --- a/app/Language/ml/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} സാധുവായ ഒരു മോഡൽ ഇവന്റ് കോൾബാക്ക് അല്.', - 'invalidArgument' => 'നിങ്ങൾ സാധുവായ {0} നൽകണം.', - 'invalidAllowedFields' => 'മോഡലിനായി അനുവദനീയമായ ഫീൽഡുകൾ വ്യക്തമാക്കണം: {0}', - 'emptyDataset' => '{0} ലേക്ക് ഡാറ്റയൊന്നുമില്.', - 'failGetFieldData' => 'ഡാറ്റാബേസിൽ നിന്ന് ഫീൽഡ് ഡാറ്റ നേടുന്നതിൽ പരാജയപ്പെട്ടു.', - 'failGetIndexData' => 'ഡാറ്റാബേസിൽ നിന്ന് സൂചിക ഡാറ്റ നേടുന്നതിൽ പരാജയപ്പെട്ടു.', - 'failGetForeignKeyData' => 'ഡാറ്റാബേസിൽ നിന്ന് വിദേശ കീ ഡാറ്റ നേടുന്നതിൽ പരാജയപ്പെട്ടു.', - 'parseStringFail' => 'കീ സ്ട്രിംഗ് പാഴ്‌സുചെയ്യുന്നത് പരാജയപ്പെട്ടു.', - 'featureUnavailable' => 'നിങ്ങൾ ഉപയോഗിക്കുന്ന ഡാറ്റാബേസിനായി ഈ സവിശേഷത ലഭ്യമല്ല.', - 'tableNotFound' => 'നിലവിലെ ഡാറ്റാബേസിൽ `{0}` പട്ടിക കണ്ടെത്തിയില്ല.', - 'noPrimaryKey' => '`{0}` മോഡൽ ക്ലാസ് ഒരു പ്രാഥമിക കീ വ്യക്തമാക്കുന്നില്ല.', - 'noDateFormat' => '`{0}` മോഡൽ ക്ലാസിന് സാധുവായ തീയതി ഫോർമാറ്റ് ഇല്ല.', - 'fieldNotExists' => 'ഫീൽഡ് `{0}` കണ്ടെത്തിയില്ല.', - 'forEmptyInputGiven' => '`{0}` ഫീൽഡിനായി ശൂന്യമായ പ്രസ്താവന നൽകിയിരിക്കുന്നു', - 'forFindColumnHaveMultipleColumns' => 'നിരയുടെ പേരിൽ ഒരൊറ്റ നിര മാത്രമേ അനുവദിക്കൂ.', -]; diff --git a/app/Language/ml/Email.php b/app/Language/ml/Email.php deleted file mode 100644 index 8398d718..00000000 --- a/app/Language/ml/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'ഇമെയിൽ മൂല്യനിർണ്ണയ രീതി ഒരു അറേ കൈമാറണം.', - 'invalidAddress' => 'അസാധുവായ ഇമെയിൽ വിലാസം: {0}', - 'attachmentMissing' => 'ഇനിപ്പറയുന്ന ഇമെയിൽ അറ്റാച്ചുമെന്റ് കണ്ടെത്താനായില്ല: {0}', - 'attachmentUnreadable' => 'ഈ അറ്റാച്ചുമെന്റ് തുറക്കാനായില്ല: {0}', - 'noFrom' => '"From" തലക്കെട്ട് ഇല്ലാതെ മെയിൽ അയയ്ക്കാൻ കഴിയില്ല.', - 'noRecipients' => 'നിങ്ങൾ സ്വീകർത്താക്കളെ ഉൾപ്പെടുത്തണം: ടു, സിസി അല്ലെങ്കിൽ ബിസിസി', - 'sendFailurePHPMail' => 'പി‌എച്ച്പി മെയിൽ () ഉപയോഗിച്ച് ഇമെയിൽ അയയ്‌ക്കാനായില്ല. ഈ രീതി ഉപയോഗിച്ച് മെയിൽ‌ അയയ്‌ക്കുന്നതിന് നിങ്ങളുടെ സെർ‌വർ‌ ക്രമീകരിച്ചിരിക്കില്ല.', - 'sendFailureSendmail' => 'PHP Sendmail ഉപയോഗിച്ച് ഇമെയിൽ അയയ്ക്കാൻ കഴിയില്ല. ഈ രീതി ഉപയോഗിച്ച് മെയിൽ‌ അയയ്‌ക്കുന്നതിന് നിങ്ങളുടെ സെർ‌വർ‌ ക്രമീകരിച്ചിരിക്കില്ല.', - 'sendFailureSmtp' => 'PHP SMTP ഉപയോഗിച്ച് ഇമെയിൽ അയയ്‌ക്കാനായില്ല. ഈ രീതി ഉപയോഗിച്ച് മെയിൽ‌ അയയ്‌ക്കുന്നതിന് നിങ്ങളുടെ സെർ‌വർ‌ ക്രമീകരിച്ചിരിക്കില്ല.', - 'sent' => 'ഇനിപ്പറയുന്ന പ്രോട്ടോക്കോൾ ഉപയോഗിച്ച് നിങ്ങളുടെ സന്ദേശം വിജയകരമായി അയച്ചു: {0}', - 'noSocket' => 'സെന്റ് മെയിലിലേക്ക് ഒരു സോക്കറ്റ് തുറക്കാനായില്ല. ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.', - 'noHostname' => 'നിങ്ങൾ ഒരു SMTP ഹോസ്റ്റ്നാമം വ്യക്തമാക്കിയിട്ടില്ല.', - 'SMTPError' => 'ഇനിപ്പറയുന്ന SMTP പിശക് നേരിട്ടു: {0}', - 'noSMTPAuth' => 'പിശക്: നിങ്ങൾ ഒരു SMTP ഉപയോക്തൃനാമവും പാസ്‌വേഡും നൽകണം.', - 'failedSMTPLogin' => 'AUTH LOGIN കമാൻഡ് അയയ്‌ക്കുന്നതിൽ പരാജയപ്പെട്ടു. പിശക്: {0} ', - 'SMTPAuthUsername' => 'ഉപയോക്തൃനാമം പ്രാമാണീകരിക്കുന്നതിൽ പരാജയപ്പെട്ടു. പിശക്: {0} ', - 'SMTPAuthPassword' => 'പാസ്‌വേഡ് പ്രാമാണീകരിക്കുന്നതിൽ പരാജയപ്പെട്ടു. പിശക്: {0} ', - 'SMTPDataFailure' => 'ഡാറ്റ അയയ്‌ക്കാനായില്ല: {0}', - 'exitStatus' => 'സ്റ്റാറ്റസ് കോഡിൽ നിന്ന് പുറത്തുകടക്കുക: {0}', -]; diff --git a/app/Language/ml/Encryption.php b/app/Language/ml/Encryption.php deleted file mode 100644 index 2211bf32..00000000 --- a/app/Language/ml/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'ഡ്രൈവറൊന്നും അഭ്യർത്ഥിച്ചിട്ടില്ല; മിസ് ഡെയ്‌സി വളരെ അസ്വസ്ഥനാകും!', - 'noHandlerAvailable' => 'ലഭ്യമായ {0} എൻ‌ക്രിപ്ഷൻ ഹാൻഡ്‌ലർ കണ്ടെത്താനായില്ല.', - 'unKnownHandler' => '"{0}" ക്രമീകരിക്കാൻ കഴിയില്ല.', - 'starterKeyNeeded' => 'എൻ‌ക്രിപ്റ്ററിന് ഒരു സ്റ്റാർട്ടർ കീ ആവശ്യമാണ്.', - 'authenticationFailed' => 'ഡീക്രിപ്റ്റ് ചെയ്യുന്നു: പ്രാമാണീകരണം പരാജയപ്പെട്ടു.', - 'encryptionFailed' => 'എൻ‌ക്രിപ്ഷൻ പരാജയപ്പെട്ടു.', -]; diff --git a/app/Language/ml/Entity.php b/app/Language/ml/Entity.php deleted file mode 100644 index 8cfc7b01..00000000 --- a/app/Language/ml/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'നിലവിലില്ലാത്ത പ്രോപ്പർട്ടി {1} ന്റെ {0} ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുന്നു', -]; diff --git a/app/Language/ml/Files.php b/app/Language/ml/Files.php deleted file mode 100644 index be0a3c81..00000000 --- a/app/Language/ml/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'ഫയൽ കാണുന്നില്ല: {0}', - 'cannotMove' => '{0} മുതൽ {1} വരെ ഫയൽ നീക്കാൻ കഴിഞ്ഞില്ല({2})', -]; diff --git a/app/Language/ml/Filters.php b/app/Language/ml/Filters.php deleted file mode 100644 index ebe914bc..00000000 --- a/app/Language/ml/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} ഫിൽട്ടറിന് പൊരുത്തപ്പെടുന്ന അപരനാമം നിർവചിച്ചിരിക്കണം.', - 'incorrectInterface' => '{0} Code കോഡ്ഇഗ്നിറ്റർ \ ഫിൽട്ടറുകൾ \ ഫിൽട്ടർ ഇന്റർഫേസ് നടപ്പിലാക്കണം.', -]; diff --git a/app/Language/ml/Format.php b/app/Language/ml/Format.php deleted file mode 100644 index 6f3e6809..00000000 --- a/app/Language/ml/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Json സ്ട്രിംഗ് പാഴ്‌സുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു, പിശക്: "{0}".', - 'missingExtension' => 'എക്സ്എം‌എൽ ഫോർമാറ്റ് ചെയ്യുന്നതിന് സിമ്പിൾ എക്സ്എം‌എൽ വിപുലീകരണം ആവശ്യമാണ്.', -]; diff --git a/app/Language/ml/HTTP.php b/app/Language/ml/HTTP.php deleted file mode 100644 index 381404a8..00000000 --- a/app/Language/ml/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURLRequest ക്ലാസ് ഉപയോഗിക്കുന്നതിന് CURL പ്രാപ്തമാക്കിയിരിക്കണം.', - 'invalidSSLKey' => 'SSL കീ സജ്ജമാക്കാൻ കഴിയില്ല. {0} സാധുവായ ഫയലല്ല.', - 'sslCertNotFound' => 'SSL സർ‌ട്ടിഫിക്കറ്റ് കണ്ടെത്തിയില്ല: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} സാധുവായ ഒരു ചർച്ചാ തരമല്ല. ഇവയിലൊന്ന് ആയിരിക്കണം: മീഡിയ, പ്രതീകം, എൻകോഡിംഗ്, ഭാഷ.', - - // Message - 'invalidHTTPProtocol' => 'എച്ച്ടിടിപി പ്രോട്ടോക്കോൾ പതിപ്പ് അസാധുവാണ്. ഇവയിലൊന്ന് ആയിരിക്കണം: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'എല്ലാ ചർച്ചകൾക്കും നിങ്ങൾ പിന്തുണയ്ക്കുന്ന മൂല്യങ്ങളുടെ ഒരു നിര നൽകണം.', - - // RedirectResponse - 'invalidRoute' => '{0} റിവേഴ്സ് റൂട്ടിംഗ് സമയത്ത് റൂട്ട് കണ്ടെത്താൻ കഴിയില്ല.', - - // DownloadResponse - 'cannotSetBinary' => 'ഫയൽ‌പാത്ത് സജ്ജമാക്കുമ്പോൾ‌ ബൈനറി സജ്ജമാക്കാൻ‌ കഴിയില്ല.', - 'cannotSetFilepath' => 'ബൈനറി സജ്ജമാക്കുമ്പോൾ ഫയൽപാത്ത് സജ്ജമാക്കാൻ കഴിയില്ല: {0}', - 'notFoundDownloadSource' => 'ഡൗൺലോഡ് ബോഡി ഉറവിടം കണ്ടെത്തിയില്ല.', - 'cannotSetCache' => 'ഡൗൺലോഡുചെയ്യുന്നതിനുള്ള കാഷിംഗിനെ ഇത് പിന്തുണയ്‌ക്കുന്നില്ല.', - 'cannotSetStatusCode' => 'download ചെയ്യുന്നതിനുള്ള സ്റ്റാറ്റസ് കോഡ് മാറ്റുന്നതിനെ ഇത് പിന്തുണയ്‌ക്കുന്നില്ല. കോഡ്: {0}, കാരണം: {1}', - - // Response - 'missingResponseStatus' => 'HTTP പ്രതികരണത്തിന് ഒരു സ്റ്റാറ്റസ് കോഡ് നഷ്‌ടമായി', - 'invalidStatusCode' => '{0} സാധുവായ എച്ച്ടിടിപി റിട്ടേൺ സ്റ്റാറ്റസ് കോഡല്ല', - 'unknownStatusCode' => 'സന്ദേശമൊന്നുമില്ലാതെ അജ്ഞാത എച്ച്ടിടിപി സ്റ്റാറ്റസ് കോഡ് നൽകിയിട്ടുണ്ട്: {0}', - - // URI - 'cannotParseURI' => 'RI പാഴ്‌സുചെയ്യാനായില്ല: {0}', - 'segmentOutOfRange' => 'അഭ്യർത്ഥന URI സെഗ്‌മെന്റ് പരിധിക്ക് പുറത്താണ്: {0}', - 'invalidPort' => 'Ports 0 നും 65535 നും ഇടയിലായിരിക്കണം. നൽകിയിട്ടുണ്ട്: {0}', - 'malformedQueryString' => 'അന്വേഷണ സ്ട്രിംഗുകളിൽ യു‌ആർ‌ഐ ശകലങ്ങൾ‌ അടങ്ങിയിരിക്കില്ല.', - - // Page Not Found - 'pageNotFound' => 'പേജ് കണ്ടെത്തിയില്ല', - 'emptyController' => 'കൺട്രോളറൊന്നും വ്യക്തമാക്കിയിട്ടില്ല.', - 'controllerNotFound' => 'കൺട്രോളറോ അതിന്റെ രീതിയോ കണ്ടെത്തിയില്ല: {0}::{1}', - 'methodNotFound' => 'കൺട്രോളർ രീതി കണ്ടെത്തിയില്ല: {0}', - - // CSRF - 'disallowedAction' => 'നിങ്ങൾ അഭ്യർത്ഥിച്ച പ്രവർത്തനം അനുവദനീയമല്ല.', - - // Uploaded file moving - 'alreadyMoved' => 'അപ്‌ലോഡുചെയ്‌ത ഫയൽ ഇതിനകം നീക്കി.', - 'invalidFile' => 'യഥാർത്ഥ ഫയൽ സാധുവായ ഫയലല്ല.', - 'moveFailed' => 'ഫയൽ {1} ({2}) ലേക്ക് നീക്കാൻ കഴിഞ്ഞില്ല', - - 'uploadErrOk' => 'ഫയൽ വിജയത്തോടെ അപ്‌ലോഡുചെയ്‌തു.', - 'uploadErrIniSize' => '"%s" ഫയൽ നിങ്ങളുടെ അപ്‌ലോഡ്_മാക്സ്_ഫൈലൈസ് ഇനി നിർദ്ദേശത്തെ കവിയുന്നു.', - 'uploadErrFormSize' => '"%s" ഫയൽ നിങ്ങളുടെ ഫോമിൽ നിർവചിച്ചിരിക്കുന്ന അപ്‌ലോഡ് പരിധി കവിയുന്നു.', - 'uploadErrPartial' => '"%s" ഫയൽ ഭാഗികമായി മാത്രമേ അപ്‌ലോഡ് ചെയ്തിട്ടുള്ളൂ.', - 'uploadErrNoFile' => 'ഒരു ഫയലും അപ്‌ലോഡുചെയ്‌തില്ല.', - 'uploadErrCantWrite' => '"%s" ഫയൽ ഡിസ്കിൽ എഴുതാൻ കഴിഞ്ഞില്ല.', - 'uploadErrNoTmpDir' => 'ഫയൽ അപ്‌ലോഡുചെയ്യാനായില്ല: താൽക്കാലിക ഡയറക്‌ടറി നഷ്‌ടമായി.', - 'uploadErrExtension' => 'ഒരു പി‌എച്ച്പി വിപുലീകരണം ഫയൽ അപ്‌ലോഡ് നിർത്തി.', - 'uploadErrUnknown' => 'അജ്ഞാതമായ ഒരു പിശക് കാരണം "%s" ഫയൽ അപ്‌ലോഡ് ചെയ്തിട്ടില്ല.', -]; diff --git a/app/Language/ml/Images.php b/app/Language/ml/Images.php deleted file mode 100644 index efe31eb4..00000000 --- a/app/Language/ml/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'നിങ്ങളുടെ മുൻ‌ഗണനകളിൽ ഒരു ഉറവിട ചിത്രം വ്യക്തമാക്കണം.', - 'gdRequired' => 'ഈ സവിശേഷത ഉപയോഗിക്കുന്നതിന് ജിഡി ഇമേജ് ലൈബ്രറി ആവശ്യമാണ്.', - 'gdRequiredForProps' => 'ഇമേജ് സവിശേഷതകൾ നിർണ്ണയിക്കാൻ നിങ്ങളുടെ സെർവർ ജിഡി ഇമേജ് ലൈബ്രറിയെ പിന്തുണയ്‌ക്കണം.', - 'gifNotSupported' => 'ലൈസൻസിംഗ് നിയന്ത്രണങ്ങൾ കാരണം GIF ഇമേജുകൾ പലപ്പോഴും പിന്തുണയ്ക്കുന്നില്ല. പകരം നിങ്ങൾക്ക് JPG അല്ലെങ്കിൽ PNG ഇമേജുകൾ ഉപയോഗിക്കേണ്ടിവരും.', - 'jpgNotSupported' => 'JPG ഇമേജുകൾ പിന്തുണയ്‌ക്കുന്നില്ല.', - 'pngNotSupported' => 'പി‌എൻ‌ജി ചിത്രങ്ങൾ‌ പിന്തുണയ്‌ക്കുന്നില്ല.', - 'fileNotSupported' => 'നൽകിയ ഫയൽ പിന്തുണയ്‌ക്കുന്ന ഇമേജ് തരമല്ല.', - 'unsupportedImageCreate' => 'ഇത്തരത്തിലുള്ള ഇമേജ് പ്രോസസ്സ് ചെയ്യുന്നതിന് ആവശ്യമായ ജിഡി ഫംഗ്ഷനെ നിങ്ങളുടെ സെർവർ പിന്തുണയ്ക്കുന്നില്ല.', - 'jpgOrPngRequired' => 'നിങ്ങളുടെ മുൻ‌ഗണനകളിൽ വ്യക്തമാക്കിയ ഇമേജ് വലുപ്പം മാറ്റൽ പ്രോട്ടോക്കോൾ JPEG അല്ലെങ്കിൽ PNG ഇമേജ് തരങ്ങളിൽ മാത്രമേ പ്രവർത്തിക്കൂ.', - 'rotateUnsupported' => 'ഇമേജ് റൊട്ടേഷൻ നിങ്ങളുടെ സെർവർ പിന്തുണയ്ക്കുന്നതായി തോന്നുന്നില്ല.', - 'libPathInvalid' => 'നിങ്ങളുടെ ഇമേജ് ലൈബ്രറിയിലേക്കുള്ള പാത ശരിയല്ല. നിങ്ങളുടെ ഇമേജ് മുൻ‌ഗണനകളിൽ ശരിയായ പാത്ത് സജ്ജമാക്കുക. {0, string)', - 'imageProcessFailed' => 'ഇമേജ് പ്രോസസ്സിംഗ് പരാജയപ്പെട്ടു. തിരഞ്ഞെടുത്ത പ്രോട്ടോക്കോളിനെ നിങ്ങളുടെ സെർവർ പിന്തുണയ്ക്കുന്നുവെന്നും നിങ്ങളുടെ ഇമേജ് ലൈബ്രറിയിലേക്കുള്ള പാത ശരിയാണെന്നും ദയവായി പരിശോധിക്കുക. ', - 'rotationAngleRequired' => 'ചിത്രം തിരിക്കാൻ ഭ്രമണത്തിന്റെ ഒരു ആംഗിൾ ആവശ്യമാണ്.', - 'invalidPath' => 'ചിത്രത്തിലേക്കുള്ള പാത ശരിയല്ല.', - 'copyFailed' => 'ഇമേജ് കോപ്പി പതിവ് പരാജയപ്പെട്ടു.', - 'missingFont' => 'ഉപയോഗിക്കാൻ ഒരു ഫോണ്ട് കണ്ടെത്താനായില്ല.', - 'saveFailed' => 'ചിത്രം സംരക്ഷിക്കാനായില്ല. ചിത്രവും ഫയൽ ഡയറക്ടറിയും എഴുതാനാകുമെന്ന് ഉറപ്പാക്കുക.', - 'invalidDirection' => 'ഫ്ലിപ്പ് ദിശ `vertical` അല്ലെങ്കിൽ `horizontal` മായി മാത്രമേ ആകാവൂ. നൽകിയിരിക്കുന്നത്: {0}', - 'exifNotSupported' => 'എക്സിഫ് ഡാറ്റ വായിക്കുന്നത് ഈ പി‌എച്ച്പി ഇൻസ്റ്റാളേഷൻ പിന്തുണയ്ക്കുന്നില്ല.', -]; diff --git a/app/Language/ml/Language.php b/app/Language/ml/Language.php deleted file mode 100644 index 32e6eb88..00000000 --- a/app/Language/ml/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'ഗെറ്റ് ലൈൻ ഒരു സ്ട്രിംഗ് അല്ലെങ്കിൽ സ്ട്രിംഗുകളുടെ നിരയായിരിക്കണം.', -]; diff --git a/app/Language/ml/Log.php b/app/Language/ml/Log.php deleted file mode 100644 index bbf3dafa..00000000 --- a/app/Language/ml/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} അസാധുവായ ലോഗ് നിലയാണ്.', -]; diff --git a/app/Language/ml/Migrations.php b/app/Language/ml/Migrations.php deleted file mode 100644 index 3d0b0353..00000000 --- a/app/Language/ml/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'മൈഗ്രേഷൻ പട്ടിക സജ്ജമാക്കിയിരിക്കണം.', - 'disabled' => 'മൈഗ്രേഷനുകൾ ലോഡുചെയ്‌തുവെങ്കിലും അവ പ്രവർത്തനരഹിതമാക്കി അല്ലെങ്കിൽ തെറ്റായി സജ്ജീകരിച്ചു.', - 'notFound' => 'മൈഗ്രേഷൻ ഫയൽ കണ്ടെത്തിയില്ല: ', - 'batchNotFound' => 'ടാർഗെറ്റ് ബാച്ച് കണ്ടെത്തിയില്ല: ', - 'empty' => 'മൈഗ്രേഷൻ ഫയലുകളൊന്നും കണ്ടെത്തിയില്', - 'gap' => 'പതിപ്പ് നമ്പറിനടുത്തുള്ള മൈഗ്രേഷൻ ശ്രേണിയിൽ ഒരു വിടവ് ഉണ്ട്: ', - 'classNotFound' => 'മൈഗ്രേഷൻ ക്ലാസ് "%s" കണ്ടെത്താനായില്ല.', - 'missingMethod' => 'മൈഗ്രേഷൻ ക്ലാസിന് "%s" രീതി കാണുന്നില്ല.', - - // Migration Command - 'migHelpLatest' => "\t\tMigrates database to latest available migration.", - 'migHelpCurrent' => "\t\tMigrates database to version set as 'current' in configuration.", - 'migHelpVersion' => "\tMigrates database to version {v}.", - 'migHelpRollback' => "\tRuns all migrations 'down' to version 0.", - 'migHelpRefresh' => "\t\tUninstalls and re-runs all migrations to freshen database.", - 'migHelpSeed' => "\tRuns the seeder named [name].", - 'migCreate' => "\tCreates a new migration named [name]", - 'nameMigration' => 'Name the migration file', - 'badCreateName' => 'You must provide a migration file name.', - 'writeError' => 'Error trying to create {0} file, check if the directory is writable.', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - 'rollBackConfirm' => 'Are you sure you want to rollback?', - 'refreshConfirm' => 'Are you sure you want to refresh?', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => 'Invalid version number provided.', - 'toVersionPH' => 'Migrating to version %s...', - 'toVersion' => 'Migrating to current version...', - 'rollingBack' => 'Rolling back migrations to batch: ', - 'noneFound' => 'No migrations were found.', - 'on' => 'Migrated On: ', - 'migSeeder' => 'Seeder name', - 'migMissingSeeder' => 'You must provide a seeder name.', - 'removed' => 'Rolling back: ', - 'added' => 'പ്രവർത്തിക്കുന്നു: ', - - 'version' => 'പതിപ്പ്', - 'filename' => 'ഫയൽനാമം', -]; diff --git a/app/Language/ml/Number.php b/app/Language/ml/Number.php deleted file mode 100644 index ce2c8539..00000000 --- a/app/Language/ml/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'ബൈറ്റുകൾ', - - // don't forget the space in front of these! - 'thousand' => ' ആയിരം', - 'million' => ' ദശലക്ഷം', - 'billion' => ' ബില്യൺ', - 'trillion' => ' ട്രില്യൺ', - 'quadrillion' => ' ക്വാഡ്രില്യൺ', -]; diff --git a/app/Language/ml/Pager.php b/app/Language/ml/Pager.php deleted file mode 100644 index 084b7c1a..00000000 --- a/app/Language/ml/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'പേജ് നാവിഗേഷൻ', - 'first' => 'ആദ്യം', - 'previous' => 'മുമ്പത്തെ', - 'next' => 'അടുത്തത്', - 'last' => 'അവസാനത്തേത്', - 'older' => 'പഴയത്', - 'newer' => 'ഏറ്റവും പുതിയത്', - 'invalidTemplate' => '{0} സാധുവായ പേജർ ടെംപ്ലേറ്റല്ല.', - 'invalidPaginationGroup' => '{0} സാധുവായ ഒരു പേജിനേഷൻ ഗ്രൂപ്പല്ല.', -]; diff --git a/app/Language/ml/RESTful.php b/app/Language/ml/RESTful.php deleted file mode 100644 index ef506954..00000000 --- a/app/Language/ml/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" പ്രവർത്തനം നടപ്പിലാക്കിയില്ല.', -]; diff --git a/app/Language/ml/Redirect.php b/app/Language/ml/Redirect.php deleted file mode 100644 index a8eea074..00000000 --- a/app/Language/ml/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - '"{0}" എന്നതിലേക്ക് റീഡയറക്‌ടുചെയ്യാനാകില്ല. പിശക് സ്റ്റാറ്റസ് കോഡ് "{1}"', -]; diff --git a/app/Language/ml/Router.php b/app/Language/ml/Router.php deleted file mode 100644 index 46a48423..00000000 --- a/app/Language/ml/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'ഒരു പാരാമീറ്റർ പ്രതീക്ഷിച്ച തരവുമായി പൊരുത്തപ്പെടുന്നില്ല.', - 'missingDefaultRoute' => 'എന്താണ് പ്രദർശിപ്പിക്കേണ്ടതെന്ന് നിർണ്ണയിക്കാൻ കഴിയുന്നില്ല. റൂട്ടിംഗ് ഫയലിൽ ഒരു സ്ഥിര റൂട്ട് വ്യക്തമാക്കിയിട്ടില്ല.', -]; diff --git a/app/Language/ml/Session.php b/app/Language/ml/Session.php deleted file mode 100644 index d1ff42c5..00000000 --- a/app/Language/ml/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` ഡാറ്റാബേസ് സെഷൻ ഹാൻഡ്‌ലർ പ്രവർത്തിക്കുന്നതിന് പട്ടികയുടെ പേര് ഉണ്ടായിരിക്കണം.', - 'invalidSavePath' => 'Session: കോൺഫിഗർ ചെയ്ത സേവ് പാത്ത് "{0}" ഒരു ഡയറക്ടറിയല്ല, നിലവിലില്ല അല്ലെങ്കിൽ സൃഷ്ടിക്കാൻ കഴിയില്ല.', - 'writeProtectedSavePath' => 'Session: കോൺഫിഗർ ചെയ്ത സേവ് പാത്ത് "{0}" പി‌എച്ച്പി പ്രോസസ്സ് എഴുതാൻ കഴിയില്ല.', - 'emptySavePath' => 'Session: സേവ് പാത്ത് ക്രമീകരിച്ചിട്ടില്ല.', - 'invalidSavePathFormat' => 'Session: അസാധുവായ റെഡിസ് പാത്ത് ഫോർമാറ്റ് സംരക്ഷിക്കുക: {0}', -]; diff --git a/app/Language/ml/Time.php b/app/Language/ml/Time.php deleted file mode 100644 index a4d52f07..00000000 --- a/app/Language/ml/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'മാസങ്ങൾ 1 നും 12 നും ഇടയിലായിരിക്കണം. നൽകിയിട്ടുള്ളത്: {0}', - 'invalidDay' => 'ദിവസങ്ങൾ 1 നും 31 നും ഇടയിലായിരിക്കണം. നൽകിയിരിക്കുന്നത്: {0}', - 'invalidOverDay' => 'ദിവസങ്ങൾ 1 നും {0 between നും ഇടയിലായിരിക്കണം. നൽകിയിരിക്കുന്നത്: {1}', - 'invalidHours' => 'സമയം 0 നും 23 നും ഇടയിലായിരിക്കണം. നൽകിയിരിക്കുന്നത്: {0}', - 'invalidMinutes' => 'മിനിറ്റ് 0 നും 59 നും ഇടയിലായിരിക്കണം. നൽകിയിരിക്കുന്നത്: {0}', - 'invalidSeconds' => 'സെക്കൻഡ് 0 നും 59 നും ഇടയിലായിരിക്കണം. നൽകിയിരിക്കുന്നത്: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '{0} മുമ്പ്', - 'inFuture' => 'in {0}', - 'yesterday' => 'ഇന്നലെ', - 'tomorrow' => 'നാളെ', - 'now' => 'ഇപ്പോൾ', -]; diff --git a/app/Language/ml/Validation.php b/app/Language/ml/Validation.php deleted file mode 100644 index 2804376e..00000000 --- a/app/Language/ml/Validation.php +++ /dev/null @@ -1,98 +0,0 @@ - 'മൂല്യനിർണ്ണയ കോൺഫിഗറേഷനിൽ റൂൾസെറ്റുകളൊന്നും വ്യക്തമാക്കിയിട്ടില്ല.', - 'ruleNotFound' => '{0} സാധുവായ ഒരു നിയമമല്ല.', - 'groupNotFound' => '{0} ഒരു മൂല്യനിർണ്ണയ നിയമ ഗ്രൂപ്പല്ല.', - 'groupNotArray' => '{0} റൂൾ ഗ്രൂപ്പ് ഒരു അറേ ആയിരിക്കണം.', - 'invalidTemplate' => '{0} സാധുവായ ഒരു മൂല്യനിർണ്ണയ ടെംപ്ലേറ്റല്ല.', - - // Rule Messages - 'alpha' => '{field} ഫീൽഡിൽ അക്ഷരമാല പ്രതീകങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'alpha_dash' => '{field} ഫീൽഡിൽ ആൽഫാന്യൂമെറിക്, അടിവരയിടുക, ഡാഷ് പ്രതീകങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'alpha_numeric' => '{field} ഫീൽഡിൽ ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'alpha_numeric_punct' => '{field} ഫീൽഡിൽ ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങൾ, സ്‌പെയ്‌സുകൾ, ~ എന്നിവ മാത്രമേ അടങ്ങിയിരിക്കൂ! # $% & * - _ + = | :. പ്രതീകങ്ങൾ.', - 'alpha_numeric_space' => '{field} ഫീൽഡിൽ ആൽഫാന്യൂമെറിക്, സ്‌പേസ് പ്രതീകങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'alpha_space' => '{field} ഫീൽഡിൽ അക്ഷരമാല പ്രതീകങ്ങളും സ്‌പെയ്‌സുകളും മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'decimal' => '{field} ഫീൽഡിൽ ഒരു ദശാംശ സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'differs' => '{field} ഫീൽഡ് {param} ഫീൽഡിൽ നിന്ന് വ്യത്യസ്‌തമായിരിക്കണം.', - 'equals' => '{field} ഫീൽഡ് കൃത്യമായിരിക്കണം: {param}.', - 'exact_length' => '{field} ഫീൽഡ് കൃത്യമായി {param} പ്രതീകങ്ങൾ ആയിരിക്കണം.', - 'greater_than' => '{field} ഫീൽഡിൽ {param} എന്നതിനേക്കാൾ വലിയ ഒരു സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'greater_than_equal_to' => '{field} ഫീൽഡിൽ {param} എന്നതിനേക്കാൾ വലുതോ തുല്യമോ ആയ ഒരു സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'hex' => '{field} ഫീൽഡിൽ ഹെക്‌സാഡെസിമൽ പ്രതീകങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കൂ.', - 'in_list' => '{field} ഫീൽഡ് ഇതിലൊന്നായിരിക്കണം: {param}.', - 'integer' => '{field} ഫീൽഡിൽ ഒരു സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'is_natural' => '{field} ഫീൽഡിൽ അക്കങ്ങൾ മാത്രം അടങ്ങിയിരിക്കണം.', - 'is_natural_no_zero' => '{field} ഫീൽഡിൽ അക്കങ്ങൾ മാത്രമേ അടങ്ങിയിരിക്കാവൂ, അത് പൂജ്യത്തേക്കാൾ വലുതായിരിക്കണം.', - 'is_not_unique' => '{field} ഫീൽഡിൽ ഡാറ്റാബേസിൽ മുമ്പ് നിലവിലുള്ള ഒരു മൂല്യം അടങ്ങിയിരിക്കണം.', - 'is_unique' => '{field} ഫീൽഡിൽ ഒരു അദ്വിതീയ മൂല്യം അടങ്ങിയിരിക്കണം.', - 'less_than' => '{field} ഫീൽഡിൽ {param} എന്നതിനേക്കാൾ ഒരു സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'less_than_equal_to' => '{field} ഫീൽഡിൽ {param} എന്നതിനേക്കാൾ കുറവോ തുല്യമോ ആയ ഒരു സംഖ്യ അടങ്ങിയിരിക്കണം.', - 'matches' => '{field} ഫീൽഡ് {param} ഫീൽഡുമായി പൊരുത്തപ്പെടുന്നില്ല.', - 'max_length' => '{field} ഫീൽഡിന് {param} പ്രതീകങ്ങളുടെ ദൈർഘ്യം കവിയാൻ പാടില്ല.', - 'min_length' => '{field} ഫീൽഡ് കുറഞ്ഞത് {param} പ്രതീകങ്ങളെങ്കിലും ആയിരിക്കണം.', - 'not_equals' => '{field} ഫീൽഡ് ആകരുത്: {param}.', - 'numeric' => '{field} ഫീൽഡിൽ അക്കങ്ങൾ മാത്രം അടങ്ങിയിരിക്കണം.', - 'regex_match' => '{field} ഫീൽഡ് ശരിയായ ഫോർമാറ്റിലല്ല.', - 'required' => '{field} ഫീൽഡ് ആവശ്യമാണ്.', - 'required_with' => '{field} {param} ഉള്ളപ്പോൾ {field} ഫീൽഡ് ആവശ്യമാണ്.', - 'required_without' => '{field} {param} ഇല്ലാത്തപ്പോൾ {field} ഫീൽഡ് ആവശ്യമാണ്.', - 'string' => '{field} ഫീൽഡ് സാധുവായ ഒരു സ്ട്രിംഗ് ആയിരിക്കണം.', - 'timezone' => '{field} ഫീൽഡ് സാധുവായ സമയമേഖലയായിരിക്കണം.', - 'valid_base64' => '{field} ഫീൽഡ് ഒരു സാധുവായ ബേസ് 64 സ്ട്രിംഗ് ആയിരിക്കണം.', - 'valid_email' => '{field} ഫീൽഡിൽ സാധുവായ ഒരു ഇമെയിൽ വിലാസം അടങ്ങിയിരിക്കണം.', - 'valid_emails' => '{field} ഫീൽഡിൽ സാധുവായ എല്ലാ ഇമെയിൽ വിലാസങ്ങളും അടങ്ങിയിരിക്കണം.', - 'valid_ip' => '{field} ഫീൽഡിൽ സാധുവായ ഒരു ഐപി അടങ്ങിയിരിക്കണം.', - 'valid_url' => '{field} ഫീൽഡിൽ സാധുവായ ഒരു URL അടങ്ങിയിരിക്കണം.', - 'valid_date' => '{field} ഫീൽഡിൽ സാധുവായ തീയതി അടങ്ങിയിരിക്കണം.', - - // Credit Cards - 'valid_cc_num' => '{field} സാധുവായ ക്രെഡിറ്റ് കാർഡ് നമ്പറായി തോന്നുന്നില്ല.', - - // Files - 'uploaded' => '{field} സാധുവായ അപ്‌ലോഡുചെയ്‌ത ഫയലല്ല.', - 'max_size' => '{field} ഒരു ഫയലിന്റെ വളരെ വലുതാണ്.', - 'is_image' => '{field} സാധുവായതും അപ്‌ലോഡുചെയ്‌തതുമായ ഇമേജ് ഫയലല്ല.', - 'mime_in' => '{field} ന് സാധുവായ ഒരു മൈം തരം ഇല്ല.', - 'ext_in' => '{field} ന് സാധുവായ ഫയൽ വിപുലീകരണം ഇല്ല.', - 'max_dims' => '{field} ഒന്നുകിൽ ഒരു ചിത്രമല്ല, അല്ലെങ്കിൽ അത് വളരെ വിശാലമോ ഉയരമോ ആണ്.', -]; diff --git a/app/Language/ml/View.php b/app/Language/ml/View.php deleted file mode 100644 index 3d7507e1..00000000 --- a/app/Language/ml/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class} :: {method} സാധുവായ ഒരു രീതിയല്ല.', - 'missingCellParameters' => '{class}::{method} ന് പാരാമുകളൊന്നുമില്ല.', - 'invalidCellParameter' => '{0} സാധുവായ ഒരു പാരാമാമമല്ല.', - 'noCellClass' => 'view സെൽ ക്ലാസുകളൊന്നും നൽകിയിട്ടില്ല.', - 'invalidCellClass' => 'View സെൽ ക്ലാസ് കണ്ടെത്താനായില്ല: {0}.', - 'tagSyntaxError' => 'നിങ്ങളുടെ പാഴ്‌സർ ടാഗുകളിൽ നിങ്ങൾക്ക് ഒരു വാക്യഘടന പിശക് ഉണ്ട്: {0}', -]; diff --git a/app/Language/nl/CLI.php b/app/Language/nl/CLI.php deleted file mode 100644 index 39c73d6d..00000000 --- a/app/Language/nl/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Commando "{0}" niet gevonden.', - 'helpUsage' => 'Gebruik:', - 'helpDescription' => 'Omschrijving:', - 'helpOptions' => 'Opties:', - 'helpArguments' => 'Argumenten:', - 'invalidColor' => 'Foutieve {0} kleur: {1}.', -]; diff --git a/app/Language/nl/Cache.php b/app/Language/nl/Cache.php deleted file mode 100644 index a5f300ba..00000000 --- a/app/Language/nl/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache kan niet schrijven naar {0}', - 'invalidHandlers' => 'Cache config moet een Array bevatten met $validHandlers.', - 'noBackup' => 'Cache config vereist een Handler en BackupHandler.', - 'handlerNotFound' => 'Cache config bevat een ongeldige Handler of BackupHandler.', -]; diff --git a/app/Language/nl/Cast.php b/app/Language/nl/Cast.php deleted file mode 100644 index 29f1b4df..00000000 --- a/app/Language/nl/Cast.php +++ /dev/null @@ -1,48 +0,0 @@ - 'Maximale stack diepte overschreden', - 'jsonErrorStateMismatch' => 'Underflow of de modus komen niet overeen', - 'jsonErrorCtrlChar' => 'ONverwacht controle karakter gevonden', - 'jsonErrorSyntax' => 'Syntax fout, foutieve JSON', - 'jsonErrorUtf8' => 'Foutieve UTF-8 karakters, mogelijk foutieve encoding', - 'jsonErrorUnknown' => 'Ongekende fout', -]; - diff --git a/app/Language/nl/Core.php b/app/Language/nl/Core.php deleted file mode 100644 index a5a3b33f..00000000 --- a/app/Language/nl/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Ongeldig bestand: {0}', - 'copyError' => 'Er heeft zich een fout voorgedaan bij het vervangen van bestand({0}). Verifieer of de folder schrijfbaar is.', - 'missingExtension' => '{0} extensie niet geladen.', - 'noHandlers' => '{0} moet minstens één Handler voorzien.', -]; diff --git a/app/Language/nl/Database.php b/app/Language/nl/Database.php deleted file mode 100644 index 561ab940..00000000 --- a/app/Language/nl/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} is geen geldige Model Event callback.', - 'invalidArgument' => 'U moet een geldige {0} voorzien.', - 'invalidAllowedFields' => 'Toegelaten velden moeten opgegeven worden voor Model: {0}', - 'emptyDataset' => 'Geen data voor {0}.', - 'failGetFieldData' => 'Kon geen veld-data ophalen uit de database.', - 'failGetIndexData' => 'Kon geen index-data ophalen uit de database.', - 'failGetForeignKeyData' => 'Kon geen foreign-key-data ophalen uit de database.', - 'parseStringFail' => 'Verwerken van key string gefaald.', - 'featureUnavailable' => 'Deze feature is niet beschikbaar voor de database die u gebruikt.', - 'tableNotFound' => 'Tabel `{0}` niet gevonden in de huidige database', - 'noPrimaryKey' => '`{0}` model class specifieert geen Primary Key', - 'noDateFormat' => '`{0}` model class heeft geen geldig datumFormaat.', - 'fieldNotExists' => 'Veld `{0}` niet gevonden.', - 'forEmptyInputGiven' => 'Leeg statement opgegeven voor veld `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Slechts één kolom toegestaan in kolomnaam.', -]; diff --git a/app/Language/nl/Email.php b/app/Language/nl/Email.php deleted file mode 100644 index 6957353b..00000000 --- a/app/Language/nl/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'De email validatie-methode moet worden aangeroepen met een array.', - 'invalidAddress' => 'Ongeldige emailadres: {0}', - 'attachmentMissing' => 'Kon de volgende bijlage niet vinden: {0}', - 'attachmentUnreadable' => 'Kon de volgende bijlage niet openen: {0}', - 'noFrom' => '"From" header ontbreekt, kan geen mail versturen.', - 'noRecipients' => 'U moet minstens één geadresseerde zijn: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'Kon geen email versturen via mail(). Is uw server geconfigureerd om mails te versturen op deze methode.', - 'sendFailureSendmail' => 'Kon geen email versturen PHP Sendmail. Is uw server geconfigureerd om mails te versturen op deze methode.', - 'sendFailureSmtp' => 'Kon geen email versturen PHP SMTP. Is uw server geconfigureerd om mails te versturen op deze methode.', - 'sent' => 'Uw bericht is succesvol verstuurd met de volgende methode: {0}', - 'noSocket' => 'Kon geen socket openen naar Sendmail. Gelieve uw instellingen na te kijken.', - 'noHostname' => 'SMTP hostname is niet gespecifieerd.', - 'SMTPError' => 'De volgende SMTP fout heeft zich voorgedaan: {0}', - 'noSMTPAuth' => 'Fout: U moet een SMTP gebruikersnaam en wachtwoord opgeven.', - 'failedSMTPLogin' => 'Versturen van AUTH LOGIN commando gefaald. Fout: {0}', - 'SMTPAuthUsername' => 'Authenticatie gebruikersnaam gefaald. Fout: {0}', - 'SMTPAuthPassword' => 'Authenticatie wachtwoord gefaald. Fout: {0}', - 'SMTPDataFailure' => 'Kon geen data versturen: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; diff --git a/app/Language/nl/Encryption.php b/app/Language/nl/Encryption.php deleted file mode 100644 index 687062d9..00000000 --- a/app/Language/nl/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Geen driver bevraagd; Miss Daisy zal overstuur zijn', - 'noHandlerAvailable' => 'Kon geen geldige {0} encryptie handler vinden.', - 'unKnownHandler' => '"{0}" kan niet worden geconfigureerd.', - 'starterKeyNeeded' => 'Encrypter heeft een starter key nodig.', - 'authenticationFailed' => 'Decrypting: authenticatie gefaald.', - 'encryptionFailed' => 'Encryptie gefaald.', -]; diff --git a/app/Language/nl/Entity.php b/app/Language/nl/Entity.php deleted file mode 100644 index 669635db..00000000 --- a/app/Language/nl/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Poging om een niet bestaande property op te vragen {0} van {1}', - ]; diff --git a/app/Language/nl/Files.php b/app/Language/nl/Files.php deleted file mode 100644 index 5a151652..00000000 --- a/app/Language/nl/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Bestand niet gevonden: {0}', - 'cannotMove' => 'Kon bestand {0} niet verplaatsen naar {1} ({2})', -]; diff --git a/app/Language/nl/Filters.php b/app/Language/nl/Filters.php deleted file mode 100644 index 09ad84fa..00000000 --- a/app/Language/nl/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Filter {0} moet een alias gedefineerd hebben.', - 'incorrectInterface' => '{0} moet de interface CodeIgniter\Filters\FilterInterface implementeren.', -]; diff --git a/app/Language/nl/Format.php b/app/Language/nl/Format.php deleted file mode 100644 index 94ef7adc..00000000 --- a/app/Language/nl/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parsen van JSON string gefaald, fout: "{0}".', - 'missingExtension' => 'De SimpleXML extension is verplicht voor het formateren van XML.', -]; diff --git a/app/Language/nl/HTTP.php b/app/Language/nl/HTTP.php deleted file mode 100644 index 40e24ac5..00000000 --- a/app/Language/nl/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURL moet geactiveerd zijn om gebruik te maken van de CURLRequest class.', - 'invalidSSLKey' => 'Kan SSL Key niet zetten. {0} is geen geldig bestand.', - 'sslCertNotFound' => 'SSL certificaat niet gevonden op de locatie: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} is geen geldig negotiation type. Moet één van de volgende zijn: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Ongeldige HTTP Protocol Version. Moet één van de volgende zijn: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Je moet een Array opgeven met al de geldige Negotiations.', - - // RedirectResponse - 'invalidRoute' => '{0} route kon niet worden gevonden tijdens reverse-routing.', - - // DownloadResponse - 'cannotSetBinary' => 'Bestandspad kan niet binaire zijn.', - 'cannotSetFilepath' => 'Binaire waarde kan geen bestandspad zijn: {0}', - 'notFoundDownloadSource' => 'Download body niet gevonden.', - 'cannotSetCache' => 'Caching niet ondersteunt voor downloads.', - 'cannotSetStatusCode' => 'Het wijzigen van de status code is niet ondersteunt voor downloads. code: {0}, reden: {1}', - - // Response - 'missingResponseStatus' => 'HTTP Response heeft geen status code', - 'invalidStatusCode' => '{0} is geen geldige HTTP return status code', - 'unknownStatusCode' => 'Ongekende HTTP status code opgegeven met geen bericht: {0}', - - // URI - 'cannotParseURI' => 'URI kan niet worden geparsed: {0}', - 'segmentOutOfRange' => 'Request URI segment valt niet in bereik: {0}', - 'invalidPort' => 'Poort moet tussen 0 en 65535 vallen. Opgegeven: {0}', - 'malformedQueryString' => 'Query strings mogen geen URI fragmenten bevatten.', - - // Page Not Found - 'pageNotFound' => 'Pagina niet gevonden', - 'emptyController' => 'Geen Controller gespecifieerd.', - 'controllerNotFound' => 'Controller of methode niet gevonden: {0}::{1}', - 'methodNotFound' => 'Controller methode niet gevonden: {0}', - - // CSRF - 'disallowedAction' => 'De actie die u opvraagt is niet toegalaten.', - - // Uploaded file moving - 'alreadyMoved' => 'Het upload bestand is reeds verplaatst.', - 'invalidFile' => 'Het origineel bestand is geen geldig bestand.', - 'moveFailed' => 'Kon het bestand {0} niet verplaatsen naar {1} ({2})', - - 'uploadErrOk' => 'Upload geslaagd.', - 'uploadErrIniSize' => 'Het bestand "%s" overschrijdt de upload_max_filesize ini instelling.', - 'uploadErrFormSize' => 'Het bestand "%s" overschrijdt de upload limiet gedefinieerd in uw formulier.', - 'uploadErrPartial' => 'Het bestand "%s" is maar deels geüpload.', - 'uploadErrNoFile' => 'Geen bestand geüpload.', - 'uploadErrCantWrite' => 'Het bestand "%s" kon niet worden weggeschreven op schijf.', - 'uploadErrNoTmpDir' => 'Bestand kon niet worden geüpload: ontbrekende tijdelijke folder.', - 'uploadErrExtension' => 'Bestand upload werd gestopt door een PHP extensie.', - 'uploadErrUnknown' => 'Het bestand "%s" kon niet worden geüpload door een ongekende fout.', -]; diff --git a/app/Language/nl/Images.php b/app/Language/nl/Images.php deleted file mode 100644 index 86bcd5a9..00000000 --- a/app/Language/nl/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'Gelieve een bron afbeelding op te geven in uw instellingen.', - 'gdRequired' => 'De GD image library is vereist voor deze functie.', - 'gdRequiredForProps' => 'De GD image library is vereist om de afbeelding specificaties te achterhalen.', - 'gifNotSupported' => 'GIF afbeeldingen zijn vaak niet ondersteunt omwille van licentie restricties. Probeer indien mogelijk met PNG of JPG.', - 'jpgNotSupported' => 'JPG afbeeldingen zijn niet ondersteunt.', - 'pngNotSupported' => 'PNG afbeeldingen zijn niet ondersteunt.', - 'fileNotSupported' => 'Het opgegeven bestand is geen ondersteutn afbeelding type.', - 'unsupportedImageCreate' => 'De GD image library nodig voor deze functie is niet beschikbaar.', - 'jpgOrPngRequired' => 'Het afbeelding "resize" protocol opgegeven in uw instellingen is enkel beschikbaar voor JPEG en PNG bestanden.', - 'rotateUnsupported' => 'Afbeelding draaien lijkt niet ondersteunt te worden door uw server.', - 'libPathInvalid' => 'Het pad naar uw Image Library lijkt niet correct. Gelieve het correcte pad op te geven in uw instellingen. {0, string)', - 'imageProcessFailed' => 'Afbeelding verwerken gefaald. Gelieve te verifieren of uw server het gekozen protocol ondersteunt en het pad naar uw Image Library correct is', - 'rotationAngleRequired' => 'Een rotatiehoek is vereist om de afbeelding te roteren.', - 'invalidPath' => 'Het pad naar de afbeelding is niet correct.', - 'copyFailed' => 'De routine voor het kopiëren van afbeeldingen is mislukt.', - 'missingFont' => 'Kan het opgegeven lettertype niet vinden.', - 'saveFailed' => 'Kan de afbeelding niet opslaan. Zorg ervoor dat de afbeelding en de bestandsmap schrijfbaar zijn.', - 'invalidDirection' => 'De draairichting kan alleen `vertical` of `horizontal` zijn. Opgegeven: {0}', - 'exifNotSupported' => 'Lezen van EXIF data wordt niet ondersteunt door uw PHP installatie.', -]; diff --git a/app/Language/nl/Language.php b/app/Language/nl/Language.php deleted file mode 100644 index 5ad8d96e..00000000 --- a/app/Language/nl/Language.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Get line moet een string of array van strings zijn.', -]; - diff --git a/app/Language/nl/Log.php b/app/Language/nl/Log.php deleted file mode 100644 index 0292268b..00000000 --- a/app/Language/nl/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} is een ongeldig log level.', -]; diff --git a/app/Language/nl/Migrations.php b/app/Language/nl/Migrations.php deleted file mode 100644 index 8535c840..00000000 --- a/app/Language/nl/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - 'Migratrie tabel moet worden gezet.', - 'disabled' => 'Migraties geladen, maar zijn uitgeschakeld of foutief ingesteld.', - 'notFound' => 'Migratie bestand niet gevonden: ', - 'batchNotFound' => 'Doel batch niet gevonden: ', - 'empty' => 'Geen migratie bestanden gevonden', - 'gap' => 'Er is een gat in de migratie sequentie rond het versienummer: ', - 'classNotFound' => 'De migratie class "%s" werd niet gevonden.', - 'missingMethod' => 'De migratie class heeft geen methode: "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigreert de database naar de laatste beschikbare migratie.", - 'migHelpCurrent' => "\t\tMigreert de database naar de versie gezet als 'current' in de configuratie.", - 'migHelpVersion' => "\tMigreert database naar versie {v}.", - 'migHelpRollback' => "\tVoert migratie 'down' uit naar versie 0.", - 'migHelpRefresh' => "\t\tVerwijdert al de migraties en voert ze opnieuw uit, database refresh.", - 'migHelpSeed' => "\tVoert seeder uit met naam [name].", - 'migCreate' => "\tMaakt een nieuwe migratie aan met de naam [name]", - 'nameMigration' => 'Geeft het migratiebestand een naam', - 'badCreateName' => 'Gelieve een migratiebestandsnaam op te geven.', - 'writeError' => 'Fout bij het aanmaken van het bestand.', - 'migNumberError' => 'Migratie cijfer moet 3 cijfers bevatten, en er mag geen gat zijn in de sequentie.', - - 'latest' => 'Al de migraties worden uitgevoerd...', - 'generalFault' => 'Migratie gefaald!', - 'migInvalidVersion' => 'Ongeldige versienummer opgegeven', - 'toVersionPH' => 'Migreren naar versie %s...', - 'toVersion' => 'Migreren naar huidige versie...', - 'rollingBack' => 'Verwijderen van migratie naar batch: ', - 'noneFound' => 'Geen migraties gevonden.', - 'on' => 'Gemigreerd op: ', - 'migSeeder' => 'Seeder naam', - 'migMissingSeeder' => 'U moet een seeder naam opgeven.', - 'removed' => 'Rolling back: ', - 'added' => 'Uitvoeren: ', - - 'version' => 'Versie', - 'filename' => 'Bestandsnaam', -]; diff --git a/app/Language/nl/Number.php b/app/Language/nl/Number.php deleted file mode 100644 index 6cd0e5ca..00000000 --- a/app/Language/nl/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' duizend', - 'million' => ' miljoen', - 'billion' => ' miljard', - 'trillion' => ' biljoen', - 'quadrillion' => ' biljard', -]; diff --git a/app/Language/nl/Pager.php b/app/Language/nl/Pager.php deleted file mode 100644 index 2638637f..00000000 --- a/app/Language/nl/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Pagina navigatie', - 'first' => 'Eerste', - 'previous' => 'Vorige', - 'next' => 'Volgende', - 'last' => 'Laatste', - 'older' => 'Ouder', - 'newer' => 'Nieuwer', - 'invalidTemplate' => '{0} is geen geldig Pager template.', - 'invalidPaginationGroup' => '{0} is geen geldige Pagination group.', -]; diff --git a/app/Language/nl/RESTful.php b/app/Language/nl/RESTful.php deleted file mode 100644 index 9a76ec3c..00000000 --- a/app/Language/nl/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}"-actie niet geïmplementeerd.', -]; diff --git a/app/Language/nl/Redirect.php b/app/Language/nl/Redirect.php deleted file mode 100644 index 28ca3b9c..00000000 --- a/app/Language/nl/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Kon niet redirecten naar "{0}". Fout, status code "{1}"', -]; diff --git a/app/Language/nl/Router.php b/app/Language/nl/Router.php deleted file mode 100644 index f3a13e6b..00000000 --- a/app/Language/nl/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Een parameter komt niet overeen met het verwachte type.', - 'missingDefaultRoute' => 'Konden niet bepalen wat er getoond moet worden. Er is geen standaard-route in de route-configuratie.', -]; diff --git a/app/Language/nl/Session.php b/app/Language/nl/Session.php deleted file mode 100644 index fee10da5..00000000 --- a/app/Language/nl/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` moet een tabelnaam bevatten om Database Session Handler te laten werken.', - 'invalidSavePath' => 'Session: Pad "{0}" is geen folder, bestaat niet of kon niet worden aangemaakt.', - 'writeProtectedSavePath' => 'Session: Pad "{0}" is niet schrijfbaar voor het PHP proces.', - 'emptySavePath' => 'Session: Geen "save" pad opgegeven.', - 'invalidSavePathFormat' => 'Session: Ongeldig Redis pad formaat: {0}', -]; diff --git a/app/Language/nl/Time.php b/app/Language/nl/Time.php deleted file mode 100644 index f5ad3a16..00000000 --- a/app/Language/nl/Time.php +++ /dev/null @@ -1,60 +0,0 @@ - 'Maand moet vallen tussen 1 en 12. Opgegeven: {0}', - 'invalidDay' => 'Dag moet vallen tussen 1 end 31. Opgegeven: {0}', - 'invalidOverDay' => 'Dag moet vallen tussen 1 end {0}. Opgegeven: {1}', - 'invalidHours' => 'Uur moet vallen tussen 0 end 23. Opgegeven: {0}', - 'invalidMinutes' => 'Minuten moet vallen tussen 0 end 59. Opgegeven: {0}', - 'invalidSeconds' => 'Seconden moet vallen tussen 0 end 59. Opgegeven: {0}', - 'years' => '{0, plural, =1{# jaar} other{# jaren}}', - 'months' => '{0, plural, =1{# maand} other{# maanden}}', - 'weeks' => '{0, plural, =1{# week} other{# weken}}', - 'days' => '{0, plural, =1{# dag} other{# dagen}}', - 'hours' => '{0, plural, =1{# uur} other{# uren}}', - 'minutes' => '{0, plural, =1{# minuut} other{# minuten}}', - 'seconds' => '{0, plural, =1{# seconde} other{# seconden}}', - 'ago' => '{0} geleden', - 'inFuture' => 'binnen {0}', - 'yesterday' => 'Gisteren', - 'tomorrow' => 'Morgen', - 'now' => 'Zonet', -]; - diff --git a/app/Language/nl/Validation.php b/app/Language/nl/Validation.php deleted file mode 100644 index ec58a82e..00000000 --- a/app/Language/nl/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'Geen regelgroep in Validatie instellignen.', - 'ruleNotFound' => '{0} is geen geldige regel.', - 'groupNotFound' => '{0} is geen validatie regelgroep.', - 'groupNotArray' => '{0} regelgroep moet een array zijn.', - 'invalidTemplate' => '{0} is geen geldige validatie template.', - - // Rule Messages - 'alpha' => 'Het veld {field} mag enkel alfabetische karakters bevatten.', - 'alpha_dash' => 'Het veld {field} mag enkel alfanumerieke, _, and - karakters bevatten.', - 'alpha_numeric' => 'Het veld {field} mag enkel alfanumerieke karakters bevatten.', - 'alpha_numeric_punct' => 'Het veld {field} mag enkel alfanumerieke karakters, spaties, en de karakters ~ ! # $ % & * - _ + = | : . bevatten.', - 'alpha_numeric_space' => 'Het veld {field} mag enkel alfanumerieke karakters en spaties bevatten.', - 'alpha_space' => 'Het veld {field} mag enkel alfabetische karakters en spaties bevatten.', - 'decimal' => 'Het veld {field} moet een decimaal getal bevatten.', - 'differs' => 'Het veld {field} moet verschillen van het {param} veld.', - 'equals' => 'Het veld {field} moet gelijk zijn aan: {param}.', - 'exact_length' => 'Het veld {field} moet exact {param} karakters lang zijn.', - 'greater_than' => 'Het veld {field} moet een waarde groter dan {param} bevatten.', - 'greater_than_equal_to' => 'Het veld {field} moet een waarde groter dan of gelijk aan {param} bevatten.', - 'hex' => 'Het veld {field} mag enkel hexadecimale karakters bevatten.', - 'in_list' => 'Het veld {field} moet één van de volgende waardes bevatten: {param}.', - 'integer' => 'Het veld {field} moet een geheel getal bevatten.', - 'is_natural' => 'Het veld {field} mag enkel cijfers bevatten.', - 'is_natural_no_zero' => 'Het veld {field} mag enkel cijfers bevatten en moet groter zijn dan.', - 'is_not_unique' => 'Het veld {field} moet een waarde bevatten die reeds in de database bestaat.', - 'is_unique' => 'Het veld {field} moet een unieke waarde bevatten.', - 'less_than' => 'Het veld {field} moet een waarde bevatten kleiner dan {param}.', - 'less_than_equal_to' => 'Het veld {field} moet een waarde bevatten kleiner dan of gelijk aan {param}.', - 'matches' => 'Het veld {field} komt niet overeen met het {param} veld.', - 'max_length' => 'Het veld {field} mag niet meer dan {param} karakters lang zijn.', - 'min_length' => 'Het veld {field} moet minstens {param} karakters lang zijn.', - 'not_equals' => 'Het veld {field} mag niet zijn: {param}.', - 'numeric' => 'Het veld {field} mag enkel nummer bevatten.', - 'regex_match' => 'Het veld {field} is geen correct formaat.', - 'required' => 'Het veld {field} is verplicht.', - 'required_with' => 'Het veld {field} is verplicht wanneer {param} aanwezig is.', - 'required_without' => 'Het veld {field} is verplicht wanneer {param} niet aanwezig is.', - 'timezone' => 'Het veld {field} moet een geldige tijdzone zijn.', - 'valid_base64' => 'Het veld {field} moet een geldige base64 string zijn.', - 'valid_email' => 'Het veld {field} moet een geldig emailadres bevatten.', - 'valid_emails' => 'Het veld {field} mag enkel geldige emailadressen bevatten.', - 'valid_ip' => 'Het veld {field} moet een geldig IP-adres bevatten.', - 'valid_url' => 'Het veld {field} moet een geldige URL bevatten.', - 'valid_date' => 'Het veld {field} moet een geldige datum bevatten.', - - // Credit Cards - 'valid_cc_num' => '{field} lijkt geen geldige credit card nummer te bevatten.', - - // Files - 'uploaded' => '{field} bevat geen geldig upload bestand.', - 'max_size' => '{field} bevat een te groot bestand.', - 'is_image' => '{field} bevat geen geldige afbeelding.', - 'mime_in' => '{field} heeft geen geldig mime type.', - 'ext_in' => '{field} heeft geen geldige file extensie.', - 'max_dims' => '{field} is geen afbeelding, is te breed of te hoog', -]; \ No newline at end of file diff --git a/app/Language/nl/View.php b/app/Language/nl/View.php deleted file mode 100644 index 68fedf6b..00000000 --- a/app/Language/nl/View.php +++ /dev/null @@ -1,48 +0,0 @@ - '{class}::{method} is geen geldige methode.', - 'missingCellParameters' => '{class}::{method} heeft geen methode.', - 'invalidCellParameter' => '{0} is geen geldige parameter naam.', - 'noCellClass' => 'Geen view cell class opgegeven.', - 'invalidCellClass' => 'Kon view cell class niet vinden: {0}.', - 'tagSyntaxError' => 'Syntax fout in uw Parser tags: {0}', -]; - diff --git a/app/Language/no/CLI.php b/app/Language/no/CLI.php deleted file mode 100644 index 3fe0cb64..00000000 --- a/app/Language/no/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Command "{0}" not found.', - 'helpUsage' => 'bruke:', - 'helpDescription' => 'Beskrivelse:', - 'helpOptions' => 'alternativer:', - 'helpArguments' => 'argumenter:', - 'invalidColor' => 'Ugyldig {0} farge: {1}.', -]; diff --git a/app/Language/no/Cache.php b/app/Language/no/Cache.php deleted file mode 100644 index 7ac344ab..00000000 --- a/app/Language/no/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => '$validHandlers må inneholde en matrise for hurtigbufferkonfigurasjon.', - 'noBackup' => 'Cache-konfigurasjonen må ha en behandler og en backup-håndterer.', - 'handlerNotFound' => 'Cache-konfigurasjonen spesifiserer en ugyldig behandler eller backup-håndterer.', -]; diff --git a/app/Language/no/Cast.php b/app/Language/no/Cast.php deleted file mode 100644 index f7d244fe..00000000 --- a/app/Language/no/Cast.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Maksimal stakkdybde er overskredet', - 'jsonErrorStateMismatch' => 'Undertilstrømning eller tilstandsfeil', - 'jsonErrorCtrlChar' => 'Kontroller tegnfeil, muligens feil kodet', - 'jsonErrorSyntax' => 'Syntaksfeil, feilaktig JSON', - 'jsonErrorUtf8' => 'Ugyldig UTF-8-tegn, muligens feil kodet', - 'jsonErrorUnknown' => 'Ukjent feil', -]; diff --git a/app/Language/no/Core.php b/app/Language/no/Core.php deleted file mode 100644 index f302283f..00000000 --- a/app/Language/no/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Ugyldig fil: {0}', - 'copyError' => 'Det oppstod en feil under forsøket på å erstatte filen. Forsikre deg om at katalogen er skrivbar.', - 'missingExtension' => 'Utvidelsen {0} kunne ikke lastes.', - 'noHandlers' => '{0} må tilby minst en behandler.', -]; diff --git a/app/Language/no/Database.php b/app/Language/no/Database.php deleted file mode 100644 index c39a66b6..00000000 --- a/app/Language/no/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} er ikke en gyldig tilbakekall av modellhendelsen.', - 'invalidArgument' => 'Ugyldig argument: {0}.', - 'invalidAllowedFields' => 'Det er ingen tillatte felt for modellen: {0}', - 'emptyDataset' => 'Ingen data funnet for: {0}.', - 'failGetFieldData' => 'Ingen feltdata kunne hentes fra databasen.', - 'failGetIndexData' => 'Indeksdata kunne ikke hentes fra databasen.', - 'failGetForeignKeyData' => 'De fremmede nøklene kunne ikke hentes fra databasen.', - 'parseStringFail' => 'Analysering av nøkkelstrengen mislyktes.', - 'featureUnavailable' => 'Denne funksjonen er ikke tilgjengelig i databasen du bruker.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/no/Email.php b/app/Language/no/Email.php deleted file mode 100644 index 19b0c598..00000000 --- a/app/Language/no/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'The email validation method must be passed an array.', - 'invalidAddress' => 'Invalid email address: {0}', - 'attachmentMissing' => 'Unable to locate the following email attachment: {0}', - 'attachmentUnreadable' => 'Unable to open this attachment: {0}', - 'noFrom' => 'Cannot send mail with no "From" header.', - 'noRecipients' => 'You must include recipients: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.', - 'sendFailureSendmail' => 'Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.', - 'sendFailureSmtp' => 'Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.', - 'sent' => 'Your message has been successfully sent using the following protocol: {0}', - 'noSocket' => 'Unable to open a socket to Sendmail. Please check settings.', - 'noHostname' => 'You did not specify a SMTP hostname.', - 'SMTPError' => 'The following SMTP error was encountered: {0}', - 'noSMTPAuth' => 'Error: You must assign a SMTP username and password.', - 'failedSMTPLogin' => 'Failed to send AUTH LOGIN command. Error: {0}', - 'SMTPAuthUsername' => 'Failed to authenticate username. Error: {0}', - 'SMTPAuthPassword' => 'Failed to authenticate password. Error: {0}', - 'SMTPDataFailure' => 'Unable to send data: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; diff --git a/app/Language/no/Encryption.php b/app/Language/no/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/no/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/no/Entity.php b/app/Language/no/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/no/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/no/Files.php b/app/Language/no/Files.php deleted file mode 100644 index d8781e58..00000000 --- a/app/Language/no/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Filen ble ikke funnet: {0}', - 'cannotMove' => 'Filen kunne ikke flyttes fra {0} til {1} ({2})', -]; diff --git a/app/Language/no/Filters.php b/app/Language/no/Filters.php deleted file mode 100644 index 352a92cf..00000000 --- a/app/Language/no/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - 'For filter {0} må et matchende alias defineres.', - 'incorrectInterface' => '{0} må implementere CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/no/Format.php b/app/Language/no/Format.php deleted file mode 100644 index de98a440..00000000 --- a/app/Language/no/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'JSON-streng kunne ikke tolkes. Feil: "{0}".', - 'missingExtension' => 'SimpleXML-utvidelsen er nødvendig for å formatere XML.', -]; diff --git a/app/Language/no/HTTP.php b/app/Language/no/HTTP.php deleted file mode 100644 index c46a056b..00000000 --- a/app/Language/no/HTTP.php +++ /dev/null @@ -1,101 +0,0 @@ - 'CURL må være aktivert for å bruke CURLRequest-klassen.', - 'invalidSSLKey' => 'Kan ikke sette inn SSL-nøkkel. {0} er ikke et gyldig filnavn.', - 'sslCertNotFound' => 'SSL-sertifikat ikke funnet under :: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} er ikke en gyldig innholdstype. Gyldige typer: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Ugyldig HTTP-protokollversjon. Gyldige versjoner: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Gyldige innholdstyper må spesifiseres.', - - // RedirectResponse - 'invalidRoute' => '{0} er en gyldig rute.', - - // DownloadResponse - 'cannotSetBinary' => 'Feil ved nedlasting. Filsti kan ikke settes til binær.', - 'cannotSetFilepath' => 'Feil under binær nedlasting. Kan ikke angi filsti: {0}', - 'notFoundDownloadSource' => 'Feil ved nedlasting av filen.', - 'cannotSetCache' => 'Feil under innstilling av nedlastingsbufferen.', - 'cannotSetStatusCode' => 'Feil ved nedlasting. Statuskode kunne ikke settes. Kode: {0}, årsak: {1}', - - // Response - 'missingResponseStatus' => 'HTTP-svar inneholder ikke en statuskode', - 'invalidStatusCode' => '{0} er en ugyldig HTTP-statuskode', - 'unknownStatusCode' => 'Ukjent HTTP-statuskode uten melding: {0}', - - // URI - 'cannotParseURI' => 'URI kan ikke analyseres: {0}', - 'segmentOutOfRange' => 'URI-segmentet i forespørselen er utenfor grensene: {0}', - 'invalidPort' => 'Portene må være mellom 0 og 65535. gitt: {0}', - 'malformedQueryString' => 'Forespørselstrenger kan ikke inneholde URI-fragmenter.', - - // Page Not Found - 'pageNotFound' => 'Siden ble ikke funnet', - 'emptyController' => 'Ingen Controller spesifisert.', - 'controllerNotFound' => 'Kontrolleren eller metoden ble ikke funnet: {0} :: {1}', - 'methodNotFound' => 'Kontroller-metoden ble ikke funnet: {0}', - - // CSRF - 'disallowedAction' => 'Den forespurte handlingen er ikke tillatt.', - - // Uploaded file moving - 'alreadyMoved' => 'Den opplastede filen er allerede flyttet.', - 'invalidFile' => 'Den opprinnelige filen er ikke en gyldig fil.', - 'moveFailed' => 'Filen kunne ikke flyttes fra {0} til {1} ({2})', - - 'uploadErrOk' => 'Filen ble lastet opp.', - 'uploadErrIniSize' => 'Filen "%s" overstiger upload_max_filesize ini.', - 'uploadErrFormSize' => 'Filen "%s" overstiger opplastingsgrensen definert i form.', - 'uploadErrFormSize' => 'Filen "%s" er større enn grensen satt i skjemaet', - 'uploadErrPartial' => 'Filen "%s" ble bare delvis lastet opp.', - 'uploadErrNoFile' => 'Ingen filer ble lastet opp', - 'uploadErrCantWrite' => 'Filen "%s" kunne ikke lagres.', - 'uploadErrNoTmpDir' => 'Feil med opplasting: Midlertidig katalog mangler.', - 'uploadErrExtension' => 'Filopplastningen ble stoppet av en PHP-utvidelse.', - 'uploadErrUnknown' => 'Filen "%s" kunne ikke lastes opp på grunn av en ukjent feil.', -]; diff --git a/app/Language/no/Images.php b/app/Language/no/Images.php deleted file mode 100644 index 829a918d..00000000 --- a/app/Language/no/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Det må spesifiseres i innstillingene til et kildebilde', - 'gdRequired' => 'For å bruke denne funksjonen er GD-bildebiblioteket påkrevd.', - 'gdRequiredForProps' => 'Serveren må støtte GD-bildebiblioteket for å bestemme bildeegenskapene.', - 'gifNotSupported' => 'GIF-bilder støttes ofte ikke på grunn av lisensbegrensninger. Du må kanskje bruke JPG- eller PNG-bilder i stedet.', - 'jpgNotSupported' => 'JPG-bilder støttes ikke.', - 'pngNotSupported' => 'PNG-bilder støttes ikke.', - 'unsupportedImageCreate' => 'Serveren støtter ikke GD-funksjonen som kreves for å behandle denne typen bilder.', - 'jpgOrPngRequired' => 'Endringsprotokoll for bildestørrelse som er spesifisert i innstillingene, fungerer bare med JPEG- eller PNG-bildetyper.', - 'rotateUnsupported' => 'Bildrotasjon ser ikke ut til å være støttet av serveren.', - 'libPathInvalid' => 'Stien til bildebiblioteket ditt er ikke riktig. Angi riktig sti i bildeinnstillingene. {0, string)', - 'imageProcessFailed' => 'Bildebehandlingen mislyktes. Kontroller om serveren støtter den valgte protokollen, og om banen til bildebiblioteket er riktig.', - 'rotationAngleRequired' => 'Rotasjonen av bildet krever en rotasjonsvinkel.', - 'invalidPath' => 'Stien til bildet er ikke riktig.', - 'copyFailed' => 'Rutinen for bildekopiering mislyktes.', - 'missingFont' => 'Det er ikke mulig å finne en font som skal brukes.', - 'saveFailed' => 'Bildet kan ikke lagres. Forsikre deg om at bilde- og filkatalogen er skrivbar.', - 'invalidDirection' => 'Den motsatte retningen kan bare være "vertikal" eller "horisontal". satt: {0}', - 'exifNotSupported' => 'Lesing av EXIF-data støttes ikke av denne PHP-installasjonen.', -]; diff --git a/app/Language/no/Language.php b/app/Language/no/Language.php deleted file mode 100644 index 745648d1..00000000 --- a/app/Language/no/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line må være en streng eller en rekke strenger.', -]; diff --git a/app/Language/no/Log.php b/app/Language/no/Log.php deleted file mode 100644 index eadd7379..00000000 --- a/app/Language/no/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} er et ugyldig loggenivå.', -]; diff --git a/app/Language/no/Migrations.php b/app/Language/no/Migrations.php deleted file mode 100644 index d7420f43..00000000 --- a/app/Language/no/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Migreringstabell må være satt.', -// 'invalidType' => 'En ugyldig overføringsnummerering ble spesifisert: {0}', - 'disabled' => 'Overføringer er lastet, men er deaktivert eller feil konfigurert.', - 'notFound' => 'Migreringsfil ikke funnet: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Ingen migrasjonsfiler funnet', - 'gap' => 'Det er et gap i migrasjonshistorikken i nærheten av versjonsnummeret: ', - 'classNotFound' => 'Migrasjonsklassen "%s" ble ikke funnet.', - 'missingMethod' => 'Migrasjonsklassen mangler en "%s" -metode.', - - // Migration Command - 'migHelpLatest' => "\t\tMigrerer databasen til den siste tilgjengelige migreringen.", - 'migHelpCurrent' => "\t\tMigrerer databasen til versjonssettet i konfigurasjonen som 'aktuell'.", - 'migHelpVersion' => "\tMigrerer databasen til versjon {v}.", - 'migHelpRollback' => "\tUtfører alle overføringer 'ned' til versjon 0.", - 'migHelpRefresh' => "\t\tAvinstallerer og kjører alle migrasjoner for å oppdatere databasen.", - 'migHelpSeed' => "\tLagrer eksempeldata etter navn [name].", - 'migCreate' => "\tOpprett en ny migrering med navnet [name]", - 'nameMigration' => 'Gi overføringsfilen navn', - 'badCreateName' => 'Et gyldig overføringsfilnavn må spesifiseres.', - 'writeError' => 'Feil ved oppretting av filen.', - 'migNumberError' => 'Overføringsnummeret må være tre sifre, og det må ikke være noen hull i sekvensen.', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', -// 'toLatest' => 'Overføring til siste versjon...', - 'migInvalidVersion' => 'Ugyldig versjonsnummer spesifisert.', - 'toVersionPH' => 'Overføring til versjon %s...', - 'toVersion' => 'Overføring til gjeldende versjon...', - 'rollingBack' => 'Tilbakestiller migrering...', - 'noneFound' => 'Ingen migrasjoner ble funnet..', - 'on' => 'Migrert til: ', - 'migSeeder' => 'Eksempel data Navn', - 'migMissingSeeder' => 'Et eksempeldata må spesifiseres.', - 'removed' => 'rulle tilbake til: ', - 'added' => 'utføre: ', - - 'version' => 'Versjon', - 'filename' => 'filnavn', -]; diff --git a/app/Language/no/Number.php b/app/Language/no/Number.php deleted file mode 100644 index bb2d801a..00000000 --- a/app/Language/no/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' Tusen', - 'million' => ' Million', - 'billion' => ' Milliarder', - 'trillion' => ' Billion', - 'quadrillion' => ' Billiarder', -]; diff --git a/app/Language/no/Pager.php b/app/Language/no/Pager.php deleted file mode 100644 index ad06d6f3..00000000 --- a/app/Language/no/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Sidenavigasjon', - 'first' => 'første', - 'previous' => 'siste', - 'next' => 'mer', - 'last' => 'tilbake', - 'older' => 'eldre', - 'newer' => 'ny', - 'invalidTemplate' => '{0} er ikke en gyldig mal.', - 'invalidPaginationGroup' => '{0} er ikke en gyldig sidegruppe.', -]; diff --git a/app/Language/no/RESTful.php b/app/Language/no/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/no/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/no/Redirect.php b/app/Language/no/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/no/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/no/Router.php b/app/Language/no/Router.php deleted file mode 100644 index 06f45527..00000000 --- a/app/Language/no/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'En parameter samsvarer ikke med den forventede typen.', - 'missingDefaultRoute' => 'Det kunne ikke bestemmes hva som skal vises. Ingen standardrute ble spesifisert i rutefilen.', -]; diff --git a/app/Language/no/Session.php b/app/Language/no/Session.php deleted file mode 100644 index e4ed07f8..00000000 --- a/app/Language/no/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - 'I `sessionSavePath` må tabellnavnet spesifiseres slik at økthåndteringen fungerer via databasen.', - 'invalidSavePath' => 'Hurtiglager: Den konfigurerte lagringsstien "{0}" er ikke en katalog, eksisterer ikke eller kan ikke opprettes.', - 'writeProtectedSavePath' => 'Hurtiglager: Den konfigurerte lagringsstien "{0}" kan ikke beskrives av PHP-prosessen.', - 'emptySavePath' => 'Hurtiglager: Ingen lagringsbane konfigurert.', - 'invalidSavePathFormat' => 'Hurtiglager: Ugyldig Redis lagringsbaneformat: {0}', -]; diff --git a/app/Language/no/Time.php b/app/Language/no/Time.php deleted file mode 100644 index 6326c8c4..00000000 --- a/app/Language/no/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Måneden må være mellom 1 og 12. : {0}', - 'invalidDay' => 'Dagen må være mellom 1 og 31. : {0}', - 'invalidOverDay' => 'Tagg må være mellom 1 og {0}. Inndata: {1}', - 'invalidHours' => 'Timer må være mellom 0 og 23. Inndata: {0}', - 'invalidMinutes' => 'Minutt må være mellom 0 og 59. Inndata: {0}', - 'invalidSeconds' => 'Sekunder må være mellom 0 og 59. Inndata: {0}', - 'years' => '{0, plural, =1{# år} other{# år}}', - 'months' => '{0, plural, =1{# måned} other{# måneder}}', - 'weeks' => '{0, plural, =1{# uke} other{# uker}}', - 'days' => '{0, plural, =1{# dag} other{# dager}}', - 'hours' => '{0, plural, =1{# time} other{# timer}}', - 'minutes' => '{0, plural, =1{# minutt} other{# minutter}}', - 'seconds' => '{0, plural, =1{# sekund} other{# sekunder}}', - 'ago' => '{0} siden', - 'inFuture' => 'i {0}', - 'yesterday' => 'i går', - 'tomorrow' => 'i morgen', - 'now' => 'nå', -]; diff --git a/app/Language/no/Validation.php b/app/Language/no/Validation.php deleted file mode 100644 index 2239ec09..00000000 --- a/app/Language/no/Validation.php +++ /dev/null @@ -1,94 +0,0 @@ - 'Ingen regelsett er spesifisert i valideringskonfigurasjonen.', - 'ruleNotFound' => '{0} er ikke en gyldig regel.', - 'groupNotFound' => '{0} er ikke en gruppe valideringsregler.', - 'groupNotArray' => '{0} Regelgruppe må være en matrise.', - 'invalidTemplate' => '{0} er ikke en gyldig valideringsmal.', - - // Rule Messages - 'alpha' => 'Skjemafeltet {field} kan bare inneholde alfabetiske tegn.', - 'alpha_dash' => 'Skjemafeltet {field} kan bare inneholde alfanumeriske tegn, understrekinger og bindestrek.', - 'alpha_numeric' => 'Skjemafeltet {field} kan bare inneholde alfanumeriske tegn.', - 'alpha_numeric_space' => 'Skjemafeltet {field} kan bare inneholde alfanumeriske tegn og mellomrom.', - 'alpha_space' => 'Skjemafeltet {field} kan bare inneholde alfabetiske tegn og mellomrom.', - 'decimal' => 'Skjemafeltet {field} må inneholde et desimaltall.', - 'differs' => 'Skjemafeltet {field} må være forskjellig fra {param} -feltet.', - 'equals' => 'Skjemafeltet {field} må være nøyaktig: {param}.', - 'exact_length' => 'Skjemafeltet {field} må være nøyaktig {param} tegn.', - 'greater_than' => 'Skjemafeltet {field} må inneholde et tall som er større enn {param}.', - 'greater_than_equal_to' => 'Skjemafeltet {field} må inneholde et tall større enn eller lik {param}.', - 'in_list' => 'Skjemafeltet {field} må være ett av følgende: {param}.', - 'integer' => 'Skjemafeltet {field} må inneholde et heltall.', - 'is_natural' => 'Skjemafeltet {field} kan bare inneholde sifre.', - 'is_natural_no_zero' => 'Skjemafeltet {field} kan bare inneholde sifre og må være større enn null.', - 'is_unique' => 'Skjemafeltet {field} må inneholde en unik verdi.', - 'less_than' => 'Skjemafeltet {field} må inneholde et nummer som er mindre enn {param}.', - 'less_than_equal_to' => 'Skjemafeltet {field} må inneholde et tall som er mindre enn eller lik {param}.', - 'matches' => 'Skjemafeltet {field} tilsvarer ikke {param} -feltet.', - 'max_length' => 'Skjemafeltet {field} kan ikke overstige lengden på {param} tegn.', - 'min_length' => 'Skjemafeltet {field} må være minst {param} tegn langt.', - 'not_equals' => 'Skjemafeltet {field} kan ikke være: {param}.', - 'numeric' => 'Skjemafeltet {field} kan bare inneholde tall.', - 'regex_match' => 'Skjemafeltet {field} er ikke i riktig format.', - 'required' => 'Skjemafeltet {field} er obligatorisk.', - 'required_with' => 'Skjemafeltet {field} er obligatorisk hvis {param} eksisterer. {field} -Formularfelt', - 'required_without' => 'Skjemafeltet {field} er obligatorisk hvis {param} ikke eksisterer.', - 'timezone' => 'Skjemafeltet {field} må være en gyldig tidssone.', - 'valid_base64' => 'Skjemafeltet {field} må være en gyldig base64-streng.', - 'valid_email' => 'Skjemafeltet {field} må inneholde en gyldig e-postadresse.', - 'valid_emails' => 'Skjemafeltet {field} må inneholde gyldige e-postadresser.', - 'valid_ip' => 'Skjemafeltet {field} må inneholde en gyldig IP.', - 'valid_url' => 'Skjemafeltet {field} må inneholde en gyldig URL.', - 'valid_date' => 'Skjemafeltet {field} må inneholde en gyldig dato.', - - // Credit Cards - 'valid_cc_num' => 'Skjemafeltet {field} ser ikke ut til å inneholde et gyldig kredittkortnummer.', - - // Files - 'uploaded' => 'Skjemafeltet {field} inneholder ikke en gyldig opplastet fil.', - 'max_size' => 'Skjemafeltet {field} inneholder en for stor fil.', - 'is_image' => 'Skjemafeltet {field} inneholder ikke en gyldig, opplastet bildefil.', - 'mime_in' => 'Skjemafeltet {field} inneholder ikke en gyldig mimetype.', - 'ext_in' => 'Skjemafeltet {field} inneholder ikke en gyldig filtype.', - 'max_dims' => 'Skjemafeltet {field} inneholder enten ikke noe bilde eller er for bredt eller for høyt.', -]; diff --git a/app/Language/no/View.php b/app/Language/no/View.php deleted file mode 100644 index d8cc8472..00000000 --- a/app/Language/no/View.php +++ /dev/null @@ -1,47 +0,0 @@ - '{class}::{method} er ikke en gyldig metode.', - 'missingCellParameters' => '{class}::{method} har ingen parametere.', - 'invalidCellParameter' => '{0} er et ugyldig parameternavn.', - 'noCellClass' => 'Det er ikke angitt noe View', - 'invalidCellClass' => 'Klassen ble ikke funnet: {0}.', - 'tagSyntaxError' => 'Syntaksfeil i parser-koden: {0}', -]; diff --git a/app/Language/pl/CLI.php b/app/Language/pl/CLI.php deleted file mode 100644 index ba4c3edc..00000000 --- a/app/Language/pl/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Command "{0}" not found.', - 'helpUsage' => 'Zastosowanie:', - 'helpDescription' => 'Opis:', - 'helpOptions' => 'Opcje:', - 'helpArguments' => 'Argumentty:', - 'invalidColor' => 'Nieprawidłowy kolor {0}: {1}.', -]; diff --git a/app/Language/pl/Cache.php b/app/Language/pl/Cache.php deleted file mode 100644 index 11fe8e2c..00000000 --- a/app/Language/pl/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => 'Konfiguracja pamięci podręcznej musi mieć tablicę $validHandlers.', - 'noBackup' => 'Konfigura cache musi mieć ustawiony moduł obsługi i backupHandler.', - 'handlerNotFound' => 'Konfigura pamięci podręcznej ma określony nieprawidłowy program obsługi lub procedurę obsługi kopii zapasowej.', -]; diff --git a/app/Language/pl/Cast.php b/app/Language/pl/Cast.php deleted file mode 100644 index d1766df5..00000000 --- a/app/Language/pl/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Przekroczono maksymalną głębokość stosu', - 'jsonErrorStateMismatch' => 'Niedopełnienie lub niedopasowanie trybów', - 'jsonErrorCtrlChar' => 'Znaleziono nieoczekiwany znak kontrolny', - 'jsonErrorSyntax' => 'Błąd składniowy, źle sformułowany JSON', - 'jsonErrorUtf8' => 'Zniekształcone znaki UTF-8, prawdopodobnie niepoprawnie zakodowane', - 'jsonErrorUnknown' => 'Nieznany błąd' -]; diff --git a/app/Language/pl/Core.php b/app/Language/pl/Core.php deleted file mode 100644 index 8e1c53b5..00000000 --- a/app/Language/pl/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Nieprawidłowy plik: {0}', - 'copyError' => 'Napotkano błąd podczas próby zastąpienia pliku. Upewnij się, że twój katalog plików jest zapisywalny.', - 'missingExtension' => 'Rozszerzenie {0} nie zostało załadowane.', - 'noHandlers' => '{0} musi zapewniać co najmniej jeden Handler.', -]; diff --git a/app/Language/pl/Database.php b/app/Language/pl/Database.php deleted file mode 100644 index b2321557..00000000 --- a/app/Language/pl/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} nie jest prawidłowym wywołaniem wywołania modelu.', - 'invalidArgument' => 'Musisz podać poprawną {0}.', - 'invalidAllowedFields' => 'Dozwolone pola muszą być określone dla modelu: {0}', - 'emptyDataset' => 'Brak danych do {0}.', - 'failGetFieldData' => 'Failed to get field data from database.', - 'failGetIndexData' => 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'This feature is not available for the database you are using.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/pl/Email.php b/app/Language/pl/Email.php deleted file mode 100644 index 7063ef17..00000000 --- a/app/Language/pl/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Metoda weryfikacji e-maila musi być przekazana w tablicy.', - 'invalidAddress' => 'Niepoprawny adres e-mail: {0}', - 'attachmentMissing' => 'Nie można zlokalizować następujących załączników: {0}', - 'attachmentUnreadable' => 'Nie można otworzyć następujących załączników: {0}', - 'noFrom' => 'Nie można wysłać wiadomości bez nagłówka "From".', - 'noRecipients' => 'Należy dodać odbiorców: To, Cc lub Bcc', - 'sendFailurePHPMail' => 'Nie można wysłać e-maila za pomocą PHP mail(). Twój serwer może nie być skonfigurowany by wysyłać e-maile za pomocą tej metody.', - 'sendFailureSendmail' => 'Nie można wysłać e-maila za pomocą PHP Sendmail. Twój serwer może nie być skonfigurowany by wysyłać e-maile za pomocą tej metody.', - 'sendFailureSmtp' => 'Nie można wysłać e-maila za pomoc PHP SMTP. Twój serwer może nie być skonfigurowany by wysyłać e-maile za pomocą tej metody.', - 'sent' => 'Twój e-mail został pomyślnie wysłany za pomocą metody: {0}', - 'noSocket' => 'Nie można otworzyć socketu do Sendmail. Proszę sprawdzić ustawienia.', - 'noHostname' => 'Nie podano nazwy hosta SMTP.', - 'SMTPError' => 'Wystąpił następujący błąd SMTP: {0}', - 'noSMTPAuth' => 'Błąd: Należy podać nazwę użytkownika i hasło SMTP.', - 'failedSMTPLogin' => 'Błąd przy wysyłaniu komendy AUTH LOGIN. Błąd: {0}', - 'SMTPAuthUsername' => 'Błąd autentykacji nazwy użytkownika. Błąd: {0}', - 'SMTPAuthPassword' => 'Błąd autentykacji hasła. Błąd: {0}', - 'SMTPDataFailure' => 'Nie można wysłać danych: {0}', - 'exitStatus' => 'Status kodu wyjścia: {0}', -]; diff --git a/app/Language/pl/Encryption.php b/app/Language/pl/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/pl/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/pl/Entity.php b/app/Language/pl/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/pl/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/pl/Files.php b/app/Language/pl/Files.php deleted file mode 100644 index 118e2254..00000000 --- a/app/Language/pl/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Nie znaleziono pliku: {0}', - 'cannotMove' => 'Nie można przenieść pliku {0} do {1} ({2})', -// 'invalidFilename' => 'Brak docelowej nazwy pliku lub jest on nieprawidłowy: {0}', -// 'cannotCopy' => 'Nie można skopiować do {0} - upewnij się, że folder jest zapisywalny', -]; diff --git a/app/Language/pl/Filters.php b/app/Language/pl/Filters.php deleted file mode 100644 index 919aa13d..00000000 --- a/app/Language/pl/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Filtr \'{0}\' musi mieć zdefiniowany pasujący alias.', - 'incorrectInterface' => '{0} musi implementować CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/pl/Format.php b/app/Language/pl/Format.php deleted file mode 100644 index fc0d0bb6..00000000 --- a/app/Language/pl/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Nie można przeanalizować łańcucha JSON, błąd: "{0}".', - 'missingExtension' => 'Rozszerzenie SimpleXML jest wymagane do formatowania XML.', -]; diff --git a/app/Language/pl/HTTP.php b/app/Language/pl/HTTP.php deleted file mode 100644 index a279729a..00000000 --- a/app/Language/pl/HTTP.php +++ /dev/null @@ -1,98 +0,0 @@ - 'CURL musi mieć możliwość korzystania z klasy CURLRequest.', - 'invalidSSLKey' => 'Nie można ustawić klucza SSL. {0} nie jest prawidłowym plikiem.', - 'sslCertNotFound' => 'Nie znaleziono certyfikatu SSL pod adresem: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} nie jest prawidłowym typem negocjacji. Musi to być jeden z: mediów, zestawu znaków, kodowania, języka.', - - // Message - 'invalidHTTPProtocol' => 'Nieprawidłowa wersja protokołu HTTP. Musi być jednym z: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Musisz dostarczyć tablicę obsługiwanych wartości do wszystkich Negocjacji.', - - // RedirectResponse - 'invalidRoute' => '{0} nie jest prawidłową trasą.', - - // DownloadResponse - 'cannotSetBinary' => 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'W odpowiedzi HTTP brakuje kodu statusu', - 'invalidStatusCode' => '{0} nie jest prawidłowym kodem statusu zwrotu HTTP', - 'unknownStatusCode' => 'Nieznany kod statusu HTTP dostarczony bez komunikatu: {0}', - - // URI - 'cannotParseURI' => 'Nie można przeanalizować identyfikatora URI: {0}', - 'segmentOutOfRange' => 'Segment żądania identyfikatora URI jest poza zakresem: {0}', - 'invalidPort' => 'Porty muszą należeć do zakresu od 0 do 65535. Podano: {0}', - 'malformedQueryString' => 'Łańcuchy zapytań mogą nie zawierać fragmentów URI.', - - // Page Not Found - 'pageNotFound' => 'Strona nie została znaleziona', - 'emptyController' => 'Nie określono kontrolera.', - 'controllerNotFound' => 'Nie znaleziono kontrolera lub jego metody: {0}::{1}', - 'methodNotFound' => 'Nie znaleziono metody kontrolera: {0}', - - // CSRF - 'disallowedAction' => 'Żądane działanie jest niedozwolone.', - - // Uploaded file moving - 'alreadyMoved' => 'Przesłany plik został już przeniesiony.', - 'invalidFile' => 'Oryginalny plik nie jest prawidłowym plikiem.', - 'moveFailed' => 'Nie można przenieść pliku {0} do {1} ({2})', - 'uploadErrOk' => 'Plik został prawidłowo wysłany.', - 'uploadErrIniSize' => 'Wielkość pliku "%s" przekracza wielkość określoną przez upload_max_filesize', - 'uploadErrFormSize' => 'Wielkość pliku "%s" przekracza wielkość określoną w formularzu.', - 'uploadErrPartial' => 'Plik "%s" został wysłany częściowo.', - 'uploadErrNoFile' => 'Plik nie został wysłany', - 'uploadErrCantWrite' => 'Plik "%s" nie może być zapisany na dysku.', - 'uploadErrNoTmpDir' => 'Plik nie może zostać wysłany. Brak katalogu tymczasowego.', - 'uploadErrExtension' => 'Wysyłka pliku została zablokowana przez PHP.', - 'uploadErrUnknown' => 'Plik "%s" nie został wysłany z nieznanego powodu.' -]; diff --git a/app/Language/pl/Images.php b/app/Language/pl/Images.php deleted file mode 100644 index f51e9b09..00000000 --- a/app/Language/pl/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Musisz określić obraz źródłowy w swoich preferencjach.', - 'gdRequired' => 'Do korzystania z tej funkcji wymagana jest biblioteka obrazów GD.', - 'gdRequiredForProps' => 'Twój serwer musi obsługiwać bibliotekę obrazów GD w celu określenia właściwości obrazu.', - 'gifNotSupported' => 'Obrazy GIF często nie są obsługiwane ze względu na ograniczenia licencyjne. Może być konieczne użycie obrazów JPG lub PNG.', - 'jpgNotSupported' => 'Obrazy JPG nie są obsługiwane.', - 'pngNotSupported' => 'Obrazy PNG nie są obsługiwane.', - 'unsupportedImageCreate' => 'Twój serwer nie obsługuje funkcji GD wymaganej do przetwarzania tego typu obrazu.', - 'jpgOrPngRequired' => 'Protokół zmiany rozmiaru obrazu określony w preferencjach działa tylko z obrazami JPEG lub PNG.', - 'rotateUnsupported' => 'Obracanie obrazu nie jest obsługiwane przez Twój serwer.', - 'libPathInvalid' => 'Ścieżka do biblioteki obrazów jest niepoprawna. Ustaw prawidłową ścieżkę w preferencjach obrazu. {0, string)', - 'imageProcessFailed' => 'Przetwarzanie obrazu się nie udało. Sprawdź, czy twój serwer obsługuje wybrany protokół i czy ścieżka do biblioteki obrazów jest prawidłowa.', - 'rotationAngleRequired' => 'Aby obrócić obraz, wymagany jest kąt obrotu.', - 'invalidPath' => 'Ścieżka do obrazu jest nieprawidłowa.', - 'copyFailed' => 'Procedura kopiowania obrazów nie powiodła się.', - 'missingFont' => 'Nie można znaleźć czcionki do użycia.', - 'saveFailed' => 'Nie można zapisać obrazu. Upewnij się, że obraz i katalog plików są zapisywalne.', - 'invalidDirection' => 'Kierunek odwrócenia może być tylko "pionowy" lub "poziomy". Podano: {0}', - 'exifNotSupported' => 'Odczytywanie danych EXIF nie jest obsługiwane przez tę instalację PHP.', -]; diff --git a/app/Language/pl/Language.php b/app/Language/pl/Language.php deleted file mode 100644 index a5e34a44..00000000 --- a/app/Language/pl/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'Linia get musi być łańcuchem lub ciągiem znaków.' -]; diff --git a/app/Language/pl/Log.php b/app/Language/pl/Log.php deleted file mode 100644 index 43311b80..00000000 --- a/app/Language/pl/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} jest nieprawidłowym poziomem zapisywania Logów.', -]; diff --git a/app/Language/pl/Migrations.php b/app/Language/pl/Migrations.php deleted file mode 100644 index 4d3463ef..00000000 --- a/app/Language/pl/Migrations.php +++ /dev/null @@ -1,80 +0,0 @@ - 'Tabela migracji musi zostać ustawiona.', -// 'invalidType' => 'Określono niepoprawny typ numerowania migracji: {0}', - 'disabled' => 'Migracje zostały załadowane, ale są wyłączone lub niepoprawnie skonfigurowane.', - 'notFound' => 'Nie znaleziono pliku migracji: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Nie znaleziono plików migracji', - 'gap' => 'W sekwencji migracji znajduje się luka w pobliżu numeru wersji: ', - 'classNotFound' => 'Nie można znaleźć klasy migracji "%s".', - 'missingMethod' => 'W klasie migracji brakuje metody "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tPrzeprowadza migrację bazy danych do najnowszej dostępnej migracji.", - 'migHelpCurrent' => "\t\tMigracja bazy danych do wersji ustawionej jako \"aktualny\" w konfiguracji.", - 'migHelpVersion' => "\tMigracja bazy danych do wersji {v}.", - 'migHelpRollback' => "\tUruchamia wszystkie migracje \"w dół\" do wersji 0.", - 'migHelpRefresh' => "\t\tOdinstalowuje i ponownie uruchamia wszystkie migracje, aby odświeżyć bazę danych.", - 'migHelpSeed' => "\tUruchamia siewnik o nazwie [name].", - 'migCreate' => "\tTworzy nową migrację o nazwie [name]", - 'nameMigration' => 'Nazwij plik migracji', - 'badCreateName' => 'Musisz podać nazwę pliku migracji.', - 'writeError' => 'Błąd podczas próby utworzenia pliku.', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', -// 'toLatest' => 'Migrowanie do najnowszej wersji...', - 'migInvalidVersion' => 'Podano nieprawidłowy numer wersji.', - 'toVersionPH' => 'Migrowanie do wersji %s...', - 'toVersion' => 'Migracja do bieżącej wersji...', - 'rollingBack' => 'Wycofuję wszystkie migracje...', - 'noneFound' => 'Nie znaleziono migracji.', - 'on' => 'Migracja włączona: ', - 'migSeeder' => 'Nazwa Seedera', - 'migMissingSeeder' => 'Musisz podać nazwę seedera.', - 'removed' => 'Wycofywanie: ', - 'added' => 'Uruchomienie: ', - - 'version' => 'Wersja', - 'filename' => 'Nazwa pliku', -]; diff --git a/app/Language/pl/Number.php b/app/Language/pl/Number.php deleted file mode 100644 index b0783d28..00000000 --- a/app/Language/pl/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bajty', - - // don't forget the space in front of these! - 'thousand' => ' tysiąc', - 'million' => ' milion', - 'billion' => ' miliard', - 'trillion' => ' kwintylion', - 'quadrillion' => ' kwadrylion', -]; diff --git a/app/Language/pl/Pager.php b/app/Language/pl/Pager.php deleted file mode 100644 index b5ad4845..00000000 --- a/app/Language/pl/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Nawigacja strony', - 'first' => 'Pierwszy', - 'previous' => 'Poprzedni', - 'next' => 'Następny', - 'last' => 'Ostatni', - 'older' => 'Starszy', - 'newer' => 'Nowszy', - 'invalidTemplate' => '{0} nie jest prawidłowym szablonem Pager.', - 'invalidPaginationGroup' => '{0} nie jest prawidłową grupą Pager.', -]; diff --git a/app/Language/pl/RESTful.php b/app/Language/pl/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/pl/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/pl/Redirect.php b/app/Language/pl/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/pl/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/pl/Router.php b/app/Language/pl/Router.php deleted file mode 100644 index 0ad7d8ea..00000000 --- a/app/Language/pl/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Parametr nie pasuje do oczekiwanego typu.', - 'missingDefaultRoute' => 'Nie można określić, co powinno być wyświetlane. Trasa domyślna nie została określona w pliku routingu.', -]; diff --git a/app/Language/pl/Session.php b/app/Language/pl/Session.php deleted file mode 100644 index ec852b77..00000000 --- a/app/Language/pl/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` musi mieć nazwę tabeli dla obsługi sesji bazy danych.', - 'invalidSavePath' => 'Sesja: Skonfigurowana ścieżka zapisu "{0}" nie jest katalogiem, nie istnieje lub nie można jej utworzyć.', - 'writeProtectedSavePath' => 'Sesja: Skonfigurowana ścieżka zapisu "{0}" nie jest zapisywalna w procesie PHP.', - 'emptySavePath' => 'Sesja: Nie skonfigurowano żadnej ścieżki zapisu.', - 'invalidSavePathFormat' => 'Session: Nieprawidłowy format zapisu zapisu Redis: {0}', -]; diff --git a/app/Language/pl/Time.php b/app/Language/pl/Time.php deleted file mode 100644 index bd23862f..00000000 --- a/app/Language/pl/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Miesiące muszą mieć wartość od 1 do 12. Biorąc pod uwagę: {0}', - 'invalidDay' => 'Dni muszą należeć do przedziału od 1 do 31. Biorąc pod uwagę: {0}', - 'invalidOverDay' => 'Dni muszą wynosić od 1 do {0}. Biorąc pod uwagę: {1}', - 'invalidHours' => 'Godziny muszą wynosić od 0 do 23. Biorąc pod uwagę: {0}', - 'invalidMinutes' => 'Minuty muszą mieścić się w przedziale od 0 do 59. Biorąc pod uwagę: {0}', - 'invalidSeconds' => 'Sekundy muszą zawierać się między 0 a 59. Biorąc pod uwagę: {0}', - 'years' => '{0, plural, =1{# rok} other{# lat}}', - 'months' => '{0, plural, =1{# miesiąc} other{# miesięcy}}', - 'weeks' => '{0, plural, =1{# tydzień} other{# tygodni}}', - 'days' => '{0, plural, =1{# dzień} other{# dni}}', - 'hours' => '{0, plural, =1{# godzina} other{# godzin}}', - 'minutes' => '{0, plural, =1{# minuta} other{# minut}}', - 'seconds' => '{0, plural, =1{# sekunda} other{# sekund}}', - 'ago' => '{0} temu', - 'inFuture' => 'w {0}', - 'yesterday' => 'Wczoraj', - 'tomorrow' => 'Jutro', - 'now' => 'Przed chwilą', -]; diff --git a/app/Language/pl/Validation.php b/app/Language/pl/Validation.php deleted file mode 100644 index 4d895938..00000000 --- a/app/Language/pl/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'Brak zestawów reguł określonych w konfiguracji sprawdzania poprawności.', - 'ruleNotFound' => '{0} nie jest prawidłową regułą.', - 'groupNotFound' => '{0} nie jest grupą reguł sprawdzania poprawności.', - 'groupNotArray' => 'Grupa reguł {0} musi być tablicą.', - 'invalidTemplate' => '{0} nie jest prawidłowym szablonem sprawdzania poprawności.', - - // Rule Messages - 'alpha' => 'Pole {field} może zawierać tylko znaki alfabetyczne.', - 'alpha_dash' => 'Pole {field} może zawierać tylko znaki alfanumeryczne, podkreślenia i myślniki.', - 'alpha_numeric' => 'Pole {field} może zawierać tylko znaki alfanumeryczne.', - 'alpha_numeric_space' => 'Pole {field} może zawierać tylko znaki alfanumeryczne i spacje.', - 'alpha_space' => 'Pole {field} może zawierać tylko znaki alfabetyczne i spacje.', - 'decimal' => 'Pole {field} musi zawierać liczbę dziesiętną.', - 'differs' => 'Pole {field} musi różnić się od pola {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'Pole {field} musi mieć dokładnie {param} długości.', - 'greater_than' => 'Pole {field} musi zawierać liczbę większą niż {param}.', - 'greater_than_equal_to' => 'Pole {field} musi zawierać liczbę większą lub równą {param}.', - 'in_list' => 'Pole {field} musi być jednym z: {param}.', - 'integer' => 'Pole {field} musi zawierać liczbę całkowitą.', - 'is_natural' => 'Pole {field} może zawierać tylko cyfry.', - 'is_natural_no_zero' => 'Pole {field} może zawierać tylko cyfry i musi być większe od zera.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Pole {field} musi zawierać unikalną wartość.', - 'less_than' => 'Pole {field} musi zawierać liczbę mniejszą niż {param}.', - 'less_than_equal_to' => 'Pole {field} musi zawierać liczbę mniejszą lub równą {param}.', - 'matches' => 'Pole {field} nie pasuje do pola {param}.', - 'max_length' => 'Pole {field} nie może przekraczać długości znaków {param}.', - 'min_length' => 'Pole {field} musi mieć przynajmniej {param} długości.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'Pole {field} musi zawierać tylko liczby.', - 'regex_match' => 'Pole {field} ma niepoprawny format.', - 'required' => 'Pole {field} jest wymagane', - 'required_with' => 'Pole {field} jest wymagane, gdy występuje {param}.', - 'required_without' => 'Pole {field} jest wymagane, gdy nie ma parametru {param}.', - 'timezone' => 'Pole {field} musi być prawidłową strefą czasową.', - 'valid_base64' => 'Pole {field} musi być poprawnym łańcuchem base64.', -// 'valid_json' => 'Pole {field} musi być w formacie JSON.', - 'valid_email' => 'Pole {field} musi zawierać poprawny adres e-mail.', - 'valid_emails' => 'Pole {field} musi zawierać wszystkie prawidłowe adresy e-mail.', - 'valid_ip' => 'Pole {field} musi zawierać poprawny adres IP.', - 'valid_url' => 'Pole {field} musi zawierać prawidłowy adres URL.', - 'valid_date' => 'Pole {field} musi zawierać poprawną datę.', - - // Credit Cards - 'valid_cc_num' => '{field} nie wydaje się być prawidłowym numerem karty kredytowej.', - - // Files - 'uploaded' => '{field} nie jest prawidłowym przesłanym plikiem.', - 'max_size' => '{field} jest zbyt dużym plikiem.', - 'is_image' => '{field} nie jest prawidłowym, przesłanym plikiem graficznym.', - 'mime_in' => '{field} nie ma prawidłowego typu MIME.', - 'ext_in' => '{field} nie ma poprawnego rozszerzenia pliku.', - 'max_dims' => '{field} nie jest obrazem lub jest zbyt szeroki lub wysoki.', -]; diff --git a/app/Language/pl/View.php b/app/Language/pl/View.php deleted file mode 100644 index 54d89cab..00000000 --- a/app/Language/pl/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} nie jest prawidłową metodą.', - 'missingCellParameters' => '{class}::{method} nie ma żadnych parametrów.', - 'invalidCellParameter' => '{0} nie jest prawidłową nazwą parametru.', - 'noCellClass' => 'Nie podano klasy komórek widoku.', - 'invalidCellClass' => 'Nie można zlokalizować klasy komórki widoku: {0}.', - 'tagSyntaxError' => 'Masz błąd składniowy w tagach parsera: {0}', -]; diff --git a/app/Language/pt-BR/CLI.php b/app/Language/pt-BR/CLI.php deleted file mode 100644 index de989647..00000000 --- a/app/Language/pt-BR/CLI.php +++ /dev/null @@ -1,56 +0,0 @@ - 'Comando "{0}" não foi encontrado.', - 'altCommandSingular' => 'Você quis dizer isso?', - 'altCommandPlural' => 'Você quis dizer um desses?', - 'helpUsage' => 'Uso:', - 'helpDescription' => 'Descrição:', - 'helpOptions' => 'Opções:', - 'helpArguments' => 'Argumentos:', - 'invalidColor' => 'Cor de {0} inválida: {1}.', - - // Generators - 'generateClassName' => 'Nome da classe', - 'generateParentClass' => 'Nome da classe pai para estender desde', - 'generateFileExists' => '{0} já existe.', - 'generateFileSuccess' => 'Criar arquivo: ', - 'generateFileError' => 'Erro ao criar arquivo: ', - 'namespaceNotDefined' => 'Namespace "{0}" não está definido.', -]; diff --git a/app/Language/pt-BR/Cache.php b/app/Language/pt-BR/Cache.php deleted file mode 100644 index eecf3ec5..00000000 --- a/app/Language/pt-BR/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'O cache está incapaz de escrever em {0}', - 'invalidHandlers' => 'A configuração de cache deve ter uma array de $validHandlers.', - 'noBackup' => 'A configuração de cache deve ter um handler e um backupHandler definido.', - 'handlerNotFound' => 'A configuração de cache possui um handler ou backup handler inválido na definição.', -]; diff --git a/app/Language/pt-BR/Cast.php b/app/Language/pt-BR/Cast.php deleted file mode 100644 index 34b9aaef..00000000 --- a/app/Language/pt-BR/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Profundidade máxima da pilha foi excedida', - 'jsonErrorStateMismatch' => 'Underflow ou a incompatibilidade de modos', - 'jsonErrorCtrlChar' => 'Caractere de controle inesperado encontrado', - 'jsonErrorSyntax' => 'Erro de sintaxe, JSON malformado', - 'jsonErrorUtf8' => 'Caracteres UTF-8 malformados, possivelmente codificados incorretamente', - 'jsonErrorUnknown' => 'Erro desconhecido', -]; diff --git a/app/Language/pt-BR/Core.php b/app/Language/pt-BR/Core.php deleted file mode 100644 index 445a03ad..00000000 --- a/app/Language/pt-BR/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Um erro foi encontrado ao tentar substituir o arquivo. Por favor, certifique-se de que seu diretório de arquivos é gravável.', - 'enabledZlibOutputCompression' => 'Sua diretiva zlib.output_compression ini está on. Isso não irá trabalhar bem com a saída de buffers.', - 'invalidFile' => 'Arquivo inválido: {0}', - 'missingExtension' => 'A extensão {0} não está carregada.', - 'noHandlers' => '{0} deve prover pelo menos um Handler.', -]; diff --git a/app/Language/pt-BR/Database.php b/app/Language/pt-BR/Database.php deleted file mode 100644 index 2fc87a98..00000000 --- a/app/Language/pt-BR/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} não é um callback de Model Event válido.', - 'invalidArgument' => 'Você deve fornecer um {0} válido.', - 'invalidAllowedFields' => 'Os campos permitidos devem ser especificados para o model: {0}', - 'emptyDataset' => 'Não há dados para {0}.', - 'emptyPrimaryKey' => 'Não há nenhuma chave primária definida ao tentar fazer {0}.', - 'failGetFieldData' => 'Falha ao obter dados de campo do banco de dados.', - 'failGetIndexData' => 'Falha ao obter dados de índice do banco de dados.', - 'failGetForeignKeyData' => 'Falha ao obter dados de chave estrangeira do banco de dados.', - 'parseStringFail' => 'Análise da chave string falhou.', - 'featureUnavailable' => 'Este recurso não está disponível para o banco de dados que você está usando.', - 'tableNotFound' => 'Tabela `{0}` não foi encontrada no banco de dados atual.', - 'noPrimaryKey' => 'Classe model `{0}` não especifica uma Primary Key.', - 'noDateFormat' => 'Classe model `{0}` não tem uma data válida.', - 'fieldNotExists' => 'Campo `{0}` não encontrado.', - 'forEmptyInputGiven' => 'Declaração vazia passada para o campo `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Apenas uma coluna é permitida no nome da coluna.', -]; diff --git a/app/Language/pt-BR/Email.php b/app/Language/pt-BR/Email.php deleted file mode 100644 index 1b173e33..00000000 --- a/app/Language/pt-BR/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'O método de validação de email deve receber uma array.', - 'invalidAddress' => 'Endereço de e-mail inválido: {0}', - 'attachmentMissing' => 'Não foi possível localizar o seguinte anexo de e-mail: {0}', - 'attachmentUnreadable' => 'Não foi possível abrir este anexo: {0}', - 'noFrom' => 'Não é possível enviar email sem o cabeçalho "From".', - 'noRecipients' => 'Você deve incluir destinatários: To, Cc, ou Bcc', - 'sendFailurePHPMail' => 'Não foi possível enviar e-mail usando PHP mail(). Seu servidor pode não estar configurado para enviar e-mail usando este método.', - 'sendFailureSendmail' => 'Não foi possível enviar e-mail usando PHP Sendmail. Seu servidor pode não estar configurado para enviar e-mail usando este método.', - 'sendFailureSmtp' => 'Não foi possível enviar e-mail usando PHP SMTP. Seu servidor pode não estar configurado para enviar e-mail usando este método.', - 'sent' => 'Sua mensagem foi enviada com sucesso usando o seguinte protocolo: {0}', - 'noSocket' => 'Não foi possível abrir um soquete para o Sendmail. Por favor, verifique as configurações.', - 'noHostname' => 'Você não especificou um hostname SMTP.', - 'SMTPError' => 'O seguinte erro SMTP foi encontrado: {0}', - 'noSMTPAuth' => 'Erro: você deve atribuir um nome de usuário e senha SMTP.', - 'failedSMTPLogin' => 'Falha ao enviar o comando AUTH LOGIN. Erro: {0}', - 'SMTPAuthUsername' => 'Falha ao autenticar o nome de usuário. Erro: {0}', - 'SMTPAuthPassword' => 'Falha ao autenticar a senha. Erro: {0}', - 'SMTPDataFailure' => 'Não foi possível enviar dados: {0}', - 'exitStatus' => 'Código de status de saída: {0}', -]; diff --git a/app/Language/pt-BR/Encryption.php b/app/Language/pt-BR/Encryption.php deleted file mode 100644 index c8e35731..00000000 --- a/app/Language/pt-BR/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Nenhum driver solicitado; Miss Daisy vai ficar tão chateada!', - 'noHandlerAvailable' => 'Não foi possível encontrar um manipulador de criptografia {0} disponível.', - 'unKnownHandler' => '"{0}" não pode ser configurado.', - 'starterKeyNeeded' => 'O criptografador precisa de uma chave inicial.', - 'authenticationFailed' => 'Descriptografando: autenticação falhou.', - 'encryptionFailed' => 'Criptografia falhou.', -]; diff --git a/app/Language/pt-BR/Entity.php b/app/Language/pt-BR/Entity.php deleted file mode 100644 index d8e03ba1..00000000 --- a/app/Language/pt-BR/Entity.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Tentando acessar uma propriedade não existente {0} de {1}', -]; diff --git a/app/Language/pt-BR/Files.php b/app/Language/pt-BR/Files.php deleted file mode 100644 index 602ac082..00000000 --- a/app/Language/pt-BR/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Arquivo não encontrado: {0}', - 'cannotMove' => 'Não pode mover o arquivo {0} para {1} ({2})', -]; diff --git a/app/Language/pt-BR/Filters.php b/app/Language/pt-BR/Filters.php deleted file mode 100644 index 874014ca..00000000 --- a/app/Language/pt-BR/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - 'O filtro {0} deve ter um alias correspondente definido.', - 'incorrectInterface' => '{0} deve implementar CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/pt-BR/Format.php b/app/Language/pt-BR/Format.php deleted file mode 100644 index 4af1db58..00000000 --- a/app/Language/pt-BR/Format.php +++ /dev/null @@ -1,44 +0,0 @@ - '"{0}" não é uma classe Formatter válida.', - 'invalidJSON' => 'Falha ao analisar a string json, erro: "{0}".', - 'invalidMime' => 'Nenhum Formatter definido para o tipo mime: "{0}".', - 'missingExtension' => 'A extensão SimpleXML é necessária para formatar XML.', -]; diff --git a/app/Language/pt-BR/HTTP.php b/app/Language/pt-BR/HTTP.php deleted file mode 100644 index 23fc720d..00000000 --- a/app/Language/pt-BR/HTTP.php +++ /dev/null @@ -1,102 +0,0 @@ - 'CURL deve estar ativado para usar a classe CURLRequest.', - 'invalidSSLKey' => 'Não é possível definir a Chave SSL. {0} não é um arquivo válido.', - 'sslCertNotFound' => 'Certificado SSL não encontrado em: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} não é um tipo de negociação válido. Deve ser um dos seguintes: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Versão inválida do Protocolo HTTP. Deve ser uma dessas: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Você deve fornecer uma array de valores suportados para todas as Negociações.', - - // RedirectResponse - 'invalidRoute' => 'Rota {0} não foi encontrada ao fazer o roteamento-reverso.', - - // DownloadResponse - 'cannotSetBinary' => 'Ao definir o caminho do arquivo não foi possível definir como binário.', - 'cannotSetFilepath' => 'Ao definir como binário não é possível definir o caminho do arquivo: {0}', - 'notFoundDownloadSource' => 'Fonte do corpo do download não encontrado.', - 'cannotSetCache' => 'Não suporta armazenamento em cache para download.', - 'cannotSetStatusCode' => 'Não suporta o código de status de alteração para download. Código: {0}, Razão: {1}', - - // Response - 'missingResponseStatus' => 'Resposta HTTP está faltando um código de status', - 'invalidStatusCode' => '{0} não é um código de status de retorno HTTP válido', - 'unknownStatusCode' => 'Código de status HTTP desconhecido fornecido sem nenhuma mensagem: {0}', - - // URI - 'cannotParseURI' => 'Não é possível analisar o URI: {0}', - 'segmentOutOfRange' => 'Segmento do URI da Requisição está fora do intervalo: {0}', - 'invalidPort' => 'Portas devem estar entre 0 e 65535. Dado: {0}', - 'malformedQueryString' => 'As strings de consulta não podem incluir fragmentos de URI.', - - // Page Not Found - 'pageNotFound' => 'Página Não Encontrada', - 'emptyController' => 'Nenhum Controller especificado.', - 'controllerNotFound' => 'Controller ou seu método não foi encontrado: {0}::{1}', - 'methodNotFound' => 'Método do Controller não foi encontrado: {0}', - - // CSRF - 'disallowedAction' => 'A ação que você solicitou não é permitida.', - - // Uploaded file moving - 'alreadyMoved' => 'O arquivo enviado já foi movido.', - 'invalidFile' => 'O arquivo original não é um arquivo válido.', - 'moveFailed' => 'Não foi possível mover o arquivo {0} para {1} ({2})', - - 'uploadErrOk' => 'O upload do arquivo foi realizado com sucesso.', - 'uploadErrIniSize' => 'O arquivo "%s" excede a diretiva ini upload_max_filesize.', - 'uploadErrFormSize' => 'O arquivo "%s" excede o limite de upload definido em seu formulário.', - 'uploadErrPartial' => 'O upload do arquivo "%s" foi realizado apenas parcialmente.', - 'uploadErrNoFile' => 'Nenhum upload de arquivo foi realizado.', - 'uploadErrCantWrite' => 'O arquivo "%s" não pode ser escrito no disco.', - 'uploadErrNoTmpDir' => 'Upload de arquivo não pode ser realizado: faltando diretório temporário.', - 'uploadErrExtension' => 'Upload de arquivo foi parado por uma extensão PHP.', - 'uploadErrUnknown' => 'O upload do arquivo "%s" não foi realizado devido a um erro desconhecido.', - - // SameSite setting - 'invalidSameSiteSetting' => 'A configuração SameSite deve ser None, Lax, Strict ou uma string vazia. Dado: {0}', -]; diff --git a/app/Language/pt-BR/Images.php b/app/Language/pt-BR/Images.php deleted file mode 100644 index 0abb9a5c..00000000 --- a/app/Language/pt-BR/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'Você deve especificar uma imagem de origem em suas preferências.', - 'gdRequired' => 'A biblioteca de imagens GD é necessária para usar este recurso.', - 'gdRequiredForProps' => 'Seu servidor deve suportar a biblioteca de imagens GD para determinar as propriedades da imagem.', - 'gifNotSupported' => 'Imagens GIF geralmente não são suportadas devido a restrições de licenciamento. Você pode ter que usar imagens JPG ou PNG em vez disso', - 'jpgNotSupported' => 'Imagens JPG não são suportadas.', - 'pngNotSupported' => 'Imagens PNG não são suportadas.', - 'webpNotSupported' => 'Imagens WEBP não são suportadas.', - 'fileNotSupported' => 'O arquivo fornecido não é de um tipo de imagem suportado.', - 'unsupportedImageCreate' => 'Seu servidor não suporta a função GD necessária para processar este tipo de imagem.', - 'jpgOrPngRequired' => 'O protocolo de redimensionamento de imagem especificado nas suas preferências só funciona com os tipos de imagem JPEG ou PNG.', - 'rotateUnsupported' => 'A rotação de imagem não parece ser suportada pelo seu servidor.', - 'libPathInvalid' => 'O caminho para a sua biblioteca de imagens não está correto. Por favor, defina o caminho correto nas suas preferências de imagem.', - 'imageProcessFailed' => 'O processamento de imagem falhou. Por favor, verifique se o seu servidor suporta o protocolo escolhido e se o caminho para a sua biblioteca de imagens está correto.', - 'rotationAngleRequired' => 'Um ângulo de rotação é necessário para girar a imagem.', - 'invalidPath' => 'O caminho para a imagem não está correto.', - 'copyFailed' => 'A rotina de cópia de imagem falhou.', - 'missingFont' => 'Não é possível encontrar uma fonte a ser usada.', - 'saveFailed' => 'Não é possível salvar a imagem. Por favor, certifique-se de que a imagem e o diretório de arquivos são graváveis.', - 'invalidDirection' => 'A direção da giro pode ser somente `vertical` ou `horizontal`.', - 'exifNotSupported' => 'A leitura de dados EXIF não é suportada por esta instalação do PHP.', -]; diff --git a/app/Language/pt-BR/Language.php b/app/Language/pt-BR/Language.php deleted file mode 100644 index 62f17a00..00000000 --- a/app/Language/pt-BR/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'A linha obtida deve ser uma string ou um array de strings.', -]; diff --git a/app/Language/pt-BR/Log.php b/app/Language/pt-BR/Log.php deleted file mode 100644 index 913d140a..00000000 --- a/app/Language/pt-BR/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} é um level de log inválido.', -]; diff --git a/app/Language/pt-BR/Migrations.php b/app/Language/pt-BR/Migrations.php deleted file mode 100644 index a4788215..00000000 --- a/app/Language/pt-BR/Migrations.php +++ /dev/null @@ -1,85 +0,0 @@ - 'Tabela de migrações deve ser definida.', - 'disabled' => 'As migrações foram carregadas, mas estão desativadas ou estão configuradas incorretamente.', - 'notFound' => 'Arquivo de migração não encontrado: ', - 'batchNotFound' => 'Alvo batch não encontrado: ', - 'empty' => 'Nenhum arquivo de migração encontrado', - 'gap' => 'Há uma diferença na sequência de migração perto do número de versão: ', - 'classNotFound' => 'A classe de migração "%s" não foi encontrada.', - 'missingMethod' => 'A classe de migração está sem um método "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigra o banco de dados para a última migração disponível.", - 'migHelpCurrent' => "\t\tMigra o banco de dados para a versão configurada como 'current' na configuração.", - 'migHelpVersion' => "\tMigra o banco de dados para versão {v}.", - 'migHelpRollback' => "\tExecuta todas as migrações 'down' até a versão 0.", - 'migHelpRefresh' => "\t\tDesinstala e executa novamente todas as migrações para renovar o banco de dados..", - 'migHelpSeed' => "\tRoda o seeder nomeado [name].", - 'migCreate' => "\tCria uma nova migração nomeada [name]", - 'nameMigration' => 'Nomeie o arquivo de migração', - 'badCreateName' => 'Você deve fornecer um nome de arquivo de migração.', - 'writeError' => 'Erro ao tentar criar arquivo.', - 'migNumberError' => 'O número da migração deve ter três dígitos e não deve haver lacunas na sequência.', - 'rollBackConfirm' => 'Você tem certeza que deseja reverter?', - 'refreshConfirm' => 'Você tem certeza que deseja atualizar?', - - 'latest' => 'Executando todas as novas migrações...', - 'generalFault' => 'Migração falhou!', - 'migInvalidVersion' => 'Número da versão fornecida é inválido.', - 'toVersionPH' => 'Migrando para a versão %s...', - 'toVersion' => 'Migrando para a versão atual...', - 'rollingBack' => 'Revertendo todas as migrações...', - 'noneFound' => 'Nenhuma migração foi encontrada.', - 'migSeeder' => 'Nome do seeder', - 'migMissingSeeder' => 'Você deve fornecer o nome de um seeder.', - 'nameSeeder' => 'Name the seeder file', - 'removed' => 'Revertendo: ', - 'added' => 'Rodando: ', - - // Migrate Status - 'namespace' => 'Namespace', - 'filename' => 'Nome do arquivo', - 'version' => 'Versão', - 'group' => 'Grupo', - 'on' => 'Migrado em: ', - 'batch' => 'Lote', -]; diff --git a/app/Language/pt-BR/Number.php b/app/Language/pt-BR/Number.php deleted file mode 100644 index 671613c6..00000000 --- a/app/Language/pt-BR/Number.php +++ /dev/null @@ -1,52 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' mil', - 'million' => ' milhão', - 'billion' => ' bilhão', - 'trillion' => ' trilhão', - 'quadrillion' => ' quatrilhão', -]; diff --git a/app/Language/pt-BR/Pager.php b/app/Language/pt-BR/Pager.php deleted file mode 100644 index 24f90b87..00000000 --- a/app/Language/pt-BR/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Navegação de páginas', - 'first' => 'Primeira', - 'previous' => 'Anterior', - 'next' => 'Próxima', - 'last' => 'Última', - 'older' => 'Mais antiga', - 'newer' => 'Mais recente', - 'invalidTemplate' => '{0} não é um Pager template válido.', - 'invalidPaginationGroup' => '{0} não é um grupo de Paginação válido.', -]; diff --git a/app/Language/pt-BR/RESTful.php b/app/Language/pt-BR/RESTful.php deleted file mode 100644 index acc05798..00000000 --- a/app/Language/pt-BR/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" ação não implementada.', -]; diff --git a/app/Language/pt-BR/Redirect.php b/app/Language/pt-BR/Redirect.php deleted file mode 100644 index 911bd22a..00000000 --- a/app/Language/pt-BR/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Não foi possível redirecionar para "{0}". Código de status do erro "{1}"', -]; diff --git a/app/Language/pt-BR/Router.php b/app/Language/pt-BR/Router.php deleted file mode 100644 index 24f75da0..00000000 --- a/app/Language/pt-BR/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Um parâmetro não corresponde ao tipo esperado.', - 'missingDefaultRoute' => 'Não é possível determinar o que deve ser exibido. Uma rota padrão não foi especificada no arquivo de roteamento.', -]; diff --git a/app/Language/pt-BR/Session.php b/app/Language/pt-BR/Session.php deleted file mode 100644 index a6244c09..00000000 --- a/app/Language/pt-BR/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` deve ter o nome da tabela para o Database Session Handler funcionar.', - 'invalidSavePath' => 'Sessão: O save path "{0}" configurado não é um diretório, não existe ou não pode ser criado.', - 'writeProtectedSavePath' => 'Sessão: O save path "{0}" configurado não é gravável pelo processo do PHP.', - 'emptySavePath' => 'Sessão: Nenhum save path configurado.', - 'invalidSavePathFormat' => 'Sessão: Formato do Redis save path é inválido: {0}', - 'invalidSameSiteSetting' => 'Sessão: A configuração SameSite deve ser None, Lax, Strict, ou uma string vazia. Dado: {0}', -]; diff --git a/app/Language/pt-BR/Time.php b/app/Language/pt-BR/Time.php deleted file mode 100644 index 01b68fce..00000000 --- a/app/Language/pt-BR/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Meses devem ser entre 1 e 12. Dado: {0}', - 'invalidDay' => 'Dias devem ser entre 1 e 31. Dado: {0}', - 'invalidOverDay' => 'Dias devem ser entre 1 e {0}. Dado: {1}', - 'invalidHours' => 'Horas devem ser entre 0 e 23. Dado: {0}', - 'invalidMinutes' => 'Minutos devem ser entre 0 e 59. Dado: {0}', - 'invalidSeconds' => 'Segundos devem ser entre 0 e 59. Dado: {0}', - 'years' => '{0, plural, =1{# ano} other{# anos}}', - 'months' => '{0, plural, =1{# mês} other{# meses}}', - 'weeks' => '{0, plural, =1{# semana} other{# semanas}}', - 'days' => '{0, plural, =1{# dia} other{# dias}}', - 'hours' => '{0, plural, =1{# hora} other{# horas}}', - 'minutes' => '{0, plural, =1{# minuto} other{# minutos}}', - 'seconds' => '{0, plural, =1{# segundo} other{# segundos}}', - 'ago' => '{0} atrás', - 'inFuture' => 'em {0}', - 'yesterday' => 'Ontem', - 'tomorrow' => 'Amanhã', - 'now' => 'Agora mesmo', -]; diff --git a/app/Language/pt-BR/Validation.php b/app/Language/pt-BR/Validation.php deleted file mode 100644 index edb7e021..00000000 --- a/app/Language/pt-BR/Validation.php +++ /dev/null @@ -1,99 +0,0 @@ - 'Nenhum conjunto de regras especificado na configuração de Validação.', - 'ruleNotFound' => '{0} não é uma regra válida.', - 'groupNotFound' => '{0} não é um grupo de regras de validação.', - 'groupNotArray' => 'O grupo de regras {0} deve ser um array.', - 'invalidTemplate' => '{0} não é um template de Validation válido.', - - // Rule Messages - 'alpha' => 'O campo {field} pode conter apenas caracteres alfabéticos.', - 'alpha_dash' => 'O campo {field} pode conter apenas caracteres alfa-numéricos, sublinhados, e traços.', - 'alpha_numeric' => 'O campo {field} pode conter apenas caracteres alfa-numéricos.', - 'alpha_numeric_punct' => 'O campo {field} pode conter apenas caracteres alfa-numéricos, espaços, e ~ ! # $ % & * - _ + = | : . caracteres.', - 'alpha_numeric_space' => 'O campo {field} pode conter apenas caracteres alfa-numéricos e espaços.', - 'alpha_space' => 'O campo {field} pode conter apenas caracteres alfabéticos e espaços.', - 'decimal' => 'O campo {field} deve conter um número decimal.', - 'differs' => 'O campo {field} deve ser diferente do campo {param}.', - 'equals' => 'O campo {field} deve ser exatamente: {param}.', - 'exact_length' => 'O campo {field} deve conter exatamente {param} caracteres no tamanho.', - 'greater_than' => 'O campo {field} deve conter um número maior que {param}.', - 'greater_than_equal_to' => 'O campo {field} deve conter um número maior ou igual a {param}.', - 'hex' => 'O campo {field} pode conter apenas caracteres hexadecimais.', - 'in_list' => 'O campo {field} deve ser um desses: {param}.', - 'integer' => 'O campo {field} deve conter um número inteiro.', - 'is_natural' => 'O campo {field} deve conter apenas dígitos.', - 'is_natural_no_zero' => 'O campo {field} deve conter apenas dígitos e deve ser maior que zero.', - 'is_not_unique' => 'O campo {field} deve conter um valor já existente no banco de dados.', - 'is_unique' => 'O campo {field} deve conter um valor único.', - 'less_than' => 'O campo {field} deve conter um número menor que {param}.', - 'less_than_equal_to' => 'O campo {field} deve conter um número menor ou igual a {param}.', - 'matches' => 'O campo {field} não é igual ao campo {param}.', - 'max_length' => 'O campo {field} não pode exceder {param} caracteres no tamanho.', - 'min_length' => 'O campo {field} deve conter pelo menos {param} caracteres no tamanho.', - 'not_equals' => 'O campo {field} não pode ser: {param}.', - 'not_in_list' => 'O campo {field} não deve ser um desses: {param}.', - 'numeric' => 'O campo {field} deve conter apenas números.', - 'regex_match' => 'O campo {field} não está no formato correto.', - 'required' => 'O campo {field} é requerido.', - 'required_with' => 'O campo {field} é requerido quando {param} está presente.', - 'required_without' => 'O campo {field} é requerido quando {param} não está presente.', - 'string' => 'O campo {field} deve ser uma string válida.', - 'timezone' => 'O campo {field} deve ser uma timezone válida.', - 'valid_base64' => 'O campo {field} deve ser uma string base64 válida.', - 'valid_email' => 'O campo {field} deve conter um endereço de e-mail válido.', - 'valid_emails' => 'O campo {field} deve conter todos os endereços de e-mails válidos.', - 'valid_ip' => 'O campo {field} deve conter um IP válido.', - 'valid_url' => 'O campo {field} deve conter uma URL válida.', - 'valid_date' => 'O campo {field} deve conter uma data válida.', - - // Credit Cards - 'valid_cc_num' => '{field} não parece ser um número de cartão de crédito válido.', - - // Files - 'uploaded' => '{field} não é um arquivo de upload válido.', - 'max_size' => '{field} é um arquivo muito grande.', - 'is_image' => '{field} não é um arquivo de imagem válida do upload.', - 'mime_in' => '{field} não tem um tipo mime válido.', - 'ext_in' => '{field} não tem uma extensão de arquivo válida.', - 'max_dims' => '{field} não é uma imagem, ou ela é muito larga ou muito grande.', -]; diff --git a/app/Language/pt-BR/View.php b/app/Language/pt-BR/View.php deleted file mode 100644 index 15c9ccb5..00000000 --- a/app/Language/pt-BR/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} não é um método válido.', - 'missingCellParameters' => '{class}::{method} não possui parâmetros.', - 'invalidCellParameter' => '{0} não é um nome de parâmetro válido.', - 'noCellClass' => 'Nenhuma classe de view cell fornecida.', - 'invalidCellClass' => 'Não é possível localizar a classe view cell: {0}.', - 'tagSyntaxError' => 'Você tem um erro de sintaxe nas tags do Parser: {0}', -]; diff --git a/app/Language/pt/CLI.php b/app/Language/pt/CLI.php deleted file mode 100644 index 2670f4aa..00000000 --- a/app/Language/pt/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Comando "{0}" não encontrado.', - 'helpUsage' => 'Uso:', - 'helpDescription' => 'Descrição:', - 'helpOptions' => 'Opções:', - 'helpArguments' => 'Argumentos:', - 'invalidColor' => 'Cor inválida {0}: {1}.', -]; diff --git a/app/Language/pt/Cache.php b/app/Language/pt/Cache.php deleted file mode 100644 index 55086d35..00000000 --- a/app/Language/pt/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Não foi possível escrever os ficheiros de cache em {0}', - 'invalidHandlers' => 'A configuração de Cache deve ter um array de $validHandlers.', - 'noBackup' => 'A configuração de Cache deve ter definidos handler e backupHandler.', - 'handlerNotFound' => 'A configuração de Cache tem um handler inválido ou backup handler definido.', -]; diff --git a/app/Language/pt/Cast.php b/app/Language/pt/Cast.php deleted file mode 100644 index 6ce8feef..00000000 --- a/app/Language/pt/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Profundidade máxima da pilha excedida', - 'jsonErrorStateMismatch' => 'Underflow ou a incompatibilidade de modos', - 'jsonErrorCtrlChar' => 'Caractere de controlo inesperado encontrado', - 'jsonErrorSyntax' => 'Erro de sintaxe, JSON formatado incorretamente', - 'jsonErrorUtf8' => 'Caracteres UTF-8 formatados incorretamente, possivelmente codificação errada', - 'jsonErrorUnknown' => 'Erro desconhecido' -]; diff --git a/app/Language/pt/Core.php b/app/Language/pt/Core.php deleted file mode 100644 index 7a9d1380..00000000 --- a/app/Language/pt/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Arquivo inválido: {0}', - 'copyError' => 'Um erro foi encontrado ao tentar substituir o arquivo. Por favor, certifique-se de que seu diretório tem permissões de escrita.', - 'missingExtension' => 'A extensão {0} não está carregada.', - 'noHandlers' => '{0} deve fornecer pelo menos um handler.', -]; diff --git a/app/Language/pt/Database.php b/app/Language/pt/Database.php deleted file mode 100644 index 15dc29c9..00000000 --- a/app/Language/pt/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} não é um Model Event callback.', - 'invalidArgument' => 'Você deve fornecer um {0} válido.', - 'invalidAllowedFields' => 'Os campos permitidos devem ser especificados para o model: {0}', - 'emptyDataset' => 'Não há dados para {0}.', - 'failGetFieldData' => 'Não foi possível receber informação da base de dados.', - 'failGetIndexData' => 'Não foi possível receber o index da base de dados.', - 'failGetForeignKeyData' => 'Não foi possível receber a Chave Forasteira da base de dados.', - 'parseStringFail' => 'Análise da chave string falhou.', - 'featureUnavailable' => 'Esta funcionalidade não se encontra disponível na base de dados selecionada.', - 'tableNotFound' => 'A tabela `{0}` não foi encontrada na base de dados selecionada.', - 'noPrimaryKey' => 'Classe model `{0}` não especifica uma Chave Primária.', - 'noDateFormat' => 'Classe model `{0}` não tem uma data válida.', - 'fieldNotExists' => 'Campo `{0}` não encontrado.', - 'forEmptyInputGiven' => 'Declaração vazia passada para o campo `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Apenas uma coluna é permitida no nome da coluna.', -]; diff --git a/app/Language/pt/Email.php b/app/Language/pt/Email.php deleted file mode 100644 index 4ed73f76..00000000 --- a/app/Language/pt/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'O método de validação de email deve ser passado em array.', - 'invalidAddress' => 'Endereço de E-mail inválido: {0}', - 'attachmentMissing' => 'Não é possível encontrar o seguinte anexo de email: {0}', - 'attachmentUnreadable' => 'Não é possível abrir este anexo: {0}', - 'noFrom' => 'Não é possível enviar email sem o cabeçalho "De".', - 'noRecipients' => 'Deve incluir destinatários: Para, Cc ou Cco', - 'sendFailurePHPMail' => 'Não é possível enviar e-mail usando o PHP mail(). O servidor pode não estar configurado para enviar e-mails usando esse método.', - 'sendFailureSendmail' => 'Não é possível enviar e-mail usando o PHP Sendmail. O servidor pode não estar configurado para enviar e-mails usando esse método.', - 'sendFailureSmtp' => 'Não é possível enviar e-mail usando o PHP SMTP. O servidor pode não estar configurado para enviar e-mails usando esse método.', - 'sent' => 'A sua mensagem foi enviada com sucesso usando o seguinte protocolo: {0}', - 'noSocket' => 'Não foi possível abrir um socket para o Sendmail. Por favor, verifique as configurações.', - 'noHostname' => 'Não especificou um nome de host SMTP.', - 'SMTPError' => 'O seguinte erro SMTP foi encontrado: {0}', - 'noSMTPAuth' => 'Erro: deve atribuir um nome de utilizador e senha SMTP.', - 'failedSMTPLogin' => 'Falha ao enviar o comando AUTH LOGIN. Erro: {0}', - 'SMTPAuthUsername' => 'Falha ao autenticar o nome de usuário. Erro: {0}', - 'SMTPAuthPassword' => 'Falha ao autenticar a senha. Erro: {0}', - 'SMTPDataFailure' => 'Não é possível enviar dados: {0}', - 'exitStatus' => 'Saída do código de status: {0}', -]; diff --git a/app/Language/pt/Encryption.php b/app/Language/pt/Encryption.php deleted file mode 100644 index a8bbcdf0..00000000 --- a/app/Language/pt/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Nenhum driver solicitado; Miss Daisy vai ficar tão chateada!', - 'noHandlerAvailable' => 'Não foi possível encontrar um manipulador de criptografia {0} disponível.', - 'unKnownHandler' => '"{0}" não pode ser configurado.', - 'starterKeyNeeded' => 'A biblioteca de encriptação precisa de uma chave inicial.', - 'authenticationFailed' => 'Descriptografando: autenticação falhou.', - 'encryptionFailed' => 'Encriptação falhou.', -]; diff --git a/app/Language/pt/Entity.php b/app/Language/pt/Entity.php deleted file mode 100644 index e99e560e..00000000 --- a/app/Language/pt/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Tentou aceder à propriedade {0} enexistente de {1}', -]; diff --git a/app/Language/pt/Files.php b/app/Language/pt/Files.php deleted file mode 100644 index 114c576d..00000000 --- a/app/Language/pt/Files.php +++ /dev/null @@ -1,41 +0,0 @@ - 'Arquivo não encontrado: {0}', - 'cannotMove' => 'Não foi possível mover o arquivo {0} para {1} ({2})', -]; diff --git a/app/Language/pt/Filters.php b/app/Language/pt/Filters.php deleted file mode 100644 index ee09269b..00000000 --- a/app/Language/pt/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - 'O filtro \'{0}\' deve ter um alias (alcunha) correspondente definido.', - 'incorrectInterface' => '{0} deve ser implementado CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/pt/Format.php b/app/Language/pt/Format.php deleted file mode 100644 index 5944deb5..00000000 --- a/app/Language/pt/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Falha ao analisar o texto json, erro: "{0}".', - 'missingExtension' => 'A extensão SimpleXML é necessária para formatar XML.', -]; diff --git a/app/Language/pt/HTTP.php b/app/Language/pt/HTTP.php deleted file mode 100644 index 27430b04..00000000 --- a/app/Language/pt/HTTP.php +++ /dev/null @@ -1,99 +0,0 @@ - 'CURL deve estar ativado para usar a classe CURLRequest.', - 'invalidSSLKey' => 'Não é possível definir a chave SSL. {0} não é um arquivo válido.', - 'sslCertNotFound' => 'Certificado SSL não encontrado em: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} não é um tipo de negociação válido. Deve ser um dos seguintes: mídia, charset, codificação, idioma.', - - // Message - 'invalidHTTPProtocol' => 'Versão inválida do protocolo HTTP. Deve ser um dos seguintes: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Você deve fornecer um array de valores suportados para todas as negociações.', - - // RedirectResponse - 'invalidRoute' => '{0} não é uma rota válida.', - - // DownloadResponse - 'cannotSetBinary' => 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'Resposta HTTP está sem um código de status', - 'invalidStatusCode' => '{0} não é um código de status de retorno HTTP válido', - 'unknownStatusCode' => 'Código de status HTTP desconhecido fornecido sem mensagem: {0}', - - // URI - 'cannotParseURI' => 'Não é possível analisar o URI: {0}', - 'segmentOutOfRange' => 'O segmento de URI de solicitação está fora do intervalo: {0}', - 'invalidPort' => 'Portas devem estar entre 0 e 65535. Fornecido: {0}', - 'malformedQueryString' => 'As strings de consulta podem não incluir fragmentos de URI.', - - // Page Not Found - 'pageNotFound' => 'Página não encontrada', - 'emptyController' => 'Nenhum Controller especificado.', - 'controllerNotFound' => 'Controller ou seu método não encontrado: {0}::{1}', - 'methodNotFound' => 'Método do Controller não encontrado: {0}', - - // CSRF - 'disallowedAction' => 'A ação que você solicitou não é permitida.', - - // Uploaded file moving - 'alreadyMoved' => 'O arquivo enviado já foi movido.', - 'invalidFile' => 'O arquivo original não é um arquivo válido.', - 'moveFailed' => 'Não foi possível mover o arquivo {0} para {1} ({2})', - - 'uploadErrOk' => 'The file uploaded with success.', - 'uploadErrIniSize' => 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => 'No file was uploaded.', - 'uploadErrCantWrite' => 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => 'The file "%s" was not uploaded due to an unknown error.', -]; diff --git a/app/Language/pt/Images.php b/app/Language/pt/Images.php deleted file mode 100644 index b8cd05e6..00000000 --- a/app/Language/pt/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Deve especificar uma imagem de origem em suas preferências.', - 'gdRequired' => 'A biblioteca de imagens GD é necessária para usar esse recurso.', - 'gdRequiredForProps' => 'O servidor deve suportar a biblioteca de imagens GD para determinar as propriedades da imagem.', - 'gifNotSupported' => 'Imagens GIF geralmente não são suportadas devido a restrições de licenciamento. Pode usar imagens JPG ou PNG.', - 'jpgNotSupported' => 'Imagens JPG não são suportadas.', - 'pngNotSupported' => 'Imagens PNG não são suportadas.', - 'unsupportedImageCreate' => 'O servidor não suporta a função GD necessária para processar este tipo de imagem.', - 'jpgOrPngRequired' => 'O protocolo de redimensionamento de imagem especificado nas suas preferências só funciona com os tipos de imagem JPEG ou PNG.', - 'rotateUnsupported' => 'A rotação de imagem não parece ser suportada pelo seu servidor.', - 'libPathInvalid' => 'O caminho para a sua biblioteca de imagens não está correto. Por favor, defina o caminho correto nas suas preferências de imagem. {0, string)', - 'imageProcessFailed' => 'O processamento de imagem falhou. Por favor, verifique se o seu servidor suporta o protocolo escolhido e se o caminho para a sua biblioteca de imagens está correto.', - 'rotationAngleRequired' => 'Um ângulo de rotação é necessário para girar a imagem.', - 'invalidPath' => 'O caminho para a imagem não está correto.', - 'copyFailed' => 'A rotina de cópia de imagem falhou.', - 'missingFont' => 'Não é possível encontrar uma fonte para usar.', - 'saveFailed' => 'Não é possível salvar a imagem. Por favor, certifique-se de que a imagem e o diretório de arquivos são graváveis.', - 'invalidDirection' => 'A direção de inversão pode ser apenas `vertical` ou `horizontal`. Fornecido: {0}', - 'exifNotSupported' => 'A leitura de dados EXIF não é suportada por esta instalação do PHP.', -]; diff --git a/app/Language/pt/Language.php b/app/Language/pt/Language.php deleted file mode 100644 index 0146579e..00000000 --- a/app/Language/pt/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'A linha obtida deve ser uma string ou um array de strings.' -]; diff --git a/app/Language/pt/Log.php b/app/Language/pt/Log.php deleted file mode 100644 index ff66b0e4..00000000 --- a/app/Language/pt/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} é um nível de log inválido.', -]; diff --git a/app/Language/pt/Migrations.php b/app/Language/pt/Migrations.php deleted file mode 100644 index 3f716d6d..00000000 --- a/app/Language/pt/Migrations.php +++ /dev/null @@ -1,78 +0,0 @@ - 'A tabela de migrações deve ser definida.', - 'disabled' => 'As migrações foram carregadas, mas estão inativas ou estão configuradas incorretamente.', - 'notFound' => 'Arquivo de migração não encontrado: ', - 'batchNotFound' => 'Não foi possível encontrar o ramo selecionado: ', - 'empty' => 'Nenhum arquivo de migração encontrado', - 'gap' => 'Há uma lacuna na sequência de migração perto do número da versão: ', - 'classNotFound' => 'A classe de migração "%s" não foi encontrada.', - 'missingMethod' => 'A classe de migração está faltando um método "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigra a base de dados para a última migração disponível.", - 'migHelpCurrent' => "\t\tMigra a base de dados para a versão configurada como 'atual' na configuração.", - 'migHelpVersion' => "\tMigra a base de dados para a versão {v}.", - 'migHelpRollback' => "\tExecuta todas as migrações 'para baixo' na versão 0.", - 'migHelpRefresh' => "\t\tDesinstala e executa novamente todas as migrações para atualizar a base de dados.", - 'migHelpSeed' => "\tExecuta o semeador chamado [name].", - 'migCreate' => "\tCria uma nova migração chamada [name]", - 'nameMigration' => 'Nomeie o arquivo de migração', - 'badCreateName' => 'Deve fornecer um nome de arquivo de migração.', - 'writeError' => 'Erro ao tentar criar o arquivo.', - 'migNumberError' => 'O número da migração deve ter três dígitos e não deve haver lacunas na sequência.', - - 'latest' => 'Executando todas as novas migrações...', - 'generalFault' => 'A migração falhou!', - 'migInvalidVersion' => 'Número de versão fornecido é inválido.', - 'toVersionPH' => 'A migrar para a versão %s...', - 'toVersion' => 'A migrar para a versão atual...', - 'rollingBack' => 'Revertendo todas as migrações...', - 'noneFound' => 'Nenhuma migração foi encontrada.', - 'on' => 'A migrar para: ', - 'migSeeder' => 'Nome do semeador', - 'migMissingSeeder' => 'Deve fornecer um nome de semeador.', - 'removed' => 'Revertendo: ', - 'added' => 'Rodando: ', - - 'version' => 'Versão', - 'filename' => 'Nome do arquivo', -]; diff --git a/app/Language/pt/Number.php b/app/Language/pt/Number.php deleted file mode 100644 index 12c6799a..00000000 --- a/app/Language/pt/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' mil', - 'million' => ' milhão(ões)', - 'billion' => ' bilião(ões)', - 'trillion' => ' trilião(ões)', - 'quadrillion' => ' quadrilião(ões)', -]; diff --git a/app/Language/pt/Pager.php b/app/Language/pt/Pager.php deleted file mode 100644 index 2f7789bb..00000000 --- a/app/Language/pt/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Navegação de página', - 'first' => 'Primeiro', - 'previous' => 'Anterior', - 'next' => 'Próxima', - 'last' => 'Última', - 'older' => 'Antiga', - 'newer' => 'Nova', - 'invalidTemplate' => '{0} não é um modelo de paginação válido.', - 'invalidPaginationGroup' => '{0} não é um grupo de paginação válido.', -]; diff --git a/app/Language/pt/RESTful.php b/app/Language/pt/RESTful.php deleted file mode 100644 index 7944d4c1..00000000 --- a/app/Language/pt/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" acção não implementada.', -]; diff --git a/app/Language/pt/Redirect.php b/app/Language/pt/Redirect.php deleted file mode 100644 index 53b20eee..00000000 --- a/app/Language/pt/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Não foi possível redirecionar para "{0}". Código de status do erro "{1}"', -]; diff --git a/app/Language/pt/Router.php b/app/Language/pt/Router.php deleted file mode 100644 index ff5d4574..00000000 --- a/app/Language/pt/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Um parâmetro não corresponde ao tipo esperado.', - 'missingDefaultRoute' => 'Não é possível determinar o que deve ser exibido. Uma rota padrão não foi especificada no arquivo de redirecionamento.', -]; diff --git a/app/Language/pt/Session.php b/app/Language/pt/Session.php deleted file mode 100644 index 13224ba6..00000000 --- a/app/Language/pt/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - '`sessionSavePath` deve ter o nome da tabela para o manipulador de sessão de base de dados funcionar.', - 'invalidSavePath' => 'Sessão: O caminho configurado "{0}" não é um diretório, não existe ou não pode ser criado.', - 'writeProtectedSavePath' => 'Sessão: O caminho configurado "{0}" não tem permissões de escrita pelo processo do PHP.', - 'emptySavePath' => 'Sessão: Nenhum caminho configurado.', - 'invalidSavePathFormat' => 'Sessão: Formato de caminho Redis inválido: {0}', -]; diff --git a/app/Language/pt/Time.php b/app/Language/pt/Time.php deleted file mode 100644 index 803d983a..00000000 --- a/app/Language/pt/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Os meses devem estar entre 1 e 12. Fornecido: {0}', - 'invalidDay' => 'Os dias devem estar entre 1 e 31. Fornecido: {0}', - 'invalidOverDay' => 'Os dias devem estar entre 1 e {0}. Fornecido: {1}', - 'invalidHours' => 'As horas devem estar entre 0 e 23. Fornecido: {0}', - 'invalidMinutes' => 'Os minutos devem estar entre 0 e 59. Fornecido: {0}', - 'invalidSeconds' => 'Os segundos devem estar entre 0 e 59. Fornecido: {0}', - 'years' => '{0, plural, =1{# ano} other{# anos}}', - 'months' => '{0, plural, =1{# mês} other{# meses}}', - 'weeks' => '{0, plural, =1{# semana} other{# semanas}}', - 'days' => '{0, plural, =1{# dia} other{# dias}}', - 'hours' => '{0, plural, =1{# hora} other{# horas}}', - 'minutes' => '{0, plural, =1{# minuto} other{# minutos}}', - 'seconds' => '{0, plural, =1{# segundo} other{# segundos}}', - 'ago' => '{0} atás', - 'inFuture' => 'em {0}', - 'yesterday' => 'Ontem', - 'tomorrow' => 'Amanhã', - 'now' => 'Agora', -]; diff --git a/app/Language/pt/Validation.php b/app/Language/pt/Validation.php deleted file mode 100644 index 7546afe2..00000000 --- a/app/Language/pt/Validation.php +++ /dev/null @@ -1,96 +0,0 @@ - 'Nenhum conjunto de regras especificado na configuração de validação.', - 'ruleNotFound' => '{0} não é uma regra válida.', - 'groupNotFound' => '{0} não é um grupo de regras de validação.', - 'groupNotArray' => '{0} grupo de regras deve ser uma array.', - 'invalidTemplate' => '{0} não é um template de Validação válido.', - - // Rule Messages - 'alpha' => 'O campo {field} pode conter apenas caracteres alfabéticos.', - 'alpha_dash' => 'O campo {field} pode conter apenas caracteres alfanuméricos, sublinhados e traços.', - 'alpha_numeric' => 'O campo {field} pode conter apenas caracteres alfanuméricos.', - 'alpha_numeric_space' => 'O campo {field} pode conter apenas caracteres alfanuméricos e espaços.', - 'alpha_space' => 'O campo {field} pode conter apenas caracteres alfabéticos e espaços.', - 'decimal' => 'O campo {field} deve conter um número decimal.', - 'differs' => 'O campo {field} deve ser diferente do campo {param}.', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => 'O campo {field} deve ter exatamente {param} caracteres.', - 'greater_than' => 'O campo {field} deve conter um número maior que {param}.', - 'greater_than_equal_to' => 'O campo {field} deve conter um número maior ou igual a{param}.', - 'hex' => 'O campo {field} pode conter apenas caracteres hexadecimais.', - 'in_list' => 'O campo {field} deve ser um dos seguintes: {param}.', - 'integer' => 'O campo {field} deve ser um inteiro', - 'is_natural' => 'O campo {field} deve conter apenas dígitos.', - 'is_natural_no_zero' => 'O campo {field} deve conter apenas dígitos e deve ser maior que zero.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'O campo {field} deve conter um valor único.', - 'less_than' => 'O campo {field} deve conter um número menor que {param}.', - 'less_than_equal_to' => 'O campo {field} deve conter um número menor ou igual a {param}.', - 'matches' => 'O campo {field} não corresponde ao campo {param}.', - 'max_length' => 'O campo {field} não pode exceder {param} caracteres.', - 'min_length' => 'O campo {field} deve ter pelo menos {param} caracteres.', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => 'O campo {field} deve conter apenas números.', - 'regex_match' => 'O campo {field} não está no formato correto.', - 'required' => 'O campo {field} é obrigatório.', - 'required_with' => 'O campo {field} é obrigatório quando {param} está presente.', - 'required_without' => 'O campo {field} é obrigatório quando {param} não está presente.', - 'timezone' => 'O campo {field} deve ser um fuso horário válido.', - 'valid_base64' => 'O campo {field} deve conter um valor base64 válido.', - 'valid_email' => 'O campo {field} deve conter um email válido.', - 'valid_emails' => 'O campo {field} deve conter apenas emails válidos.', - 'valid_ip' => 'O campo {field} deve conter um IP válido.', - 'valid_url' => 'O campo {field} deve conter uma URL válida.', - 'valid_date' => 'O campo {field} deve conter uma data válida.', - - // Credit Cards - 'valid_cc_num' => '{field} não parece ser um número de cartão de crédito válido.', - - // Files - 'uploaded' => '{field} não é um arquivo válido.', - 'max_size' => '{field} é um arquivo muito grande.', - 'is_image' => '{field} não é um arquivo de imagem.', - 'mime_in' => '{field} não tem um tipo mime válido.', - 'ext_in' => '{field} não tem uma extensão de arquivo válida.', - 'max_dims' => '{field} não é uma imagem ou é muito larga ou alta.', -]; diff --git a/app/Language/pt/View.php b/app/Language/pt/View.php deleted file mode 100644 index f3b07683..00000000 --- a/app/Language/pt/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} não é um método válido.', - 'missingCellParameters' => '{class}::{method} não tem parâmetros.', - 'invalidCellParameter' => '{0} não é um nome de parâmetro válido.', - 'noCellClass' => 'Nenhuma classe view cell fornecida.', - 'invalidCellClass' => 'Não é possível localizar a classe view cell: {0}.', - 'tagSyntaxError' => 'Há um erro de sintaxe nas tags de Parser: {0}', -]; diff --git a/app/Language/ru/CLI.php b/app/Language/ru/CLI.php deleted file mode 100644 index 6e2de7d8..00000000 --- a/app/Language/ru/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Команда "{0}" не найдена.', - 'helpUsage' => 'Использование:', - 'helpDescription' => 'Описание:', - 'helpOptions' => 'Опции:', - 'helpArguments' => 'Аргументы:', - 'invalidColor' => 'Недопустимый {0} цвет: {1}.', -]; diff --git a/app/Language/ru/Cache.php b/app/Language/ru/Cache.php deleted file mode 100644 index 38b5a13d..00000000 --- a/app/Language/ru/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Не удается записать кэш в {0}', - 'invalidHandlers' => 'Переменная $validHandlers в конфигурации кэша должна содержать массив.', - 'noBackup' => 'В конфигурации кэширования не указан обработчик $backupHandler.', - 'handlerNotFound' => 'В конфигурации кэширования указан недопустимый обработчик.', -]; diff --git a/app/Language/ru/Cast.php b/app/Language/ru/Cast.php deleted file mode 100644 index ccab40ad..00000000 --- a/app/Language/ru/Cast.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Превышена максимальная глубина стека.', - 'jsonErrorStateMismatch' => 'Недостаточный поток или несоответствие режимов.', - 'jsonErrorCtrlChar' => 'Найден неожиданный управляющий символ.', - 'jsonErrorSyntax' => 'В JSON найдена синтаксическая ошибка.', - 'jsonErrorUtf8' => 'Возможно ваш JSON закодирован не в UTF-8.', - 'jsonErrorUnknown' => 'Неизвестная ошибка.', -]; diff --git a/app/Language/ru/Core.php b/app/Language/ru/Core.php deleted file mode 100644 index 93fba2a5..00000000 --- a/app/Language/ru/Core.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Произошла ошибка при попытке заменить файл ({0}). Пожалуйста, убедитесь, что ваш каталог файлов доступен для записи.', - 'enabledZlibOutputCompression' => 'INI директива zlib.output_compression включена. Это не будет хорошо работать с выходными буферами.', - 'invalidFile' => 'Недопустимый файл: {0}', - 'missingExtension' => '{0} расширение не загружается.', - 'noHandlers' => '{0} должен иметь по крайней мере один обработчик.', -]; diff --git a/app/Language/ru/Database.php b/app/Language/ru/Database.php deleted file mode 100644 index 930b015a..00000000 --- a/app/Language/ru/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} не является допустимой функцией обратного вызова модели.', - 'invalidArgument' => 'Необходимо указать допустимое значение {0}.', - 'invalidAllowedFields' => 'Должны быть указаны допустимые поля для модели: {0}', - 'emptyDataset' => 'Нет данных в {0}.', - 'failGetFieldData' => 'Не удалось получить данные поля из базы данных.', - 'failGetIndexData' => 'Не удалось получить данные индекса из базы данных.', - 'failGetForeignKeyData' => 'Не удалось получить данные внешнего ключа из базы данных.', - 'parseStringFail' => 'Не удалось выполнить парсинг ключа.', - 'featureUnavailable' => 'Эта функция недоступна для используемой базы данных.', - 'tableNotFound' => 'Таблица "{0}" не найдена в текущей базе данных.', - 'noPrimaryKey' => 'Калсс модели "{0}" не имеет первичного ключа.', - 'noDateFormat' => 'Класс модели "{0}" не имеет допустимого $dateFormat.', - 'fieldNotExists' => 'Поле "{0}" не найдено.', - 'forEmptyInputGiven' => 'Для поля "{0}" задается пустой оператор.', - 'forFindColumnHaveMultipleColumns' => 'Имя солбца должно содержать название только одного столбца.', -]; diff --git a/app/Language/ru/Email.php b/app/Language/ru/Email.php deleted file mode 100644 index f566f72c..00000000 --- a/app/Language/ru/Email.php +++ /dev/null @@ -1,60 +0,0 @@ - 'В метод проверки электронной почты должен быть передан массив.', - 'invalidAddress' => 'Неверный адрес электронной почты: {0}', - 'attachmentMissing' => 'Не удается найти следующее вложение: {0}', - 'attachmentUnreadable' => 'Не удается открыть это вложение: {0}', - 'noFrom' => 'Не удается отправить почту без заголовка "From".', - 'noRecipients' => 'Необходимо указать получателей "To".', - 'sendFailurePHPMail' => 'Невозможно отправить письмо с помощью PHP_Mail().', - 'sendFailureSendmail' => 'Невозможно отправить письмо с помощью PHP_SendMail().', - 'sendFailureSmtp' => 'Невозможно отправить письмо с помощью PHP_SMTP().', - 'sent' => 'Ваше сообщение было отправлено по протоколу: {0}', - 'noSocket' => 'Не удается открыть сокет для PHP_SendMail(). Пожалуйста, проверьте настройки.', - 'noHostname' => 'Вы не указали имя хоста SMTP.', - 'SMTPError' => 'Произошла следующая ошибка SMTP: {0}', - 'noSMTPAuth' => 'Ошибка: Необходимо указать логин и пароль SMTP.', - 'failedSMTPLogin' => 'Не удалось выполнить команду AUTH LOGIN. Ошибка: {0}', - 'SMTPAuthUsername' => 'Не удалось проверить подлинность логина. Ошибка: {0}', - 'SMTPAuthPassword' => 'Не удалось проверить подлинность пароля. Ошибка: {0}', - 'SMTPDataFailure' => 'Не удается отправить данные: {0}', - 'exitStatus' => 'Статус-код выхода: {0}', -]; diff --git a/app/Language/ru/Encryption.php b/app/Language/ru/Encryption.php deleted file mode 100644 index e1dd4097..00000000 --- a/app/Language/ru/Encryption.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Требуется подключить дарйвер шифрования.', - 'noHandlerAvailable' => 'Не удается найти доступный обработчик шифрования {0}.', - 'unKnownHandler' => 'Обработчик "{0}" не может быть настроен.', - 'starterKeyNeeded' => 'Для шифрования требуется указать секретный ключ', - 'authenticationFailed' => 'Ошбика: Не удалось выполнить проверку подлинности.', - 'encryptionFailed' => 'Сбой шифрования.', -]; diff --git a/app/Language/ru/Entity.php b/app/Language/ru/Entity.php deleted file mode 100644 index 85713d73..00000000 --- a/app/Language/ru/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Попытка доступа к несуществующему свойству {0} из {1}', -]; diff --git a/app/Language/ru/Fabricator.php b/app/Language/ru/Fabricator.php deleted file mode 100644 index 71605139..00000000 --- a/app/Language/ru/Fabricator.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Постовляемая модель недопустима для изготовления.', - 'missingFormatters' => 'Действительные форматеры не определены.', -]; diff --git a/app/Language/ru/Files.php b/app/Language/ru/Files.php deleted file mode 100644 index 74c0594f..00000000 --- a/app/Language/ru/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Файл {0} не найден.', - 'cannotMove' => 'Не удалось переместить файл из {0} в {1}. ({2})', -]; diff --git a/app/Language/ru/Filters.php b/app/Language/ru/Filters.php deleted file mode 100644 index 34b258d4..00000000 --- a/app/Language/ru/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} фильтр должен иметь соответствующий алиас.', - 'incorrectInterface' => '{0} необходимо реализовать CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/ru/Format.php b/app/Language/ru/Format.php deleted file mode 100644 index 67c0e3f4..00000000 --- a/app/Language/ru/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Не удалось разобрать строку в JSON, Ошибка: "{0}".', - 'missingExtension' => 'Расширение SimpleXML требуется для форматирования XML.', -]; diff --git a/app/Language/ru/HTTP.php b/app/Language/ru/HTTP.php deleted file mode 100644 index 9aef0b4e..00000000 --- a/app/Language/ru/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'На вашем сервере должна быть включена библиотека CURL для использования класса CURLRequest.', - 'invalidSSLKey' => 'Не удается установить ключ SSL. {0} не является допустимым файлом.', - 'sslCertNotFound' => 'SSL-сертификат не найден в {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} не является допустимым типом согласования. Должен быть один из: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Неверная версия протокола HTTP. Должно быть одно из следующих значений: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Необходимо предоставить массив поддерживаемых значений для всех переговоров.', - - // RedirectResponse - 'invalidRoute' => '{0} маршрут не может быть найден при обратной маршрутизации.', - - // DownloadResponse - 'cannotSetBinary' => 'При установке $filepath не удается установить двоичного файл.', - 'cannotSetFilepath' => 'При установке двоичного файла не удается установить $filepath: {0}.', - 'notFoundDownloadSource' => 'Не найден источник загрузки тела.', - 'cannotSetCache' => 'Для загрузки кэширование не поддерживается.', - 'cannotSetStatusCode' => 'При скачивании изменение HTTP кода не поддерживается. Код: {0}, Причина: {1}.', - - // Response - 'missingResponseStatus' => 'В ответе HTTP отсутствует код состояния.', - 'invalidStatusCode' => '{0} не является допустимым кодом состояния.', - 'unknownStatusCode' => 'Неизвестный HTTP код состояния, предоставленный без сообщения: {0}.', - - // URI - 'cannotParseURI' => 'Невозможно разобрать URI: {0}', - 'segmentOutOfRange' => 'Сегмент URI запроса имеет диапазон: {0}', - 'invalidPort' => 'Указанный порт должен быть между 0 и 65535. Указан: {0}', - 'malformedQueryString' => 'Строки запроса могут не включать в себя фрагменты URI.', - - // Page Not Found - 'pageNotFound' => 'Страница не найдена.', - 'emptyController' => 'Не указан контроллер.', - 'controllerNotFound' => 'Контроллер или его метод не найден: {0}::{1}', - 'methodNotFound' => 'Метод контроллера не найден: {0}', - - // CSRF - 'disallowedAction' => 'Действие, которое вы запросили, не разрешено.', - - // Uploaded file moving - 'alreadyMoved' => 'Загруженный файл уже перемещен.', - 'invalidFile' => 'Исходный файл не является допустимым файлом.', - 'moveFailed' => 'Не удалось переместить файл из {0} в {1}. ({2})', - - 'uploadErrOk' => 'Файл успешно загружен !', - 'uploadErrIniSize' => 'Ваш файл "%s" превышает дерективу upload_max_filesize.', - 'uploadErrFormSize' => 'Файл "%s" превышает лимит загрузки, установленную в форме.', - 'uploadErrPartial' => 'Файл "%s" был загружен только частично.', - 'uploadErrNoFile' => 'Файл не был загружен.', - 'uploadErrCantWrite' => 'Не удалось записать на диск файл "%s".', - 'uploadErrNoTmpDir' => 'Не удалось загрузить файл: Отсутствует временный каталог.', - 'uploadErrExtension' => 'Загрузка файла была остановлена расширением PHP.', - 'uploadErrUnknown' => 'Файл "%s" не был загружен из-за неизвестной ошыибки.', -]; diff --git a/app/Language/ru/Images.php b/app/Language/ru/Images.php deleted file mode 100644 index 21b6606e..00000000 --- a/app/Language/ru/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'В настройках необходимо указать исходное изображение.', - 'gdRequired' => 'Для использования этой функции требуется библиотека изображений GD.', - 'gdRequiredForProps' => 'Ваш сервер должен поддерживать библиотеку изображений GD для определения свойств изображения.', - 'gifNotSupported' => 'Изображения GIF часто не поддерживаются из-за лицензионных ограничений.', - 'jpgNotSupported' => 'Изображения JPG не поддерживаются.', - 'pngNotSupported' => 'Изображения PNG не поддерживаются.', - 'fileNotSupported' => 'Предоставленный файл не является поддерживаемым типом изображения.', - 'unsupportedImageCreate' => 'Ваш сервер не поддерживает функцию GD, необходимую для обработки этого типа изображения.', - 'jpgOrPngRequired' => 'Протокол изменения размера изображения, указанный в настройках, работает только с типами изображений JPEG или PNG.', - 'rotateUnsupported' => 'Вращение изображений не поддерживается вашим сервером.', - 'libPathInvalid' => 'Неверный путь к библиотеке изображений.. {0, string)', - 'imageProcessFailed' => 'Не удалось обработать изображение.', - 'rotationAngleRequired' => 'Для поворота изображения требуется установить угол поворота.', - 'invalidPath' => 'Неверный путь к изображению.', - 'copyFailed' => 'Не удалось выполнить копирование изображения.', - 'missingFont' => 'Не удается найти шрифт для использования.', - 'saveFailed' => 'Не удалось сохранить изображение.', - 'invalidDirection' => 'Направление для поворота может быть только "вертикальным" или "горизонтальным". Указано: {0}.', - 'exifNotSupported' => 'Чтение данных EXIF не поддерживается в вашем PHP.', -]; diff --git a/app/Language/ru/Language.php b/app/Language/ru/Language.php deleted file mode 100644 index 29b6f006..00000000 --- a/app/Language/ru/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Установленная строка должна быть строкой или массивом строк.', -]; diff --git a/app/Language/ru/Log.php b/app/Language/ru/Log.php deleted file mode 100644 index a636a5e2..00000000 --- a/app/Language/ru/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} - это недопустимый уровень ведения журнала.', -]; diff --git a/app/Language/ru/Migrations.php b/app/Language/ru/Migrations.php deleted file mode 100644 index 02e43701..00000000 --- a/app/Language/ru/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Должна быть установлена таблица миграций.', - 'disabled' => 'Миграции были загружены, но отключены или неправильно настроены.', - 'notFound' => 'Файл миграции не найден: ', - 'batchNotFound' => 'Целевой пакет не найден: ', - 'empty' => 'Не найдены файлы миграции.', - 'gap' => 'Существует разрыв в последовательности миграции рядом с номером версии: ', - 'classNotFound' => 'Не удалось найти класс миграции "%s".', - 'missingMethod' => 'В классе миграции отсутствует метод "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tПереносит базу данных на последнюю доступную миграцию.", - 'migHelpCurrent' => "\t\tПереносит базу данных в версию, установленную как 'текущая' в конфигурации.", - 'migHelpVersion' => "\tПеренос базы данных в версию {v}.", - 'migHelpRollback' => "\tЗапускает все миграции 'вниз' до версии 0.", - 'migHelpRefresh' => "\t\tУдаляет и повторно запускает все миграции для обновления базы данных.", - 'migHelpSeed' => "\tРаботает SEEDER имени [name].", - 'migCreate' => "\tСоздает новую миграцию с именем [name].", - 'nameMigration' => 'Имя файла миграции', - 'badCreateName' => 'Необходимо указать имя файла миграции.', - 'writeError' => 'Ошибка при попытке создать файл.', - 'migNumberError' => 'Номер миграции должен состоять из трех цифр, и в нем не должно быть пробелов.', - 'rollBackConfirm' => 'Вы уверены, что хотите откатиться назад ?', - 'refreshConfirm' => 'Вы уверены, что хотите обновить ?', - - 'latest' => 'Запуск всех новых миграций...', - 'generalFault' => 'Миграция не удалась !', - 'migInvalidVersion' => 'Указан неверный номер версии.', - 'toVersionPH' => 'Переход к версии %s...', - 'toVersion' => 'Переход к текущей версии...', - 'rollingBack' => 'Откат миграции в: ', - 'noneFound' => 'Миграций не обнаружено.', - 'on' => 'Миграция на: ', - 'migSeeder' => 'Имя SEEDER`a', - 'migMissingSeeder' => 'Необходимо указать имя для SEEDER`a.', - 'removed' => 'Откат: ', - 'added' => 'Запуск: ', - - 'version' => 'Версия', - 'filename' => 'Имя файла', -]; diff --git a/app/Language/ru/Number.php b/app/Language/ru/Number.php deleted file mode 100644 index 9cd8909b..00000000 --- a/app/Language/ru/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'ТБ', - 'gigabyteAbbr' => 'ГБ', - 'megabyteAbbr' => 'МБ', - 'kilobyteAbbr' => 'КБ', - 'bytes' => 'Байтов', - - // don't forget the space in front of these! - 'thousand' => ' тысяча', - 'million' => ' миллион', - 'billion' => ' миллиард', - 'trillion' => ' триллион', - 'quadrillion' => ' квадралион', -]; diff --git a/app/Language/ru/Pager.php b/app/Language/ru/Pager.php deleted file mode 100644 index 44869c0b..00000000 --- a/app/Language/ru/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Пагинация', - 'first' => 'Первая', - 'previous' => 'Предыдущая', - 'next' => 'Следующая', - 'last' => 'Последняя', - 'older' => 'Старая', - 'newer' => 'Новая', - 'invalidTemplate' => '{0} не является допустимым шаблоном.', - 'invalidPaginationGroup' => '{0} не является группой пагинации.', -]; diff --git a/app/Language/ru/RESTful.php b/app/Language/ru/RESTful.php deleted file mode 100644 index 934cd22f..00000000 --- a/app/Language/ru/RESTful.php +++ /dev/null @@ -1,42 +0,0 @@ - '"{0}" действие не реализовано.', -]; diff --git a/app/Language/ru/Redirect.php b/app/Language/ru/Redirect.php deleted file mode 100644 index c4aa0d4e..00000000 --- a/app/Language/ru/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Не удается перенаправить на "{0}". Код ошибки: "{1}"', -]; diff --git a/app/Language/ru/Router.php b/app/Language/ru/Router.php deleted file mode 100644 index de078807..00000000 --- a/app/Language/ru/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Параметр не соответствует ожидаемому типу.', - 'missingDefaultRoute' => 'Невозможно определить, что должно отображаться. Маршрут по умолчанию не указан в файле маршрутизации.', -]; diff --git a/app/Language/ru/Session.php b/app/Language/ru/Session.php deleted file mode 100644 index 1595a74d..00000000 --- a/app/Language/ru/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '$sessionSavePath должен содержать имя таблицы для работы сессий с базой данных.', - 'invalidSavePath' => 'Ошибка: Настроенный путь сохранения "{0}" не является каталогом, не существует или не может быть создан.', - 'writeProtectedSavePath' => 'Ошибка: Настроенный путь сохранения "{0}" не доступен для записи процессом PHP.', - 'emptySavePath' => 'Ошибка: Не настроен путь сохранения сессий.', - 'invalidSavePathFormat' => 'Ошибка: Недопустимый формат пути сохранения для Redis: {0}.', -]; diff --git a/app/Language/ru/Time.php b/app/Language/ru/Time.php deleted file mode 100644 index 6c1102d5..00000000 --- a/app/Language/ru/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Должен быть указан месяц между 1 и 12. Указано: {0}', - 'invalidDay' => 'Должен быть указан день между 1 и 31. Указано: {0}', - 'invalidOverDay' => 'Дни должны быть от 1 до {0}. Указано: {1}.', - 'invalidHours' => 'Часы должны быть указаны между 0 и 23. Указано: {0}.', - 'invalidMinutes' => 'Минуты должны быть указаны между 0 и 59. Указано: {0}.', - 'invalidSeconds' => 'Секунды должны быть указаны между 0 и 59. Указано: {0}.', - 'years' => '{0, plural, =1{# год} other{# лет}}', - 'months' => '{0, plural, =1{# месяц} other{# месяцев}}', - 'weeks' => '{0, plural, =1{# неделя} other{# недель}}', - 'days' => '{0, plural, =1{# день} other{# дней}}', - 'hours' => '{0, plural, =1{# час} other{# часов}}', - 'minutes' => '{0, plural, =1{# минута} other{# минут}}', - 'seconds' => '{0, plural, =1{# секунда} other{# секунд}}', - 'ago' => '{0} назад', - 'inFuture' => 'в {0}', - 'yesterday' => 'Вчера', - 'tomorrow' => 'Завтра', - 'now' => 'Прямо сейчас', -]; diff --git a/app/Language/ru/Validation.php b/app/Language/ru/Validation.php deleted file mode 100644 index 1a80534f..00000000 --- a/app/Language/ru/Validation.php +++ /dev/null @@ -1,98 +0,0 @@ - 'В конфигурации проверки нет наборов правил.', - 'ruleNotFound' => '{0} не является допустимым правилом.', - 'groupNotFound' => '{0} не является допустимой группой правил.', - 'groupNotArray' => '{0} группа правил должна быть массивом.', - 'invalidTemplate' => '{0} не является допустимым шаблоном проверки.', - - // Rule Messages - 'alpha' => 'Поле {field} может содержать только алфавитные символы.', - 'alpha_dash' => 'Поле {field} может содержать только буквенно-цифровые символы, символы подчеркивания и тире.', - 'alpha_numeric' => 'Поле {field} может содержать только буквенно-цифровые символы.', - 'alpha_numeric_punct' => 'Поле {field} может содержать только буквенно-цифровые символы, пробелы и символы: ~ ! # $ % & * - _ + = | : .', - 'alpha_numeric_space' => 'Поле {field} может содержать только буквенно-цифровые символы и пробелы.', - 'alpha_space' => 'Поле {field} может содержать только алфавитные символы и пробелы.', - 'decimal' => 'Поле {field} должно содержать десятичное число.', - 'differs' => 'Поле {field} должно отличаться от поля {param}.', - 'equals' => 'Поле {field} должно совпадать с полем {param}.', - 'exact_length' => 'Поле {field} должно быть ровно {param} символов в длину.', - 'greater_than' => 'Поле {field} должно содержать число, большее, чем {param}.', - 'greater_than_equal_to' => 'Поле {field} должно содержать число, большее или равное {param}.', - 'hex' => 'The {field} field may only contain hexidecimal characters.', - 'in_list' => 'Поле {field} должно быть одним из следующих: {param}.', - 'integer' => 'Поле {field} должно содержать целое число.', - 'is_natural' => 'Поле {field} должно содержать только цифры.', - 'is_natural_no_zero' => 'Поле {field} должно содержать только цифры и должно быть больше нуля.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Поле {field} должно содержать уникальное значение.', - 'less_than' => 'Поле {field} должно содержать число меньше, чем {param}.', - 'less_than_equal_to' => 'Поле {field} должно содержать число, меньшее или равное {param}.', - 'matches' => 'Поле {field} не соответствует полю {param}.', - 'max_length' => 'Длина поля {field} не может превышать {param} символов.', - 'min_length' => 'Длина поля {field} должна быть не менее {param} символов.', - 'not_equals' => 'Поле {field} не может быть: {param}.', - 'numeric' => 'Поле {field} должно содержать только числа.', - 'regex_match' => 'Поле {field} имеет неправильный формат.', - 'required' => 'Поле {field} является обязательным.', - 'required_with' => 'Поле {field} является обязательным, если присутствует {param}.', - 'required_without' => 'Поле {field} является обязательным, если {param} отсутствует.', - 'string' => 'Поле {field} должно быть допустимой строкой.', - 'timezone' => 'Поле {field} должно быть допустимым часовым поясом.', - 'valid_base64' => 'Поле {field} должно быть допустимой строкой base64.', - 'valid_email' => 'Поле {field} должно содержать действительный адрес электронной почты.', - 'valid_emails' => 'Поле {field} должно содержать все допустимые адреса электронной почты.', - 'valid_ip' => 'Поле {field} должно содержать допустимый IP-адрес.', - 'valid_url' => 'Поле {field} должно содержать допустимый URL-адрес.', - 'valid_date' => 'Поле {field} должно содержать допустимую дату.', - - // Credit Cards - 'valid_cc_num' => 'Поле {field} должно содержать действительный номер кредитной карты.', - - // Files - 'uploaded' => 'Поле {field} не содержит файл.', - 'max_size' => 'Поле {field} содержит слишком большой файл.', - 'is_image' => 'Поле {field} должно содержать файл изображения.', - 'mime_in' => 'Поле {field} должно содержать допустимый тип файла.', - 'ext_in' => 'Поле {field} должно содержать допустимое расширение файла.', - 'max_dims' => 'Поле {field} не содержит изображение, либо это изображением слишком широкое или высокое.', -]; diff --git a/app/Language/ru/View.php b/app/Language/ru/View.php deleted file mode 100644 index 9fe70409..00000000 --- a/app/Language/ru/View.php +++ /dev/null @@ -1,47 +0,0 @@ - '{class}::{method} не является допустимым методом.', - 'missingCellParameters' => '{class}::{method} не имеет параметров.', - 'invalidCellParameter' => '{0} не является допустимым именем параметра.', - 'noCellClass' => 'Не предоставлен класс ячейки представления.', - 'invalidCellClass' => 'Не удается найти класс {0} ячеек представления.', - 'tagSyntaxError' => 'У вас есть синтаксическая ошибка в тегах парсера: {0}', -]; diff --git a/app/Language/sk/CLI.php b/app/Language/sk/CLI.php deleted file mode 100644 index 8791ba9e..00000000 --- a/app/Language/sk/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Príkaz "{0}" nebol nájdený.', - 'helpUsage' => 'Použitie:', - 'helpDescription' => 'Popis:', - 'helpOptions' => 'Možnosti:', - 'helpArguments' => 'Argumenty:', - 'invalidColor' => 'Neplatná {0} farba: {1}.', -]; diff --git a/app/Language/sk/Cache.php b/app/Language/sk/Cache.php deleted file mode 100644 index f6fe3661..00000000 --- a/app/Language/sk/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Cache nie je možné uložiť do {0}', - 'invalidHandlers' => 'Cache config musí mať pole z $validHandlers.', - 'noBackup' => 'Cache config musí mať nastavený handler a backupHandler.', - 'handlerNotFound' => 'Cache config má neplatný špecifikovaný handler alebo záložný handler.', -]; diff --git a/app/Language/sk/Cast.php b/app/Language/sk/Cast.php deleted file mode 100644 index 68729d47..00000000 --- a/app/Language/sk/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Bola prekročená maximálna veľkosť zásobníku', - 'jsonErrorStateMismatch' => 'Neplatný alebo poškodený JSON', - 'jsonErrorCtrlChar' => 'Nájdený neočakáavaný kontrolný znak', - 'jsonErrorSyntax' => 'Chyba syntaxe, poškodený JSON', - 'jsonErrorUtf8' => 'Poškodené UTF-8 znaky, možné nesprávne kódovanie', - 'jsonErrorUnknown' => 'Neznáma chyba', -]; diff --git a/app/Language/sk/Core.php b/app/Language/sk/Core.php deleted file mode 100644 index 8c8ea17a..00000000 --- a/app/Language/sk/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Neplatný súbor: {0}', - 'copyError' => 'Vyskytla sa chyba pri pokuse nahradiť súbor ({0}). Prosím uistite sa, že zložka so súbormi je zapisovateľná..', - 'missingExtension' => '{0} rozšírenie nebolo načítané.', - 'noHandlers' => '{0} musí poskytnúť aspoň jeden Handler.', -]; diff --git a/app/Language/sk/Database.php b/app/Language/sk/Database.php deleted file mode 100644 index 43412afa..00000000 --- a/app/Language/sk/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} je neplatné spätné volanie Model Event.', - 'invalidArgument' => 'Musíte zadať platný {0}.', - 'invalidAllowedFields' => 'Povolené polia musia byť špecifikované pre model: {0}', - 'emptyDataset' => 'Žiadne dáta pre {0}.', - 'failGetFieldData' => 'Zlyhalo získanie údajov poľa z databáze.', - 'failGetIndexData' => 'Zlyhalo získanie údajov indexu z databáze.', - 'failGetForeignKeyData' => 'Zlyhalo získanie údajov cudzieho kľúča z databáze.', - 'parseStringFail' => 'Parsovanie reťazca kľúča zlyhalo.', - 'featureUnavailable' => 'Tátu funkcia je nedostupná v používanej databáze.', - 'tableNotFound' => 'Tabuľka `{0}` nebola nájdená v zvolenej databáze.', - 'noPrimaryKey' => '`{0}` trieda modelu nešpecifikuje Primárny Kľúč.', - 'noDateFormat' => '`{0}` trieda modelu nemá platný formát dútumu.', - 'fieldNotExists' => 'Pole `{0}` nebolo nájdené.', - 'forEmptyInputGiven' => 'Bol zadaný prázdny dopyt pre pole `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Iba jeden stĺpec je povolený v názve stĺpcu.', -]; diff --git a/app/Language/sk/Email.php b/app/Language/sk/Email.php deleted file mode 100644 index 18f9899b..00000000 --- a/app/Language/sk/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'The email validation method must be passed an array.', - 'invalidAddress' => 'Invalid email address: {0}', - 'attachmentMissing' => 'Unable to locate the following email attachment: {0}', - 'attachmentUnreadable' => 'Unable to open this attachment: {0}', - 'noFrom' => 'Cannot send mail with no "From" header.', - 'noRecipients' => 'You must include recipients: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.', - 'sendFailureSendmail' => 'Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.', - 'sendFailureSmtp' => 'Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.', - 'sent' => 'Your message has been successfully sent using the following protocol: {0}', - 'noSocket' => 'Unable to open a socket to Sendmail. Please check settings.', - 'noHostname' => 'You did not specify a SMTP hostname.', - 'SMTPError' => 'The following SMTP error was encountered: {0}', - 'noSMTPAuth' => 'Error: You must assign a SMTP username and password.', - 'failedSMTPLogin' => 'Failed to send AUTH LOGIN command. Error: {0}', - 'SMTPAuthUsername' => 'Failed to authenticate username. Error: {0}', - 'SMTPAuthPassword' => 'Failed to authenticate password. Error: {0}', - 'SMTPDataFailure' => 'Unable to send data: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; diff --git a/app/Language/sk/Encryption.php b/app/Language/sk/Encryption.php deleted file mode 100644 index 5f44b42a..00000000 --- a/app/Language/sk/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/sk/Entity.php b/app/Language/sk/Entity.php deleted file mode 100644 index ae54a6b2..00000000 --- a/app/Language/sk/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Pokus o prístup k neexistujúcej vlastnosti {0} z {1}' -]; diff --git a/app/Language/sk/Files.php b/app/Language/sk/Files.php deleted file mode 100644 index 4846da32..00000000 --- a/app/Language/sk/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Súbor nebol nájdený: {0}', - 'cannotMove' => 'Súbor {0} nebolo možné presunúť do {1} ({2})', -]; diff --git a/app/Language/sk/Filters.php b/app/Language/sk/Filters.php deleted file mode 100644 index 31d4462e..00000000 --- a/app/Language/sk/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} filter musí mať definovaný zhodujúci sa alias.', - 'incorrectInterface' => '{0} musí implementovať CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/sk/Format.php b/app/Language/sk/Format.php deleted file mode 100644 index bcb90efc..00000000 --- a/app/Language/sk/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parsovanie JSON reťazca zlyhalo, chyba: "{0}".', - 'missingExtension' => 'Rozšírenie SimpleXML je nevyhnutné pre XML formát.', -]; diff --git a/app/Language/sk/HTTP.php b/app/Language/sk/HTTP.php deleted file mode 100644 index db7b894f..00000000 --- a/app/Language/sk/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'Aby bolo možné používať triedu CURLRequest, musí byť povolená funkcia CURL.', - 'invalidSSLKey' => 'Nie je možné nastaviť kľúč SSL. {0} nie je platný súbor.', - 'sslCertNotFound' => 'SSL certifikát nebol nájdený na: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} nie je platný typ vyjednávania. Musí to byť: médium, znaková sada, kódovanie alebo jazyk.', - - // Message - 'invalidHTTPProtocol' => 'Neplatná verzia protokolu HTTP. Musí to byť jedno z: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Musíte poskytnúť pole podporovaných hodnôt pre všetky negotiations.', - - // RedirectResponse - 'invalidRoute' => '{0} trasu nemožno nájsť pri spätnom smerovaní.', - - // DownloadResponse - 'cannotSetBinary' => 'Pri nastavovaní filepath nie je možné nastaviť binary.', - 'cannotSetFilepath' => 'Pri nastavovaní binary nie je možné nastaviť filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'Nepodporuje ukladanie do vyrovnávacej pamäte pre sťahovanie.', - 'cannotSetStatusCode' => 'Nepodporuje stavový kód chnage na stiahnutie. kód: {0}, dôvod: {1}', - - // Response - 'missingResponseStatus' => 'V odpovedi HTTP chýba stavový kód', - 'invalidStatusCode' => '{0} nie je platný návratový stavový kód HTTP', - 'unknownStatusCode' => 'Neznámy stavový kód HTTP poskytnutý bez správy: {0}', - - // URI - 'cannotParseURI' => 'Nemožno analyzovať URI: {0}', - 'segmentOutOfRange' => 'Segment URI žiadosti je mimo rozsahu: {0}', - 'invalidPort' => 'Porty musia byť medzi 0 a 65535. Zadaný: {0}', - 'malformedQueryString' => 'Reťazce dopytov nemusia obsahovať fragmenty URI.', - - // Page Not Found - 'pageNotFound' => 'Stránka sa nenašla', - 'emptyController' => 'Nie je zadaný žiadny Controller.', - 'controllerNotFound' => 'Controller alebo jeho metóda sa nenašla: {0}::{1}', - 'methodNotFound' => 'Metóda Controller-u sa nenašla: {0}', - - // CSRF - 'disallowedAction' => 'Požadovaná akcia nie je povolená.', - - // Uploaded file moving - 'alreadyMoved' => 'Nahraný súbor už bol presunutý.', - 'invalidFile' => 'Pôvodný súbor nie je platný.', - 'moveFailed' => 'Nepodarilo sa presunúť súbor z {0} do {1} ({2})', - - 'uploadErrOk' => 'Súbor bol úspešne odovzdaný.', - 'uploadErrIniSize' => 'Súbor "%s" prekračuje vašu direktívu upload_max_filesize ini.', - 'uploadErrFormSize' => 'Súbor "%s" prekračuje limit pre upload stanovený vo vašom formulári.', - 'uploadErrPartial' => 'Súbor "%s" bol nahraný iba čiastočne.', - 'uploadErrNoFile' => 'Nebol nahraný žiaden súbor.', - 'uploadErrCantWrite' => 'Súbor "%s" sa nedal zapísať na disk.', - 'uploadErrNoTmpDir' => 'Súbor sa nepodarilo nahrať: chýba dočasný adresár.', - 'uploadErrExtension' => 'Nahrávanie súborov bolo zastavené rozšírením PHP.', - 'uploadErrUnknown' => 'Súbor "%s" nebol nahraný kvôli neznámej chybe.', -]; diff --git a/app/Language/sk/Images.php b/app/Language/sk/Images.php deleted file mode 100644 index 9be7319b..00000000 --- a/app/Language/sk/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Musíte uviesť zdrojový obrázok v preferenciách.', - 'gdRequired' => 'Na použitie tejto funkcie je potrebná knižnica obrázkov GD.', - 'gdRequiredForProps' => 'Server musí podporovať knižnicu obrázkov GD, aby určil vlastnosti obrázkov.', - 'gifNotSupported' => 'Obrázky GIF často nie sú podporované kvôli licenčným obmedzeniam. Možno budete musieť namiesto toho použiť obrázky JPG alebo PNG.', - 'jpgNotSupported' => 'Obrázky JPG nie sú podporované.', - 'pngNotSupported' => 'Obrázky PNG nie sú podporované.', - 'unsupportedImageCreate' => 'Váš server nepodporuje funkciu GD potrebnú na spracovanie tohto typu obrázka.', - 'jpgOrPngRequired' => 'Protokol o zmene veľkosti obrázka špecifikovaný vo vašich preferenciách funguje iba pre typy obrázkov JPEG alebo PNG.', - 'rotateUnsupported' => 'Zdá sa, že váš server nepodporuje rotáciu obrázkov.', - 'libPathInvalid' => 'Cesta do vašej knižnice obrázkov nie je správna. Nastavte správnu cestu v preferenciách obrázkov. {0, string)', - 'imageProcessFailed' => 'Spracovanie obrázku zlyhalo. Skontrolujte, či váš server podporuje zvolený protokol a či je cesta k vašej knižnici obrázkov správna.', - 'rotationAngleRequired' => 'Na otočenie obrázku je potrebný uhol rotácie.', - 'invalidPath' => 'Cesta k obrázku nie je správna.', - 'copyFailed' => 'Rutina kopírovania obrázkov zlyhala.', - 'missingFont' => 'Nie je možné nájsť písmo na použitie.', - 'saveFailed' => 'Obrázok sa nepodarilo uložiť. Uistite sa, že adresár obrázkov a súborov je zapisovateľný.', - 'invalidDirection' => 'Smer preklopenia môže byť iba "vertikálny" alebo "horizontálny". Zadané: {0}', - 'exifNotSupported' => 'Táto inštalácia PHP nepodporuje čítanie EXIF dát.', -]; diff --git a/app/Language/sk/Language.php b/app/Language/sk/Language.php deleted file mode 100644 index 3aa642d5..00000000 --- a/app/Language/sk/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line musí byť reťazec alebo pole reťazcov.', -]; diff --git a/app/Language/sk/Log.php b/app/Language/sk/Log.php deleted file mode 100644 index f0d8a1c4..00000000 --- a/app/Language/sk/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} je neplatná úroveň logu.', -]; diff --git a/app/Language/sk/Migrations.php b/app/Language/sk/Migrations.php deleted file mode 100644 index 00cacbb7..00000000 --- a/app/Language/sk/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Musí byť nastavená tabuľka migrácií.', -// 'invalidType' => 'Bol zadaný neplatný typ číslovania migrácie: {0}', - 'disabled' => 'Migrácie boli načítané, ale sú deaktivované alebo nesprávne nastavené.', - 'notFound' => 'Migračný súbor nebol nájdený: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Nenašli sa žiadne migračné súbory', - 'gap' => 'V migračnej sekvencii pri čísle verzie je medzera: ', - 'classNotFound' => 'Migračnú triedu "%s" sa nepodarilo nájsť.', - 'missingMethod' => 'V migračnej triede chýba metóda "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tMigruje databázu na najnovšiu dostupnú migráciu.", - 'migHelpCurrent' => "\t\tMigruje databázu na verziu nastavenú ako aktuálnu v konfigurácii.", - 'migHelpVersion' => "\tMigruje databázu na verziu {v}.", - 'migHelpRollback' => "\tSpustí všetky migrácie 'nadol' na verziu 0.", - 'migHelpRefresh' => "\t\tOdinštaluje a znovu spustí všetky migrácie do novej databázy.", - 'migHelpSeed' => "\tSpustí seeder s menom [ name ].", - 'migCreate' => "\tVytvorí novú migráciu s názvom [ name ]", - 'nameMigration' => 'Pomenujte migračný súbor', - 'badCreateName' => 'Musíte zadať názov migračného súboru.', - 'writeError' => 'Chyba pri vytváraní súboru.', - 'migNumberError' => 'Migračné číslo musí byť tri číslice a v sekvencii nesmú byť medzery.', - -// 'toLatest' => 'Prebieha migrácia na najnovšiu verziu...', - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => 'Zadané neplatné číslo verzie.', - 'toVersionPH' => 'Prebieha migrácia na verziu %s ...', - 'toVersion' => 'Prebieha migrácia na aktuálnu verziu ...', - 'rollingBack' => 'Vracajú sa späť všetky migrácie ...', - 'noneFound' => 'Nenašli sa žiadne migrácie.', - 'on' => 'Zmigraované na: ', - 'migSeeder' => 'Meno seederu', - 'migMissingSeeder' => 'Musíte zadať meno seederu.', - 'removed' => 'Vraciam: ', - 'added' => 'Beží: ', - - 'version' => 'Verzia', - 'filename' => 'Názov súboru', -]; diff --git a/app/Language/sk/Number.php b/app/Language/sk/Number.php deleted file mode 100644 index ed113e0b..00000000 --- a/app/Language/sk/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bajtov', - - // don't forget the space in front of these! - 'thousand' => ' tisíc', - 'million' => ' milión', - 'billion' => ' miliarda', - 'trillion' => ' trilión', - 'quadrillion' => ' kvadrilión', -]; diff --git a/app/Language/sk/Pager.php b/app/Language/sk/Pager.php deleted file mode 100644 index bcecd6a7..00000000 --- a/app/Language/sk/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Navigácia stránky', - 'first' => 'Prvá', - 'previous' => 'Predošlá', - 'next' => 'Ďalšia', - 'last' => 'Posledná', - 'older' => 'Staršie', - 'newer' => 'Novšie', - 'invalidTemplate' => '{0} je neplatná Pager predloha.', - 'invalidPaginationGroup' => '{0} je neplatná skupina pre Pagination.', -]; diff --git a/app/Language/sk/RESTful.php b/app/Language/sk/RESTful.php deleted file mode 100644 index 45a59577..00000000 --- a/app/Language/sk/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/sk/Redirect.php b/app/Language/sk/Redirect.php deleted file mode 100644 index dc89ffeb..00000000 --- a/app/Language/sk/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Nepodarilo sa presmerovať na "{0}". Kód chyby "{1}"', -]; diff --git a/app/Language/sk/Router.php b/app/Language/sk/Router.php deleted file mode 100644 index db549e30..00000000 --- a/app/Language/sk/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Parameter sa nezhoduje s očakávaným typom.', - 'missingDefaultRoute' => 'Nemôžné určiť, čo by malo byť zobrazené. Predvolená cesta nebola špecifikovaná v routing súbore.', -]; diff --git a/app/Language/sk/Session.php b/app/Language/sk/Session.php deleted file mode 100644 index 039ea63b..00000000 --- a/app/Language/sk/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` musí mať tabuľku aby pracoval Database Session Handler.', - 'invalidSavePath' => 'Session: Nastavená cesta uloženia "{0}" nie je zložka, neexistuje alebo nemôže byť vytvorená.', - 'writeProtectedSavePath' => 'Session: Nastavená cesta uloženia "{0}" nie je zapisovateľná cez PHP proces.', - 'emptySavePath' => 'Session: Nie je nastavená cesta na uloženie.', - 'invalidSavePathFormat' => 'Session: Neplatný formát Redis cesty: {0}', -]; diff --git a/app/Language/sk/Time.php b/app/Language/sk/Time.php deleted file mode 100644 index f9d8e183..00000000 --- a/app/Language/sk/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Mesiace musia byť v rozmedzí od 1 do 12. Zadané: {0}', - 'invalidDay' => 'Dni musia byť v rozmedzí od 1 do 31. Zadané: {0}', - 'invalidOverDay' => 'Dni musia byť v rozmedzí od 1 do {0}. Zadané: {1}', - 'invalidHours' => 'Hodiny musia byť v rozmedzí od 0 do 23. Zadané: {0}', - 'invalidMinutes' => 'Minúty mudia byť v rozmedzí od 0 do 59. Zadané: {0}', - 'invalidSeconds' => 'Sekundy musia byť v rozmedzí od 0 do 59. Zadané: {0}', - 'years' => '{0, plural, =1{# rok} other{# roky}}', - 'months' => '{0, plural, =1{# mesiac} other{# mesiace}}', - 'weeks' => '{0, plural, =1{# týždeň} other{# týždne}}', - 'days' => '{0, plural, =1{# deň} other{# dni}}', - 'hours' => '{0, plural, =1{# hodina} other{# hodiny}}', - 'minutes' => '{0, plural, =1{# minúta} other{# minúty}}', - 'seconds' => '{0, plural, =1{# sekunda} other{# sekundy}}', - 'ago' => '{0} pred', - 'inFuture' => 'za {0}', - 'yesterday' => 'Včera', - 'tomorrow' => 'Zajtra', - 'now' => 'Práve teraz', -]; diff --git a/app/Language/sk/Validation.php b/app/Language/sk/Validation.php deleted file mode 100644 index 03b5cd09..00000000 --- a/app/Language/sk/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'No rulesets specified in Validation configuration.', - 'ruleNotFound' => '{0} je neplatné pravidlo.', - 'groupNotFound' => '{0} nie je skupina overovacích pravidiel..', - 'groupNotArray' => '{0} skupina pravididel musí byť pole.', - 'invalidTemplate' => '{0} je neplatná Validation predloha.', - - // Rule Messages - 'alpha' => 'Pole {field} môže obsahovať iba abecedné znaky.', - 'alpha_dash' => 'Pole {field} môže obsahovať iba alfanumerické znaky, podtržníky a pomlčky.', - 'alpha_numeric' => 'Pole {field} môže obsahovať iba alfanumerické znaky.', - 'alpha_numeric_space' => 'Pole {field} môže obsahovať iba alfanumerické znaky a medzery.', - 'alpha_space' => 'Pole {field} môže obsahovať iba abecedné znaky a medzery.', - 'decimal' => 'Pole {field} musí obsahovať decimálne číslo.', - 'differs' => 'Pole {field} musí byť rozdielne od poľa {param}.', - 'equals' => 'Pole {field} musí byť presne: {param}.', - 'exact_length' => 'Pole {field} musí byť presne {param} znakov dlhé.', - 'greater_than' => 'Pole {field} musí obsahovať číslo väčšie ako {param}.', - 'greater_than_equal_to' => 'Pole {field} musí obsahovať číslo väčšie alebo rovné ako {param}.', - 'in_list' => 'Pole {field} musí byť jedno z: {param}.', - 'integer' => 'Pole {field} musí obsahovať celé číslo.', - 'is_natural' => 'Pole {field} musí obsahovať iba číslice.', - 'is_natural_no_zero' => 'Pole {field} musí obsahovať iba číslice a musí byť väčšie ako nula.', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => 'Pole {field} musí obsahovať unikátnu hodnotu.', - 'less_than' => 'Pole {field} musí obsahovať číslo menšie ako {param}.', - 'less_than_equal_to' => 'Pole {field} musí obsahovať číslo menšie alebo rovné ako {param}.', - 'matches' => 'Pole {field} sa nezhoduje s poľom {param}.', - 'max_length' => 'Pole {field} nemôže prekročiť počet znakov: {param}.', - 'min_length' => 'Pole {field} musí byť dlhšie ako {param} znaky.', - 'not_equals' => 'Pole {field} nemôže byť: {param}.', - 'numeric' => 'Pole {field} musí obsahovať iba čísla.', - 'regex_match' => 'Pole {field} má nesprávny formát.', - 'required' => 'Pole {field} je povinné.', - 'required_with' => 'Pole {field} je povinné ak {param} je zadaný.', - 'required_without' => 'Pole {field} je povinné ak {param} nie je zadaný.', - 'timezone' => 'Pole {field} musí byť platná časová zóna.', - 'valid_base64' => 'Pole {field} musí byť platný base64 reťazec.', - 'valid_email' => 'Pole {field} musí obsahovať platnú emailovú adresu.', - 'valid_emails' => 'Pole {field} musí obsahovať iba platné emailové adresy.', - 'valid_ip' => 'Pole {field} musí obsahovať platnú IP adresu.', - 'valid_url' => 'Pole {field} musí obsahovať platnú URL adresu.', - 'valid_date' => 'Pole {field} musí obsahovať platný dátum.', - - // Credit Cards - 'valid_cc_num' => '{field} sa nezdá byť platné číslo kreditnej/debetnej karty.', - - // Files - 'uploaded' => '{field} je neplatný nahraný súbor.', - 'max_size' => '{field} je príliš veľký súbor.', - 'is_image' => '{field} je neplatný nahraný obrázok.', - 'mime_in' => '{field} nemá platný mime typ.', - 'ext_in' => '{field} je neplatný typ súboru.', - 'max_dims' => '{field} nie je obrázok alebo je príliš široký alebo vysoký.', -]; diff --git a/app/Language/sk/View.php b/app/Language/sk/View.php deleted file mode 100644 index 023b8579..00000000 --- a/app/Language/sk/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} nie je platná metóda.', - 'missingCellParameters' => '{class}::{method} nemá žiadne parametre.', - 'invalidCellParameter' => '{0} nie je platný názov paramteru.', - 'noCellClass' => 'Žiadna trieda zobrazenia.', - 'invalidCellClass' => 'Nebolo možné nájsť triedu zobrazenia: {0}.', - 'tagSyntaxError' => 'Chyba syntaxe vo vašich Parser značkách: {0}', -]; diff --git a/app/Language/tr/CLI.php b/app/Language/tr/CLI.php deleted file mode 100644 index 7cf15dcf..00000000 --- a/app/Language/tr/CLI.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Command "{0}" not found.', - 'helpUsage' => 'Kullanım:', - 'helpDescription' => 'Açıklama:', - 'helpOptions' => 'Seçenekler:', - 'helpArguments' => 'Değişkenler:', - 'invalidColor' => 'Geçersiz {0} rengi: {1}.', -]; diff --git a/app/Language/tr/Cache.php b/app/Language/tr/Cache.php deleted file mode 100644 index 68eed598..00000000 --- a/app/Language/tr/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Cache unable to write to {0}', - 'invalidHandlers' => 'Önbellek ayarlarının bir $validHandlers dizisi içermesi gerekir.', - 'noBackup' => 'Önbellek ayarlarının bir işleyicisinin olması ve backupHandler\'inin belirlenmesi gerekir.', - 'handlerNotFound' => 'Önbellek ayarlarının işleyicisi veya yedek işleyicisi geçersiz.', -]; diff --git a/app/Language/tr/Cast.php b/app/Language/tr/Cast.php deleted file mode 100644 index e5c2d291..00000000 --- a/app/Language/tr/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Maximum stack depth exceeded', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Unexpected control character found', - 'jsonErrorSyntax' => 'Syntax error, malformed JSON', - 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', - 'jsonErrorUnknown' => 'Unknown error', -]; diff --git a/app/Language/tr/Core.php b/app/Language/tr/Core.php deleted file mode 100644 index 72f1ebbd..00000000 --- a/app/Language/tr/Core.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Geçersiz dosya: {0}', - 'copyError' => 'Dosyayı değiştirmeye çalışırken bir hata oluştu. Lütfen klasörün yazılabilir olduğundan emin olunuz', - 'missingExtension' => '{0} uzantısı yüklenemedi.', - 'noHandlers' => '{0} en azından bir işleyici belirtilmeli.', -]; diff --git a/app/Language/tr/Database.php b/app/Language/tr/Database.php deleted file mode 100644 index 5f740dcd..00000000 --- a/app/Language/tr/Database.php +++ /dev/null @@ -1,55 +0,0 @@ - '{0} geçersiz Model Event geri çağrısı.', - 'invalidArgument' => 'Geçerli bir {0} belirtmelisiniz.', - 'invalidAllowedFields' => 'Modelde izin verilen alanlar belirtilmeli: {0}', - 'emptyDataset' => '{0} içinde veri yok.', - 'failGetFieldData' => 'Failed to get field data from database.', - 'failGetIndexData' => 'Failed to get index data from database.', - 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', - 'parseStringFail' => 'Parsing key string failed.', - 'featureUnavailable' => 'This feature is not available for the database you are using.', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/tr/Email.php b/app/Language/tr/Email.php deleted file mode 100644 index bd5e6963..00000000 --- a/app/Language/tr/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Email doğrulama işlevine bir dizi verilmeli.', - 'invalidAddress' => 'Geçersiz email adresi: {0}', - 'attachmentMissing' => 'Email eklentisi bulunamadı: {0}', - 'attachmentUnreadable' => 'Email eklentisi açılamadı: {0}', - 'noFrom' => '"From" başlığı olmadan email gönderilemez.', - 'noRecipients' => 'Alıcıları belirtmelisiniz: To, Cc, veya Bcc', - 'sendFailurePHPMail' => 'PHP mail() yöntemi kullanılarak email gönderilemiyor. Sunucunuz bu yöntemle email gönderecek şekilde ayarlanmamış olabilir.', - 'sendFailureSendmail' => 'PHP Sendmail yöntemi kullanılarak email gönderilemiyor. Sunucunuz bu yöntemle email gönderecek şekilde ayarlanmamış olabilir.', - 'sendFailureSmtp' => 'PHP SMTP yöntemi kullanılarak email gönderilemiyor. Sunucunuz bu yöntemle email gönderecek şekilde ayarlanmamış olabilir.', - 'sent' => 'Mesajınız {0} protokolü kullanılarak başarıyla gönderildi.', - 'noSocket' => 'Sendmail soketi açılamıyor. Lütfen ayarlarınızı kontrol edin.', - 'noHostname' => 'SMTP sunucu adı belirtmeniz gerekiyor.', - 'SMTPError' => 'SMTP hatası alındı: {0}', - 'noSMTPAuth' => 'Hata: SMTP kullanıcı adı ve şifre belirtmelisiniz.', - 'failedSMTPLogin' => 'AUTH LOGIN komutu gönderilemedi. Hata: {0}', - 'SMTPAuthUsername' => 'Kullanıcı adı hatalı. Hata: {0}', - 'SMTPAuthPassword' => 'Şifre hatalı Hata: {0}', - 'SMTPDataFailure' => 'Veri gönderilemedi: {0}', - 'exitStatus' => 'Çıkış kodu: {0}', -]; diff --git a/app/Language/tr/Encryption.php b/app/Language/tr/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/tr/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/tr/Entity.php b/app/Language/tr/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/tr/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/tr/Files.php b/app/Language/tr/Files.php deleted file mode 100644 index 5f3ec7b7..00000000 --- a/app/Language/tr/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Dosya bulunamadı: {0}', - 'cannotMove' => '{0} dosyası {1} ({2}) \'ye taşınamadı.', -// 'invalidFilename' => 'Hedef dosya adı eksik veya geçersiz: {0}', -// 'cannotCopy' => '{0} klasörüne kopyalanamadı - klasörün yazılabilir olduğundan emin olunuz', -]; diff --git a/app/Language/tr/Filters.php b/app/Language/tr/Filters.php deleted file mode 100644 index 4bacebc9..00000000 --- a/app/Language/tr/Filters.php +++ /dev/null @@ -1,42 +0,0 @@ - '\'{0}\' filtresiyle eşleşen bir takma ad bulunamadı.', - 'incorrectInterface' => '{0} CodeIgniter\Filters\FilterInterface arayüzünü uygulamalı.', -]; diff --git a/app/Language/tr/Format.php b/app/Language/tr/Format.php deleted file mode 100644 index fb4396ab..00000000 --- a/app/Language/tr/Format.php +++ /dev/null @@ -1,42 +0,0 @@ - 'json dizisi çözümlenemedi. Hata: "{0}".', - 'missingExtension' => 'XML oluşturmak için SimpleXML eklentisi gerekli.', -]; diff --git a/app/Language/tr/HTTP.php b/app/Language/tr/HTTP.php deleted file mode 100644 index 51fa4b1c..00000000 --- a/app/Language/tr/HTTP.php +++ /dev/null @@ -1,99 +0,0 @@ - 'CURLRequest sınıfını kullanabilmek için CURL etkinleştirilmeli.', - 'invalidSSLKey' => 'SSL anahtarı belirlenemiyor. {0} geçersiz bir dosya.', - 'sslCertNotFound' => 'SSL sertifikası {0} \'da bulunamadı.', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} geçersiz bir pazarlık türü. Şunlardan biri olmalı: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Geçersiz HTTP protokol sürümü. Şunlardan biri olmalı: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Tüm pazarlıklara (Negotiations) bir desteklenen değerler dizisi belirtmelisiniz.', - - // RedirectResponse - 'invalidRoute' => '{0} geçersiz rota.', - - // DownloadResponse - 'cannotSetBinary' => 'When setting filepath can not set binary.', - 'cannotSetFilepath' => 'When setting binary can not set filepath: {0}', - 'notFoundDownloadSource' => 'Not found download body source.', - 'cannotSetCache' => 'It does not supported caching for downloading.', - 'cannotSetStatusCode' => 'It does not supported chnage status code for downloading. code: {0}, reason: {1}', - - // Response - 'missingResponseStatus' => 'HTTP Response durum kodu eksik.', - 'invalidStatusCode' => '{0} geçersiz HTTP cevap durum kodu', - 'unknownStatusCode' => 'Bilinmeyen HTTP durum kodu: {0}', - - // URI - 'cannotParseURI' => 'URI çözümlenemedi: {0}', - 'segmentOutOfRange' => 'İstenen URI bölümü aralık dışında: {0}', - 'invalidPort' => 'Portlar 0 ve 65535 arasında olmalı. Verilen: {0}', - 'malformedQueryString' => 'Sorgu karakter dizileri URI bölümleri içermemeli.', - - // Page Not Found - 'pageNotFound' => 'Sayfa bulunamadı.', - 'emptyController' => 'Controller belirtilmemiş.', - 'controllerNotFound' => 'Controller veya metod bulunamadı: {0}::{1}', - 'methodNotFound' => 'Controller metodu bulunamadı: {0}', - - // CSRF - 'disallowedAction' => 'İstenen eyleme izin verilmiyor.', - - // Uploaded file moving - 'alreadyMoved' => 'Yüklenen dosya zaten taşınmış.', - 'invalidFile' => 'Orijinal dosya geçersiz bir dosya.', - 'moveFailed' => '{0} dosyası {1} ({2}) ye taşınamıyor.', - - 'uploadErrOk' => 'The file uploaded with success.', - 'uploadErrIniSize' => 'The file "%s" exceeds your upload_max_filesize ini directive.', - 'uploadErrFormSize' => 'The file "%s" exceeds the upload limit defined in your form.', - 'uploadErrPartial' => 'The file "%s" was only partially uploaded.', - 'uploadErrNoFile' => 'No file was uploaded.', - 'uploadErrCantWrite' => 'The file "%s" could not be written on disk.', - 'uploadErrNoTmpDir' => 'File could not be uploaded: missing temporary directory.', - 'uploadErrExtension' => 'File upload was stopped by a PHP extension.', - 'uploadErrUnknown' => 'The file "%s" was not uploaded due to an unknown error.', -]; diff --git a/app/Language/tr/Images.php b/app/Language/tr/Images.php deleted file mode 100644 index 5c8378d7..00000000 --- a/app/Language/tr/Images.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Tercihlerinizde bir kaynak resim belirtmelisiniz.', - 'gdRequired' => 'Bu özelliği kullanabilmek için GD resim kütüphanesi gerekli.', - 'gdRequiredForProps' => 'Resmin özelliklerini belirleyebilmek için sunucunuzun GD resim kütüphanesini desteklemesi gerekir.', - 'gifNotSupported' => 'GIF resimleri lisans sınırlamaları nedeniyle genellikle desteklenmez. Bunun yerine JPG veya PNG resimler kullanabilirsiniz.', - 'jpgNotSupported' => 'JPG resimler desteklenmiyor.', - 'pngNotSupported' => 'PNG resimler desteklenmiyor.', - 'unsupportedImageCreate' => 'Sunucunuz bu tür resmi işlemek için gerekli GD fonksiyonunu desteklemiyor.', - 'jpgOrPngRequired' => 'Tercihlerinizde belirttiğiniz resim boyutlandırma protokolü yalnız JPEG veya PNG resim türleriyle çalışır.', - 'rotateUnsupported' => 'Resim döndürme sunucunuz tarafından desteklenmiyor.', - 'libPathInvalid' => 'Resim kütüphanesi yolu doğru değil. Lütfen resim tercihlerinizde doğru yolu belirtiniz. {0, string)', - 'imageProcessFailed' => 'Resim işleme başarısız. Lütfen sunucunuzun seçilen protokolü desteklediğini resim kütüphanesi yolunun doğru olduğunu kontrol ediniz.', - 'rotationAngleRequired' => 'Resmi döndürebilmek için bir döndürme açısı belirtilmeli.', - 'invalidPath' => 'Resmin yolu doğru değil.', - 'copyFailed' => 'Resim kopyalama işlemi başarısız.', - 'missingFont' => 'Kullanılacak bir yazıtipi bulunamadı.', - 'saveFailed' => 'Resim kaydedilemedi. Resim dosyasının ve klasörün yazılabilir olduğundan emin olunuz.', - 'invalidDirection' => 'Çevirme yönü yalnızca `vertical` veya `horizontal` olabilir. Verilen: {0}', - 'exifNotSupported' => 'Reading EXIF verisi okuma işlemi bu PHP kurulumunda desteklenmiyor.', -]; diff --git a/app/Language/tr/Language.php b/app/Language/tr/Language.php deleted file mode 100644 index ba14e3a9..00000000 --- a/app/Language/tr/Language.php +++ /dev/null @@ -1,41 +0,0 @@ - 'Okunacak satır bir karakter kümesi veya dizisi olmalı.' -]; diff --git a/app/Language/tr/Log.php b/app/Language/tr/Log.php deleted file mode 100644 index 58fbe0d4..00000000 --- a/app/Language/tr/Log.php +++ /dev/null @@ -1,41 +0,0 @@ - '{0} geçersiz günlük seviyesi.', -]; diff --git a/app/Language/tr/Migrations.php b/app/Language/tr/Migrations.php deleted file mode 100644 index c3c1f720..00000000 --- a/app/Language/tr/Migrations.php +++ /dev/null @@ -1,80 +0,0 @@ - 'Göç tablosu belirtilmeli.', -// 'invalidType' => 'Geçersiz göç numaralama türü: {0}', - 'disabled' => 'Göçler yüklendi fakat etkinleştirilmedi veya yanlış kuruldu.', - 'notFound' => 'Göç dosyası bulunamadı: ', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => 'Herhangi bir göç dosyası bulunamadı.', - 'gap' => 'Göç kuyruğunda şu sürüm numarası yakınında bir boşluk var: ', - 'classNotFound' => 'Göç sınıfı "%s" bulunamadı.', - 'missingMethod' => 'Göç sınıfının "%s" metodu eksik.', - - // Migration Command - 'migHelpLatest' => "\t\tVeri tabanını son göç sürümüne taşır.", - 'migHelpCurrent' => "\t\tVeri tabınını ayarlarda 'current' (mevcut) olarak belirtilen sürüme taşır.", - 'migHelpVersion' => "\tVeri tabanını {v} şu sürümüne taşır.", - 'migHelpRollback' => "\tTüm göçleri 0 sürümüne indirir.", - 'migHelpRefresh' => "\t\tVeri tabanını yenilemek için tüm göçleri kaldırır ve yeniden çalıştırır.", - 'migHelpSeed' => "\t[name] isimli tohumlayıcıyı çalıştırır.", - 'migCreate' => "\t[name] isimli yeni bir göç oluşturur.", - 'nameMigration' => 'Göç dosyasına bir isim verin.', - 'badCreateName' => 'Bir göç dosyası adı belirtmelisiniz.', - 'writeError' => 'Yazma hatası nedeniyle dosya oluşturulamadı.', - -// 'toLatest' => 'Son sürüme göçülüyor...', - 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => 'Geçersiz sürüm numarası belirtildi.', - 'toVersionPH' => '%s sürümüne göçülüyor...', - 'toVersion' => 'Mevcut sürüme göçülüyor....', - 'rollingBack' => 'Tüm göçler geri alınıyor...', - 'noneFound' => 'Herhangi bir göç bulunamadı.', - 'on' => 'Göçüldü: ', - 'migSeeder' => 'Tohumlayıcı adı', - 'migMissingSeeder' => 'Tohumlayıcı adı belirtmelisiniz.', - 'removed' => 'Geri alınıyor: ', - 'added' => 'Çalıştırılıyor: ', - - 'version' => 'Sürüm', - 'filename' => 'Dosya adı', -]; diff --git a/app/Language/tr/Number.php b/app/Language/tr/Number.php deleted file mode 100644 index c98480cb..00000000 --- a/app/Language/tr/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bayt', - - // don't forget the space in front of these! - 'thousand' => ' bin', - 'million' => ' milyon', - 'billion' => ' milyar', - 'trillion' => ' trilyon', - 'quadrillion' => ' katrilyon', -]; diff --git a/app/Language/tr/Pager.php b/app/Language/tr/Pager.php deleted file mode 100644 index 03c94968..00000000 --- a/app/Language/tr/Pager.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Sayfalama', - 'first' => 'İlk', - 'previous' => 'Önceki', - 'next' => 'Sonraki', - 'last' => 'Son', - 'older' => 'Eski', - 'newer' => 'Yeni', - 'invalidTemplate' => '{0} geçersiz Sayfalama şablonu.', - 'invalidPaginationGroup' => '{0} geçersiz Sayfalama grubu.', -]; diff --git a/app/Language/tr/RESTful.php b/app/Language/tr/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/tr/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/tr/Redirect.php b/app/Language/tr/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/tr/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/tr/Router.php b/app/Language/tr/Router.php deleted file mode 100644 index 7c56d157..00000000 --- a/app/Language/tr/Router.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Parametre istenen türle uyumlu değil.', - 'missingDefaultRoute' => 'Ne görüntüleneceği belirlenemiyor. Rota dosyasında varsayılan rota belirtilmemiş.', -]; diff --git a/app/Language/tr/Session.php b/app/Language/tr/Session.php deleted file mode 100644 index 86ead808..00000000 --- a/app/Language/tr/Session.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Veritabanı Oturum Yöneticisinin çalışması için `sessionSavePath` de bir tablo adı belirtilmeli.', - 'invalidSavePath' => 'Oturum: Ayarlarda belirtilen kayıt yolu "{0}" bir klasör değil, mevcut değil veya oluşturulamıyor.', - 'writeProtectedSavePath' => 'Oturum: Ayarlarda belirtilen kayıt yolu "{0}" PHP işlemi tarafından yazılabilir değil.', - 'emptySavePath' => 'Oturum: Kayıt yolu belirtilmemiş.', - 'invalidSavePathFormat' => 'Oturum: Geçersiz Redis kayıt yolu biçimi: {0}', -]; diff --git a/app/Language/tr/Time.php b/app/Language/tr/Time.php deleted file mode 100644 index eaaf004f..00000000 --- a/app/Language/tr/Time.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Aylar 1 ile 12 arasında olmalı. Verilen: {0}', - 'invalidDay' => 'Günler 1 ile 31 arasında olmalı. Verilen: {0}', - 'invalidOverDay' => 'Günler 1 ile {0} arasında olmalı. Verilen: {1}', - 'invalidHours' => 'Saatler 0 ile 23 arasında olmalı. Verilen: {0}', - 'invalidMinutes' => 'Dakikalar 0 ile 59 arasında olmalı. Verilen: {0}', - 'invalidSeconds' => 'Saniyeler 0 ile 59 arasında olmalı. Verilen: {0}', - 'years' => '{0, plural, =1{# yıl} other{# yıl}}', - 'months' => '{0, plural, =1{# ay} other{# ay}}', - 'weeks' => '{0, plural, =1{# hafta} other{# hafta}}', - 'days' => '{0, plural, =1{# gün} other{# gün}}', - 'hours' => '{0, plural, =1{# saat} other{# saat}}', - 'minutes' => '{0, plural, =1{# dakika} other{# dakika}}', - 'seconds' => '{0, plural, =1{# saniye} other{# saniye}}', - 'ago' => '{0} önce', - 'inFuture' => '{0} de', - 'yesterday' => 'Dün', - 'tomorrow' => 'Yarın', - 'now' => 'Şimdi', -]; diff --git a/app/Language/tr/Validation.php b/app/Language/tr/Validation.php deleted file mode 100644 index 09d400e4..00000000 --- a/app/Language/tr/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - 'Doğrulama ayarlarında kural kümesi tanımlanmamış.', - 'ruleNotFound' => '{0} geçerli bir kural değil.', - 'groupNotFound' => '{0} geçerli bir kural grubu değil.', - 'groupNotArray' => '{0} kural grubu bir dizi olmalı.', - 'invalidTemplate' => '{0} geçerli bir doğrulama şablonu değil.', - - // Rule Messages - 'alpha' => '{field} alanı yalnız alfabetik karakterler içerebilir.', - 'alpha_dash' => '{field} alanı yalnız harf, rakam, alt çizgi ve tire içerebilir.', - 'alpha_numeric' => '{field} alanı yalnız harf ve rakam içerebilir.', - 'alpha_numeric_space' => '{field} alanı yalnız harf, rakam ve boşluk içerebilir.', - 'alpha_space' => '{field} alanı yalnız harf ve boşluk içerebilir.', - 'decimal' => '{field} alanı bir sayı içermeli.', - 'differs' => '{field} alanı {param} alanından farklı olmalı.', - 'equals' => '{field} alanı {param} alanı ile eşit olmalı.', - 'exact_length' => '{field} alanı {param} karakter uzunluğunda olmalı.', - 'greater_than' => '{field} alanı {param} den büyük bir sayı içermeli.', - 'greater_than_equal_to' => '{field} alanı {param} den büyük veya eşit bir sayı içermeli.', - 'in_list' => '{field} alanı şunlardan biri olmalı: {param}.', - 'integer' => '{field} alanı bir tamsayı içermeli.', - 'is_natural' => '{field} alanı yalnız rakam içermeli.', - 'is_natural_no_zero' => '{field} alanı yalnız rakam içermeli ve sıfırdan büyük olmalı.', - 'is_not_unique' => '{field} alanı, veritabanında önceden var olan bir değeri içermeli.', - 'is_unique' => '{field} alanı eşsiz bir değer içermeli.', - 'less_than' => '{field} alanı {param} den küçük bir sayı içermeli.', - 'less_than_equal_to' => '{field} alanı {param} den küçük veya eşit bir sayı içermeli.', - 'matches' => '{field} alanı ile {param} alanı aynı olmalı.', - 'max_length' => '{field} alanı {param} karakterden fazla olamaz.', - 'min_length' => '{field} alanı en az {param} karakter olmalı.', - 'not_equals' => '{field} alanı {param} alanı ile eşit olmamalı.', - 'numeric' => '{field} alanı yalnız sayı içermeli.', - 'regex_match' => '{field} alanı doğru biçimde değil.', - 'required' => '{field} alanı gerekli.', - 'required_with' => '{param} olduğunda {field} alanı da olmalı.', - 'required_without' => '{param} olmadığında {field} alanı gerekli.', - 'timezone' => '{field} alanı geçerli bir saat dilimi olmalı.', - 'valid_base64' => '{field} alanı geçerli bir base64 dizisi olmalı.', - 'valid_email' => '{field} alanı geçerli bir email adresi içermeli.', - 'valid_emails' => '{field} alanı geçerli email adresleri içermeli.', - 'valid_ip' => '{field} alanı geçerli bir IP içermeli.', - 'valid_url' => '{field} alanı geçerli bir URL içermeli.', - 'valid_date' => '{field} alanı geçerli bir tarih içermeli.', - - // Credit Cards - 'valid_cc_num' => '{field} geçerli bir kredi kartı numarası değil.', - - // Files - 'uploaded' => '{field} geçerli bir yüklenen dosya değil.', - 'max_size' => '{field} çok büyük dosya.', - 'is_image' => '{field} geçerli bir yüklenen resim dosyası değil.', - 'mime_in' => '{field} alanında geçerli bir dosya türü yok.', - 'ext_in' => '{field} alanında geçerli bir dosya uzantısı yok.', - 'max_dims' => '{field} bir resim değil veya çok geniş ya da uzun.', -]; diff --git a/app/Language/tr/View.php b/app/Language/tr/View.php deleted file mode 100644 index a700428f..00000000 --- a/app/Language/tr/View.php +++ /dev/null @@ -1,45 +0,0 @@ - '{class}::{method} geçerli bir yöntem değil.', - 'missingCellParameters' => '{class}::{method} yönteminin parametresi yok.', - 'invalidCellParameter' => '{0} geçerli bir parametre adı yok.', - 'noCellClass' => 'Görüntü hücre sınıfı belirtilmemiş.', - 'invalidCellClass' => 'Görüntü hücre sınıfı bulunamıyor: {0}.', - 'tagSyntaxError' => 'Çözümleyici etiketlerinde yazım hatası var: {0}', -]; diff --git a/app/Language/uk/CLI.php b/app/Language/uk/CLI.php deleted file mode 100644 index 775b52eb..00000000 --- a/app/Language/uk/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Команду "{0}" не знайдено.', - 'helpUsage' => 'Використання:', - 'helpDescription' => 'Опис:', - 'helpOptions' => 'Опції:', - 'helpArguments' => 'Аргументи:', - 'invalidColor' => 'Неприпустимий {0} колір: {1}.', -]; diff --git a/app/Language/uk/Cache.php b/app/Language/uk/Cache.php deleted file mode 100644 index 774a9e48..00000000 --- a/app/Language/uk/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Не вдається записати кеш в {0}', - 'invalidHandlers' => 'Змінна $validHandlers в конфігурації кешу повинна містити масив.', - 'noBackup' => 'В конфігурації кешування не вказаний обробник $backupHandler.', - 'handlerNotFound' => 'В конфігурації кешування вказаний недопустимий обробник.', -]; diff --git a/app/Language/uk/Cast.php b/app/Language/uk/Cast.php deleted file mode 100644 index cdb7cf37..00000000 --- a/app/Language/uk/Cast.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Перевищена максимальна глибина стеку.', - 'jsonErrorStateMismatch' => 'Недостатній потік чи невідповідність режимів.', - 'jsonErrorCtrlChar' => 'Знайдено неочікуваний управляючий символ.', - 'jsonErrorSyntax' => 'В JSON знайдено синтаксичну помилку.', - 'jsonErrorUtf8' => 'Можливо ваш JSON закодовано не в UTF-8.', - 'jsonErrorUnknown' => 'Невідома помилка.', -]; diff --git a/app/Language/uk/Core.php b/app/Language/uk/Core.php deleted file mode 100644 index dd004680..00000000 --- a/app/Language/uk/Core.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Трапилась помилка при спробі замінити файл ({0}). Будь ласка, переконайтесь, що ваш каталог файлів доступний для запису.', - 'enabledZlibOutputCompression' => 'INI директива zlib.output_compression увімкнута. Це не буде працювати бездоганно із вихідними буферами.', - 'invalidFile' => 'Неприпустимий файл: {0}', - 'missingExtension' => '{0} розширення не завантажується.', - 'noHandlers' => '{0} повинен мати не менш ніж один обробник.', -]; diff --git a/app/Language/uk/Database.php b/app/Language/uk/Database.php deleted file mode 100644 index 5474202c..00000000 --- a/app/Language/uk/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} не є допустимою функцією зворотного виклику моделі.', - 'invalidArgument' => 'Слід вказати допустиме значення {0}.', - 'invalidAllowedFields' => 'Мають бути вказані допустимі поля для моделі: {0}', - 'emptyDataset' => 'Немає даних в {0}.', - 'failGetFieldData' => 'Не вдається отримати дані поля з бази даних.', - 'failGetIndexData' => 'Не вдається отримати дані індексу з бази даних.', - 'failGetForeignKeyData' => 'Не вдається отримати дані зовнішнього ключа з бази даних.', - 'parseStringFail' => 'Не вдається здійснити парсинг ключа.', - 'featureUnavailable' => 'Ця функція недоступна для поточної бази даних.', - 'tableNotFound' => 'Таблиця "{0}" відсутня в поточній базі даних.', - 'noPrimaryKey' => 'Клас моделі "{0}" не має первинного ключа.', - 'noDateFormat' => 'Клас моделі "{0}" не має допустимого формату дати.', - 'fieldNotExists' => 'Поле "{0}" відсутнє.', - 'forEmptyInputGiven' => 'Для поля "{0}" задано пустий оператор.', - 'forFindColumnHaveMultipleColumns' => 'Тільки один стовпець може бути в Назві стовпця.', -]; diff --git a/app/Language/uk/Email.php b/app/Language/uk/Email.php deleted file mode 100644 index 605cdf85..00000000 --- a/app/Language/uk/Email.php +++ /dev/null @@ -1,60 +0,0 @@ - 'В метод перевірки електронної пошти мусить передаватися масив.', - 'invalidAddress' => 'Некорректна адреса електронної пошти: {0}', - 'attachmentMissing' => 'Не вдається знайти наступне вкладення: {0}', - 'attachmentUnreadable' => 'Не вдається відкрити це вкладення: {0}', - 'noFrom' => 'Не вдається відправити пошту без заголовку "From".', - 'noRecipients' => 'Слід вказати отримувача "To".', - 'sendFailurePHPMail' => 'Неможливо відправити лист за допомогою PHP_Mail().', - 'sendFailureSendmail' => 'Неможливо відправити лист за допомогою PHP_SendMail().', - 'sendFailureSmtp' => 'Неможливо відправити лист за допомогою PHP_SMTP().', - 'sent' => 'Ваше повідомлення відправлено по протоколу: {0}', - 'noSocket' => 'Не вдається відкрити сокет для PHP_SendMail(). Будь ласка, перевірте налаштування.', - 'noHostname' => 'Ви не вказали ім’я хосту SMTP.', - 'SMTPError' => 'Трапилась така помилка SMTP: {0}', - 'noSMTPAuth' => 'Помилка: Слід вказати логін та пароль SMTP.', - 'failedSMTPLogin' => 'Не вдалось виконати команду AUTH LOGIN. Помилка: {0}', - 'SMTPAuthUsername' => 'Не вдалося автентифікувати ім’я користувача. Помилка: {0}', - 'SMTPAuthPassword' => 'Не вдалось автентифікувати пароль. Помилка: {0}', - 'SMTPDataFailure' => 'Не вдалось відправити дані: {0}', - 'exitStatus' => 'Статус-код завершення: {0}', -]; diff --git a/app/Language/uk/Encryption.php b/app/Language/uk/Encryption.php deleted file mode 100644 index 4c974db8..00000000 --- a/app/Language/uk/Encryption.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Потрібно підключити драйвер шифрування.', - 'noHandlerAvailable' => 'Не вдається знайти доступний обробник шифрування {0}.', - 'unKnownHandler' => 'Обробник "{0}" неможливо налаштувати.', - 'starterKeyNeeded' => 'Для шифрування слід вказати секретний ключ', - 'authenticationFailed' => 'Помилка: Автентифікація не вдалась.', - 'encryptionFailed' => 'Збій шифрування.', -]; diff --git a/app/Language/uk/Entity.php b/app/Language/uk/Entity.php deleted file mode 100644 index f7a81731..00000000 --- a/app/Language/uk/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Спроба доступу до відсутньої властивості {0} з {1}', -]; diff --git a/app/Language/uk/Fabricator.php b/app/Language/uk/Fabricator.php deleted file mode 100644 index 1a0c7664..00000000 --- a/app/Language/uk/Fabricator.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Недійсна модель, надана для виготовлення.', - 'missingFormatters' => 'Не визначені допустимі форматування.', -]; diff --git a/app/Language/uk/Files.php b/app/Language/uk/Files.php deleted file mode 100644 index 4ccc7a5c..00000000 --- a/app/Language/uk/Files.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Файл {0} не знайдено.', - 'cannotMove' => 'Не вдалось переместити файл з {0} в {1}. ({2})', -]; diff --git a/app/Language/uk/Filters.php b/app/Language/uk/Filters.php deleted file mode 100644 index 7391457b..00000000 --- a/app/Language/uk/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} фільтр мусить мати відповідний аліас.', - 'incorrectInterface' => '{0} слід реалізувати CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/uk/Format.php b/app/Language/uk/Format.php deleted file mode 100644 index d3f62935..00000000 --- a/app/Language/uk/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Не вдалось розібрати рядок в JSON, Помилка: "{0}".', - 'missingExtension' => 'Розширення SimpleXML мусить бути для форматування XML.', -]; diff --git a/app/Language/uk/HTTP.php b/app/Language/uk/HTTP.php deleted file mode 100644 index 47eb0f50..00000000 --- a/app/Language/uk/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'Маєте включити бібліотеку CURL для використання класу CURLRequest.', - 'invalidSSLKey' => 'Не вдається встановити ключ SSL. {0} не є дійсним файлом.', - 'sslCertNotFound' => 'SSL-сертифікат не знайдено в {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} не є дійсним типом погодження. Має бути один із: media, charset, encoding, language.', - - // Message - 'invalidHTTPProtocol' => 'Некорректна версія протоколу HTTP. Має бути одне з: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Слід надати масив підтримуваних значень для всіх перемовин.', - - // RedirectResponse - 'invalidRoute' => '{0} маршрут не буде знайдено при зворотній маршрутизації.', - - // DownloadResponse - 'cannotSetBinary' => 'Двійковий файл не може бути шляхом до файлу.', - 'cannotSetFilepath' => 'При встановленні двійкового файлу не не вдається встановити шлях: {0}.', - 'notFoundDownloadSource' => 'Не знайдено основне джерело завантаження.', - 'cannotSetCache' => 'При завантаженні кешування не підтримується.', - 'cannotSetStatusCode' => 'Не можливо змінити код стану завантаження. Код: {0}, Причина: {1}.', - - // Response - 'missingResponseStatus' => 'У відповіді HTTP відсутній код стану.', - 'invalidStatusCode' => '{0} не є допустимим кодом стану.', - 'unknownStatusCode' => 'Невідомий HTTP код стану, наданий без повідомлення: {0}.', - - // URI - 'cannotParseURI' => 'Неможливо розібрати URI: {0}', - 'segmentOutOfRange' => 'Сегмент URI запиту поза діапазоном: {0}', - 'invalidPort' => 'Вказаний порт мусить бути між 0 та 65535. Вказано: {0}', - 'malformedQueryString' => 'Рядки запиту можуть бути без фрагментів URI.', - - // Page Not Found - 'pageNotFound' => 'Сторінку не знайдено.', - 'emptyController' => 'Не вказано контролер.', - 'controllerNotFound' => 'Контролер чи його метод не знайдено: {0}::{1}', - 'methodNotFound' => 'Метод контролеру не знайдено: {0}', - - // CSRF - 'disallowedAction' => 'Дія, яку ви вимагали, заборонена.', - - // Uploaded file moving - 'alreadyMoved' => 'Завантажений файл вже перенесено.', - 'invalidFile' => 'Початковий файл не є допустимим файлом.', - 'moveFailed' => 'Не вдалось переместити файл з {0} в {1}. ({2})', - - 'uploadErrOk' => 'Файл успішно завантажено!', - 'uploadErrIniSize' => 'Ваш файл "%s" перевищує розмір, вказаний в директиві upload_max_filesize.', - 'uploadErrFormSize' => 'Файл "%s" перевищує ліміт завантаження, встановлений у Вашій формі.', - 'uploadErrPartial' => 'Файл "%s" було завантажено частково.', - 'uploadErrNoFile' => 'Файл не завантажився.', - 'uploadErrCantWrite' => 'Не вдалося записати на диск файл "%s".', - 'uploadErrNoTmpDir' => 'Не вдалося завантажити файл: Відсутній тимчасовий каталог.', - 'uploadErrExtension' => 'Завантаження файлу було зупинено розширенням PHP.', - 'uploadErrUnknown' => 'Файл "%s" не завантажився через невідому помилку.', -]; diff --git a/app/Language/uk/Images.php b/app/Language/uk/Images.php deleted file mode 100644 index d564ad36..00000000 --- a/app/Language/uk/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'В налаштуваннях слід вказати початкове зображення.', - 'gdRequired' => 'Використання цієї функції вимагає библиотеку зображень GD.', - 'gdRequiredForProps' => 'Ваш сервер мусить підтримувати бібліотеку зображень GD для визначення властивостей зображення.', - 'gifNotSupported' => 'Зображення GIF часто не підтримується через ліцензійні обмеження.', - 'jpgNotSupported' => 'Зображення JPG не підтримується.', - 'pngNotSupported' => 'Зображення PNG не підтримується.', - 'fileNotSupported' => 'Тип зображення наданого файлу не підтримується.', - 'unsupportedImageCreate' => 'Ваш сервер не підтримує функцию GD, необхідну для обробки цього типу зображень.', - 'jpgOrPngRequired' => 'Протокол зміни розміру зображення, вказаний в налаштуваннях, працює тільки з типами зображень JPEG або PNG.', - 'rotateUnsupported' => 'Поворот зображення не підтримується Вашим сервером.', - 'libPathInvalid' => 'Неправильний шлях до біблиотеки зображень.. {0, string)', - 'imageProcessFailed' => 'Не вдалось опрацювати зображення.', - 'rotationAngleRequired' => 'Для повороту зображення слід встановити кут повороту.', - 'invalidPath' => 'Некорректний шлях до зображення.', - 'copyFailed' => 'Не вдалось скопіювати зображення.', - 'missingFont' => 'Не вдається знайти шрифт для використання.', - 'saveFailed' => 'Не вдалось зберегти зображення.', - 'invalidDirection' => 'Напрямок поворуту може бути тільки "вертикально" або "горизонтально". Вказано: {0}.', - 'exifNotSupported' => 'Читання даних EXIF не підтримується Вашим PHP.', -]; diff --git a/app/Language/uk/Language.php b/app/Language/uk/Language.php deleted file mode 100644 index d9c00677..00000000 --- a/app/Language/uk/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Отриманий рядок повинен бути рядком або масивом рядків.', -]; diff --git a/app/Language/uk/Log.php b/app/Language/uk/Log.php deleted file mode 100644 index a5627ae4..00000000 --- a/app/Language/uk/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} - некорректний рівень ведення журналу.', -]; diff --git a/app/Language/uk/Migrations.php b/app/Language/uk/Migrations.php deleted file mode 100644 index 54eaa59e..00000000 --- a/app/Language/uk/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Потрібно встановити таблицю міграцій.', - 'disabled' => 'Міграції завантажено, але вони відключені або налаштовані неправильно.', - 'notFound' => 'Файл міграції не знайдено: ', - 'batchNotFound' => 'Цільовий пакет не знайдено: ', - 'empty' => 'Файлів міграції не знайдено.', - 'gap' => 'У послідовності міграції біля номера версії є розрив: ', - 'classNotFound' => 'Не вдалося знайти клас міграції "%s".', - 'missingMethod' => 'У класі міграції відсутній метод "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tПереносить дані про останню доступну міграцію.", - 'migHelpCurrent' => "\t\tПереносить базу даних у версію, встановлену як 'поточну' в конфігурації.", - 'migHelpVersion' => "\tПеренос бази даних у версію {v}.", - 'migHelpRollback' => "\tЗапуск всіх міграцій 'вниз' до версії 0.", - 'migHelpRefresh' => "\t\tВидаляє і повторно запускає всі міграції для оновлення баз даних.", - 'migHelpSeed' => "\tЗапускає сівалку з іменем [name].", - 'migCreate' => "\tСтворює нову міграцію з іменем [name].", - 'nameMigration' => 'Ім’я файлу міграції', - 'badCreateName' => 'Слід вказати ім’я файлу міграції.', - 'writeError' => 'Помилка при спробі створити файл.', - 'migNumberError' => 'Номер міграції має бути з трьох цифр без пробілів.', - 'rollBackConfirm' => 'Ви впевнені, що хочете відкотитися назад?', - 'refreshConfirm' => 'Ви впевнені, що хочете оновити?', - - 'latest' => 'Запуск всіх нових міграцій...', - 'generalFault' => 'Міграція не вдалась !', - 'migInvalidVersion' => 'Вказано некорректний номер версії.', - 'toVersionPH' => 'Перехід на версію %s...', - 'toVersion' => 'Перехід до поточної версії...', - 'rollingBack' => 'Відкат міграції в: ', - 'noneFound' => 'Міграцій не знайдено.', - 'on' => 'Міграція на: ', - 'migSeeder' => 'Ім’я сівалки', - 'migMissingSeeder' => 'Слід вказати ім’я сівалки.', - 'removed' => 'Відкат: ', - 'added' => 'Запуск: ', - - 'version' => 'Версія', - 'filename' => 'Ім’я файлу', -]; diff --git a/app/Language/uk/Number.php b/app/Language/uk/Number.php deleted file mode 100644 index a5a537fe..00000000 --- a/app/Language/uk/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'ТБ', - 'gigabyteAbbr' => 'ГБ', - 'megabyteAbbr' => 'МБ', - 'kilobyteAbbr' => 'КБ', - 'bytes' => 'Байтів', - - // don't forget the space in front of these! - 'thousand' => ' тисяча', - 'million' => ' мільйон', - 'billion' => ' мільярд', - 'trillion' => ' трильйон', - 'quadrillion' => ' квадрильйон', -]; diff --git a/app/Language/uk/Pager.php b/app/Language/uk/Pager.php deleted file mode 100644 index 3541d190..00000000 --- a/app/Language/uk/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Паґінаація', - 'first' => 'Перша', - 'previous' => 'Попередня', - 'next' => 'Наступна', - 'last' => 'Остання', - 'older' => 'Старіша', - 'newer' => 'Новіша', - 'invalidTemplate' => '{0} недопустимий шаблон пейджера.', - 'invalidPaginationGroup' => '{0} недопустима група паґінації.', -]; diff --git a/app/Language/uk/RESTful.php b/app/Language/uk/RESTful.php deleted file mode 100644 index aedb698f..00000000 --- a/app/Language/uk/RESTful.php +++ /dev/null @@ -1,42 +0,0 @@ - '"{0}" дія не реалізована.', -]; diff --git a/app/Language/uk/Redirect.php b/app/Language/uk/Redirect.php deleted file mode 100644 index 3037739b..00000000 --- a/app/Language/uk/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Не вдалось перенаправити на "{0}". Код помилки: "{1}"', -]; diff --git a/app/Language/uk/Router.php b/app/Language/uk/Router.php deleted file mode 100644 index c7a441f1..00000000 --- a/app/Language/uk/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Параметр не відповідає очікуваному типу.', - 'missingDefaultRoute' => 'Неможливо визначити, що слід відображати. Маршрут за замовчуванням не вказаний у файлі маршрутизації.', -]; diff --git a/app/Language/uk/Session.php b/app/Language/uk/Session.php deleted file mode 100644 index 522addef..00000000 --- a/app/Language/uk/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` повинно бути назвою таблиці для роботи сесій з базою даних.', - 'invalidSavePath' => 'Помилка: Налаштований шлях збереження "{0}" не є каталогом, не існує або не може бути створений.', - 'writeProtectedSavePath' => 'Помилка: Налаштований шлях збереження "{0}" не доступний для запису процесом PHP.', - 'emptySavePath' => 'Помилка: Не налаштований шлях збереження сесій.', - 'invalidSavePathFormat' => 'Помилка: Недопустимий формат шляху збереження для Redis: {0}.', -]; diff --git a/app/Language/uk/Time.php b/app/Language/uk/Time.php deleted file mode 100644 index 00c03e88..00000000 --- a/app/Language/uk/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Номер місяця може бути між 1 та 12. Вказано: {0}', - 'invalidDay' => 'Номер дня може бути між 1 та 31. Вказано: {0}', - 'invalidOverDay' => 'Дні повинні бути від 1 до {0}. Вказано: {1}.', - 'invalidHours' => 'Години можуть бути між 0 та 23. Вказано: {0}.', - 'invalidMinutes' => 'Хвилини можуть бути між 0 та 59. Вказано: {0}.', - 'invalidSeconds' => 'Секунди можуть бути між 0 та 59. Вказано: {0}.', - 'years' => '{0, plural, =1{# рік} other{# років}}', - 'months' => '{0, plural, =1{# місяць} other{# місяців}}', - 'weeks' => '{0, plural, =1{# тиждень} other{# тижнів}}', - 'days' => '{0, plural, =1{# день} other{# днів}}', - 'hours' => '{0, plural, =1{# година} other{# годин}}', - 'minutes' => '{0, plural, =1{# хвилина} other{# хвилин}}', - 'seconds' => '{0, plural, =1{# секунда} other{# секунд}}', - 'ago' => '{0} тому', - 'inFuture' => 'в {0}', - 'yesterday' => 'Вчора', - 'tomorrow' => 'Завтра', - 'now' => 'Прямо зараз', -]; diff --git a/app/Language/uk/Validation.php b/app/Language/uk/Validation.php deleted file mode 100644 index a0035d2a..00000000 --- a/app/Language/uk/Validation.php +++ /dev/null @@ -1,98 +0,0 @@ - 'Набори правил не вказано в налаштуваннях перевірки.', - 'ruleNotFound' => '{0} не є дійсним правилом', - 'groupNotFound' => '{0} не є групою правил перевірки.', - 'groupNotArray' => '{0} група правил повинна бути масивом.', - 'invalidTemplate' => '{0} не є дійсним шаблоном перевірки.', - - // Rule Messages - 'alpha' => 'Поле {field} може містити лише алфавітні символи.', - 'alpha_dash' => 'Поле {field} може містити лише буквено-цифрові символи, символи підкреслення та тире.', - 'alpha_numeric' => 'Поле {field} може містити лише буквено-цифрові символи.', - 'alpha_numeric_punct' => 'Поле {field} може містити лише буквено-цифрові символи, пробіли та ~! # $% & * - _ + = | .: символи.', - 'alpha_numeric_space' => 'Поле {field} може містити лише буквено-цифрові та пробільні символи.', - 'alpha_space' => 'Поле {field} може містити лише алфавітні символи та пробіли.', - 'decimal' => 'Поле {field} має містити десяткове число.', - 'differs' => 'Поле {field} повинно відрізнятися від поля {param}.', - 'equals' => 'Поле {field} повинно співпадати з полем {param}.', - 'exact_length' => 'Поле {field} повинно мати довжину {param} символів.', - 'greater_than' => 'Поле {field} повинно мати число, більше від {param}.', - 'greater_than_equal_to' => 'Поле {field} повинно мати число, не менше ніж {param}.', - 'hex' => 'Поле {field} може містити лише шістнадцяткові символи.', - 'in_list' => 'Поле {field} має бути одним із: {param}.', - 'integer' => 'Поле {field} має містити ціле число.', - 'is_natural' => 'Поле {field} має містити лише цифри.', - 'is_natural_no_zero' => 'Поле {field} має містити лише цифри і має бути більше нуля.', - 'is_not_unique' => 'Поле {field} має містити раніше існуюче значення в базі даних.', - 'is_unique' => 'Поле {field} має містити унікальне значення.', - 'less_than' => 'Поле {field} має містити число менше {param}.', - 'less_than_equal_to' => 'Поле {field} має містити число менше або рівне {param}.', - 'matches' => 'Поле {field} не відповідає полю {param}.', - 'max_length' => 'Довжина поля {field} не може перевищувати {param} символів.', - 'min_length' => 'Довжина поля {field} має містити не менше {param} символів.', - 'not_equals' => 'Поле {field} не може бути: {param}.', - 'numeric' => 'Поле {field} має містити лише цифри.', - 'regex_match' => 'Поле {field} має неправильний формат.', - 'required' => 'Поле {field} є обов’язковим.', - 'required_with' => 'Поле {field} є обов’язковим, якщо присутній параметр {param}.', - 'required_without' => 'Поле {field} є обов’язковим, якщо параметр {param} відсутній.', - 'string' => 'Поле {field} має бути дійсним рядком.', - 'timezone' => 'Поле {field} має бути дійсним часовим поясом.', - 'valid_base64' => 'Поле {field} має бути дійсним рядком base64.', - 'valid_email' => 'Поле {field} має містити дійсну адресу електронної пошти.', - 'valid_emails' => 'Поле {field} має містити всі дійсні адреси електронної пошти.', - 'valid_ip' => 'Поле {field} має містити дійсну IP-адресу.', - 'valid_url' => 'Поле {field} має містити дійсну URL-адресу.', - 'valid_date' => 'Поле {field} має містити дійсну дату.', - - // Credit Cards - 'valid_cc_num' => 'Поле {field} має містити дійсний номер кредитної картки.', - - // Files - 'uploaded' => 'Поле {field} не містить файл.', - 'max_size' => 'Поле {field} містить занадто великий файл.', - 'is_image' => 'Поле {field} повинно містити файл зображення.', - 'mime_in' => 'Поле {field} повинно містити допустимий тип файлу.', - 'ext_in' => 'Поле {field} повинно містити допустиме розширення файлу.', - 'max_dims' => 'Поле {field} не містить зображення, або це зображення занадто широке чи високе.', -]; diff --git a/app/Language/uk/View.php b/app/Language/uk/View.php deleted file mode 100644 index 58cf2fa6..00000000 --- a/app/Language/uk/View.php +++ /dev/null @@ -1,47 +0,0 @@ - '{class}::{method} неприпустимий метод.', - 'missingCellParameters' => '{class}::{method} не має параметрів.', - 'invalidCellParameter' => '{0}неприпустиме ім’я параметра.', - 'noCellClass' => 'Не вказано клас комірки виду.', - 'invalidCellClass' => 'Не вдається знайти клас {0} комірок виду.', - 'tagSyntaxError' => 'Маєте синтаксичну помилку в теґах парсеру: {0}', -]; diff --git a/app/Language/vi/CLI.php b/app/Language/vi/CLI.php deleted file mode 100644 index abd3a34c..00000000 --- a/app/Language/vi/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Lệnh "{0}" không tìm thấy.', - 'helpUsage' => 'Sử dụng:', - 'helpDescription' => 'Mô tả:', - 'helpOptions' => 'Tùy chọn:', - 'helpArguments' => 'Thuộc tính:', - 'invalidColor' => 'Màu {0} không hợp lệ: {1}.', -]; diff --git a/app/Language/vi/Cache.php b/app/Language/vi/Cache.php deleted file mode 100644 index 25d68303..00000000 --- a/app/Language/vi/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Bộ nhớ cache không thể ghi vào {0}', - 'invalidHandlers' => 'Cấu hình bộ đệm phải có một mảng $validHandlers.', - 'noBackup' => 'Cấu hình bộ đệm phải có bộ xử lý và backupHandler.', - 'handlerNotFound' => 'Cấu hình bộ đệm có trình xử lý không hợp lệ hoặc trình xử lý sao lưu được chỉ định.', -]; diff --git a/app/Language/vi/Cast.php b/app/Language/vi/Cast.php deleted file mode 100644 index c1397477..00000000 --- a/app/Language/vi/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Vượt quá độ sâu xếp chồng tối đa.', - 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', - 'jsonErrorCtrlChar' => 'Tìm thấy ký tự kiểm soát không mong muốn', - 'jsonErrorSyntax' => 'Lỗi cú pháp, lỗi định dạng JSON.', - 'jsonErrorUtf8' => 'Các ký tự UTF-8 không đúng định dạng, có thể được mã hóa không chính xác', - 'jsonErrorUnknown' => 'Không thể nhận biết lỗi', -]; diff --git a/app/Language/vi/Core.php b/app/Language/vi/Core.php deleted file mode 100644 index cacc8888..00000000 --- a/app/Language/vi/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Tập tin không hợp lệ:{0}', - 'copyError' => 'Đã xảy ra lỗi khi cố gắng thay thế tệp ({0}). Hãy chắc chắn rằng thư mục tập tin của bạn có quyền ghi.', - 'missingExtension' => '{0} tiện ích mở rộng không được tải.', - 'noHandlers' => '{0} phải cung cấp ít nhất một Handler.', -]; diff --git a/app/Language/vi/Database.php b/app/Language/vi/Database.php deleted file mode 100644 index 92228ee8..00000000 --- a/app/Language/vi/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} không phải là một phản hồi Model Event hợp lệ.', - 'invalidArgument' => 'Bạn phải cung cấp {0} hợp lệ.', - 'invalidAllowedFields' => 'Các trường được phép phải được chỉ định cho mô hình: {0}', - 'emptyDataset' => 'Không có dữ liệu cho {0}.', - 'failGetFieldData' => 'Không thể lấy dữ liệu thực địa từ cơ sở dữ liệu.', - 'failGetIndexData' => 'Không thể lấy dữ liệu chỉ mục từ cơ sở dữ liệu.', - 'failGetForeignKeyData' => 'Không thể lấy dữ liệu khóa ngoại từ cơ sở dữ liệu.', - 'parseStringFail' => 'Phân tích chuỗi khóa thất bại.', - 'featureUnavailable' => 'Tính năng này không có sẵn cho cơ sở dữ liệu bạn đang sử dụng.', - 'tableNotFound' => 'Bảng `{0}` không được tìm thấy trong cơ sở dữ liệu hiện tại.', - 'noPrimaryKey' => '`{0}` class model không chỉ định Khóa chính.', - 'noDateFormat' => '`{0}` class model không có dateFormat hợp lệ.', - 'fieldNotExists' => 'Trường `{0}` không tìm thấy.', - 'forEmptyInputGiven' => 'Câu lệnh rỗng được đưa ra cho trường `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Chỉ một cột được cho phép trong tên cột.', -]; diff --git a/app/Language/vi/Email.php b/app/Language/vi/Email.php deleted file mode 100644 index 5a32263b..00000000 --- a/app/Language/vi/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Phương thức xác thực email phải được thông qua một mảng.', - 'invalidAddress' => 'Địa chỉ email không hợp lệ: {0}', - 'attachmentMissing' => 'Không thể định vị tệp đính kèm email sau: {0}', - 'attachmentUnreadable' => 'Không thể mở tệp đính kèm này: {0}', - 'noFrom' => 'Không thể gửi thư mà không có "From" header.', - 'noRecipients' => 'Bạn phải bao gồm người nhận: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'Không thể gửi email bằng PHP mail(). Máy chủ của bạn có thể không được cấu hình để gửi thư bằng phương thức này.', - 'sendFailureSendmail' => 'Không thể gửi email bằng PHP Sendmail. Máy chủ của bạn có thể không được cấu hình để gửi thư bằng phương thức này.', - 'sendFailureSmtp' => 'Không thể gửi email bằng PHP SMTP. Máy chủ của bạn có thể không được cấu hình để gửi thư bằng phương thức này.', - 'sent' => 'Tin nhắn của bạn đã được gửi thành công bằng giao thức sau: {0}', - 'noSocket' => 'Không thể mở ổ cắm cho Sendmail. Vui lòng kiểm tra cài đặt.', - 'noHostname' => 'Bạn đã không chỉ định tên máy chủ SMTP.', - 'SMTPError' => 'Đã xảy ra lỗi SMTP sau đây: {0}', - 'noSMTPAuth' => 'Lỗi: Bạn phải chỉ định tên người dùng và mật khẩu SMTP.', - 'failedSMTPLogin' => 'Không thể gửi lệnh AUTH LOGIN. Lỗi: {0}', - 'SMTPAuthUsername' => 'Không thể xác thực tên người dùng. Lỗi: {0}', - 'SMTPAuthPassword' => 'Không thể xác thực mật khẩu. Lỗi: {0}', - 'SMTPDataFailure' => 'Không thể gửi dữ liệu: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; diff --git a/app/Language/vi/Encryption.php b/app/Language/vi/Encryption.php deleted file mode 100644 index 53f6bf87..00000000 --- a/app/Language/vi/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Không tìm thấy ổ đĩa yêu cầu, Mr XuanDung38 rất thất vọng!', - 'noHandlerAvailable' => 'Không thể tìm thấy trình xử lý mã hóa {0}.', - 'unKnownHandler' => '"{0}" không thể cấu hình.', - 'starterKeyNeeded' => 'Trình mã hoá cần một khóa khởi động.', - 'authenticationFailed' => 'Giải mã: xác thực thất bại.', - 'encryptionFailed' => 'Mã hóa thất bại.', -]; diff --git a/app/Language/vi/Entity.php b/app/Language/vi/Entity.php deleted file mode 100644 index b825b413..00000000 --- a/app/Language/vi/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Đang cố gắng truy cập thuộc tính không tồn tại {0} trong số {1}', -]; diff --git a/app/Language/vi/Files.php b/app/Language/vi/Files.php deleted file mode 100644 index cb81011d..00000000 --- a/app/Language/vi/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Không tìm thấy tệp: {0} ', - 'cannotMove' => 'Không thể di chuyển tệp {0} sang {1} ({2})', -]; diff --git a/app/Language/vi/Filters.php b/app/Language/vi/Filters.php deleted file mode 100644 index e669e0d6..00000000 --- a/app/Language/vi/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} bộ lọc phải có một bí danh phù hợp được xác định.', - 'incorrectInterface' => '{0} phải implement CodeIgniter\Filters\FilterInterface.', -]; diff --git a/app/Language/vi/Format.php b/app/Language/vi/Format.php deleted file mode 100644 index 13686362..00000000 --- a/app/Language/vi/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Không thể phân tích chuỗi json, lỗi: "{0}".', - 'missingExtension' => 'Phần mở rộng SimpleXML là bắt buộc để định dạng XML.', -]; diff --git a/app/Language/vi/HTTP.php b/app/Language/vi/HTTP.php deleted file mode 100644 index 15d58906..00000000 --- a/app/Language/vi/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - 'CURL phải được kích hoạt để sử dụng class CURLRequest.', - 'invalidSSLKey' => 'Không thể đặt Khóa SSL. {0} không phải là một tệp hợp lệ.', - 'sslCertNotFound' => 'Chứng chỉ SSL không được tìm thấy tại: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} không phải là một loại trao đổi hợp lệ. Loại của nó chỉ có thể là một trong những thứ sau đây: phương tiện (media), bảng mã (charset), mã hóa (encoding) hoặc ngôn ngữ (language).', - - // Message - 'invalidHTTPProtocol' => 'Phiên bản giao thức HTTP không hợp lệ. Phải là một trong: {0}', - - // Negotiate - 'emptySupportedNegotiations' => 'Bạn phải cung cấp một loạt các giá trị được hỗ trợ cho tất cả các Cuộc đàm phán.', - - // RedirectResponse - 'invalidRoute' => '{0} route không thể được tìm thấy trong khi định tuyến ngược.', - - // DownloadResponse - 'cannotSetBinary' => 'Cài đặt đường dẫn tập tin không thể đặt binary.', - 'cannotSetFilepath' => 'Cài đặt binary không thể đặt đường dẫn tệp: {0}', - 'notFoundDownloadSource' => 'Không tìm thấy nguồn tải nội dung.', - 'cannotSetCache' => 'Nó không hỗ trợ bộ nhớ đệm để tải xuống.', - 'cannotSetStatusCode' => 'Nó không hỗ trợ thay đổi mã trạng thái để tải xuống. mã: {0}, lý do: {1}', - - // Response - 'missingResponseStatus' => 'Phản hồi HTTP thiếu mã trạng thái', - 'invalidStatusCode' => '{0} trả về mã trạng thái HTTP không hợp lệ', - 'unknownStatusCode' => 'Không có mã trạng thái HTTP nào được cung cấp hoặc không xác định: {0}', - - // URI - 'cannotParseURI' => 'Không thể phân tích cú pháp URI: {0}', - 'segmentOutOfRange' => 'URI được yêu cầu nằm ngoài phạm vi: {0}', - 'invalidPort' => 'Số cổng phải nằm trong khoảng từ 0 đến 65535, hiện tại là: {0}', - 'malformedQueryString' => 'Chuỗi truy vấn có thể không chứa các đoạn URI.', - - // Page Not Found - 'pageNotFound' => 'Các trang được chỉ định không được tìm thấy.', - 'emptyController' => 'Không có Controler được chỉ định. ', - 'controllerNotFound' => 'Không thể tìm thấy Controler hoặc phương thức:{0}::{1}', - 'methodNotFound' => 'Không có cách nào để tìm Controler: {0}', - - // CSRF - 'disallowedAction' => 'Hành động bạn yêu cầu không được phép.', - - // Uploaded file moving - 'alreadyMoved' => 'Các tập tin tải lên đã được di chuyển.', - 'invalidFile' => 'Tệp gốc không phải là tệp hợp lệ.', - 'moveFailed' => 'Không thể di chuyển tệp {0} sang {1} ({2})', - - 'uploadErrOk' => 'Các tập tin được tải lên thành công.', - 'uploadErrIniSize' => 'Tệp "%s" vượt quá cấu hình upload_max_filesize ini của bạn.', - 'uploadErrFormSize' => 'Tệp "%s" vượt quá giới hạn tải lên được xác định trong biểu mẫu của bạn.', - 'uploadErrPartial' => 'Tệp "%s" chỉ được tải lên một phần.', - 'uploadErrNoFile' => 'Không có tập tin nào được tải lên.', - 'uploadErrCantWrite' => 'Không thể ghi tệp "%s" trên đĩa.', - 'uploadErrNoTmpDir' => 'Không thể tải lên tệp: thiếu thư mục tạm thời.', - 'uploadErrExtension' => 'Tải lên tệp đã bị dừng bởi một extension PHP.', - 'uploadErrUnknown' => 'Tệp "%s" không được tải lên do lỗi không xác định.', -]; diff --git a/app/Language/vi/Images.php b/app/Language/vi/Images.php deleted file mode 100644 index 7a4ac2e5..00000000 --- a/app/Language/vi/Images.php +++ /dev/null @@ -1,60 +0,0 @@ - 'Hình ảnh gốc phải được chỉ định. ', - 'gdRequired' => 'Thư viện hình ảnh GD được yêu cầu để sử dụng tính năng này.', - 'gdRequiredForProps' => 'Máy chủ của bạn phải hỗ trợ thư viện hình ảnh GD để xác định các thuộc tính hình ảnh.', - 'gifNotSupported' => 'Hình ảnh GIF thường không được hỗ trợ do hạn chế cấp phép. Bạn có thể phải sử dụng hình ảnh JPG hoặc PNG thay thế.', - 'jpgNotSupported' => 'JPG hình ảnh không được hỗ trợ.', - 'pngNotSupported' => 'PNG hình ảnh không được hỗ trợ.', - 'fileNotSupported' => 'Tệp được cung cấp không phải là loại hình ảnh được hỗ trợ.', - 'unsupportedImageCreate' => 'Máy chủ của bạn không hỗ trợ chức năng GD cần thiết để xử lý loại hình ảnh này.', - 'jpgOrPngRequired' => 'Giao thức thay đổi kích thước hình ảnh được chỉ định trong tùy chọn của bạn chỉ hoạt động với các loại hình ảnh JPEG hoặc PNG.', - 'rotateUnsupported' => 'Xoay hình ảnh dường như không được máy chủ của bạn hỗ trợ.', - 'libPathInvalid' => 'Đường dẫn đến thư viện hình ảnh của bạn không chính xác. Vui lòng đặt đường dẫn chính xác trong tùy chọn hình ảnh của bạn.{0, string)', - 'imageProcessFailed' => 'Xử lý ảnh thất bại. Vui lòng xác minh rằng máy chủ của bạn hỗ trợ giao thức đã chọn và đường dẫn đến thư viện hình ảnh của bạn là chính xác.', - 'rotationAngleRequired' => 'Xoay hình ảnh yêu cầu góc xoay.', - 'invalidPath' => 'Đường dẫn đến hình ảnh không chính xác.', - 'copyFailed' => 'Sao chép hình ảnh thất bại.', - 'missingFont' => 'Không thể tìm thấy phông chữ để sử dụng.', - 'saveFailed' => 'Không thể lưu hình ảnh. Hãy chắc chắn rằng thư mục hình ảnh và tập tin có thể ghi.', - 'invalidDirection' => 'Hướng lật chỉ có thể là `dọc` hoặc` ngang`. Đã nhập: {0}', - 'exifNotSupported' => 'Môi trường PHP không hỗ trợ đọc dữ liệu EXIF ​​cho hình ảnh.', -]; diff --git a/app/Language/vi/Language.php b/app/Language/vi/Language.php deleted file mode 100644 index dfd1c109..00000000 --- a/app/Language/vi/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Dòng tìm nạp phải là một mảng các ký tự hoặc chuỗi.', -]; diff --git a/app/Language/vi/Log.php b/app/Language/vi/Log.php deleted file mode 100644 index dc581097..00000000 --- a/app/Language/vi/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} là một mức độ nhật ký không hợp lệ.', -]; diff --git a/app/Language/vi/Migrations.php b/app/Language/vi/Migrations.php deleted file mode 100644 index 46a2fab7..00000000 --- a/app/Language/vi/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - 'Bạn phải thiết lập một bảng migration.', - 'disabled' => 'Migration đã được tải nhưng bị vô hiệu hóa hoặc đặt không chính xác.', - 'notFound' => 'Không tìm thấy tập tin Migration: ', - 'batchNotFound' => 'Không tìm thấy mục tiêu: ', - 'empty' => 'Tệp Migration trống', - 'gap' => 'Có một khoảng trống trong migration sequence near version number: ', - 'classNotFound' => 'Không thể tìm thấy class migration "%s".', - 'missingMethod' => 'Class migration thiếu phương thức "%s".', - - // Migration Command - 'migHelpLatest' => "\t\tDi chuyển cơ sở dữ liệu sang migration có sẵn mới nhất.", - 'migHelpCurrent' => "\t\tDi chuyển cơ sở dữ liệu sang phiên bản được đặt là 'hiện tại' trong cấu hình.", - 'migHelpVersion' => "\tDi chuyển cơ sở dữ liệu sang phiên bản {v}.", - 'migHelpRollback' => "\tChạy tất cả các lần di chuyển 'xuống' xuống phiên bản 0.", - 'migHelpRefresh' => "\t\tGỡ cài đặt và chạy lại tất cả các migration để làm mới cơ sở dữ liệu.", - 'migHelpSeed' => "\tChạy seeder có tên [name].", - 'migCreate' => "\tTạo một migration mới có tên [name]", - 'nameMigration' => 'Đặt tên cho tệp migration', - 'badCreateName' => 'Bạn phải cung cấp tên tệp migration.', - 'writeError' => 'Lỗi khi tạo tệp {0}, kiểm tra xem thư mục có thể ghi được không.', - 'migNumberError' => 'Số di chuyển phải có ba chữ số và không được có bất kỳ khoảng trống nào trong chuỗi.', - 'rollBackConfirm' => 'Bạn có chắc chắn muốn quay trở lại?', - 'refreshConfirm' => 'Bạn có chắc chắn muốn làm mới?', - - 'latest' => 'Chạy tất cả các migration mới ...', - 'generalFault' => 'Chạy Migration thất bại!', - 'migInvalidVersion' => 'Số phiên bản được cung cấp không hợp lệ. ', - 'toVersionPH' => 'Chuyển sang phiên bản %s...', - 'toVersion' => 'Chuyển sang phiên bản hiện tại...', - 'rollingBack' => 'Di chuyển trở lại hàng loạt: ', - 'noneFound' => 'No migrations were found.', - 'on' => 'Migrated On: ', - 'migSeeder' => 'Tên Seeder', - 'migMissingSeeder' => 'Bạn phải cung cấp một tên seeder.', - 'removed' => 'Quay trở lại: ', - 'added' => 'Đang chạy: ', - - 'version' => 'Phiên bản', - 'filename' => 'Tên tệp', -]; diff --git a/app/Language/vi/Number.php b/app/Language/vi/Number.php deleted file mode 100644 index 16f02569..00000000 --- a/app/Language/vi/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' ngàn', - 'million' => ' triệu', - 'billion' => ' tỷ', - 'trillion' => ' ngìn tỷ', - 'quadrillion' => ' triệu tỷ', -]; diff --git a/app/Language/vi/Pager.php b/app/Language/vi/Pager.php deleted file mode 100644 index ad89c97a..00000000 --- a/app/Language/vi/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - 'Điều hướng trang', - 'first' => 'Đầu tiên', - 'previous' => 'Trước', - 'next' => 'Kế tiếp', - 'last' => 'Cuối cùng', - 'older' => 'Lớn hơn', - 'newer' => 'Mới hơn', - 'invalidTemplate' => '{0} không phải là mẫu Pager hợp lệ.', - 'invalidPaginationGroup' => '{0} không phải là một nhóm phân trang hợp lệ.', -]; diff --git a/app/Language/vi/RESTful.php b/app/Language/vi/RESTful.php deleted file mode 100644 index 6ebf2f91..00000000 --- a/app/Language/vi/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" hành động không được thực hiện.', -]; diff --git a/app/Language/vi/Redirect.php b/app/Language/vi/Redirect.php deleted file mode 100644 index 49899b63..00000000 --- a/app/Language/vi/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Không thể chuyển hướng đến "{0}". Mã trạng thái lỗi "{1}"', -]; diff --git a/app/Language/vi/Router.php b/app/Language/vi/Router.php deleted file mode 100644 index 9dabde5b..00000000 --- a/app/Language/vi/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Một tham số không phù hợp với loại dự kiến.', - 'missingDefaultRoute' => 'Không thể xác định những gì sẽ được hiển thị. Một tuyến mặc định chưa được chỉ định trong tệp định tuyến (route).', -]; diff --git a/app/Language/vi/Session.php b/app/Language/vi/Session.php deleted file mode 100644 index 83b062ea..00000000 --- a/app/Language/vi/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` phải có tên bảng để Trình xử lý Session cơ sở dữ liệu hoạt động.', - 'invalidSavePath' => 'Session: Đường dẫn lưu được định cấu hình "{0}" không phải là thư mục, không tồn tại hoặc không thể được tạo.', - 'writeProtectedSavePath' => 'Session: Đường dẫn lưu được định cấu hình "{0}" không thể ghi được bằng PHP.', - 'emptySavePath' => 'Session: Không lưu đường dẫn được cấu hình.', - 'invalidSavePathFormat' => 'Session: Định dạng đường dẫn Redis không hợp lệ: {0}', -]; diff --git a/app/Language/vi/Time.php b/app/Language/vi/Time.php deleted file mode 100644 index 30a730c6..00000000 --- a/app/Language/vi/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - 'Các tháng phải nằm trong khoảng từ 1 đến 12. Đang nhập: {0}', - 'invalidDay' => 'Ngày phải từ 1 đến 31. Đang nhập: {0}', - 'invalidOverDay' => 'Ngày phải nằm trong khoảng từ 1 đến {0}. Đang nhập: {1}', - 'invalidHours' => 'Giờ phải trong khoảng từ 0 đến 23. Đang nhập: {0}', - 'invalidMinutes' => 'Phút phải từ 0 đến 59. Đang nhập: {0}', - 'invalidSeconds' => 'Giây phải trong khoảng từ 0 đến 59. Đang nhập: {0}', - 'years' => '{0, plural, =1{# year} khác{# years}}', - 'months' => '{0, plural, =1{# month} khác{# months}}', - 'weeks' => '{0, plural, =1{# week} {# weeks}}', - 'days' => '{0, plural, =1{# day} khác{# days}}', - 'hours' => '{0, plural, =1{# hour} khác{# hours}}', - 'minutes' => '{0, plural, =1{# minute} khác{# minutes}}', - 'seconds' => '{0, plural, =1{# second} khác{# seconds}}', - 'ago' => '{0} trước', - 'inFuture' => 'trong {0}', - 'yesterday' => 'Hôm qua', - 'tomorrow' => 'Ngày mai', - 'now' => 'Ngay bây giờ', -]; diff --git a/app/Language/vi/Validation.php b/app/Language/vi/Validation.php deleted file mode 100644 index bcecc705..00000000 --- a/app/Language/vi/Validation.php +++ /dev/null @@ -1,97 +0,0 @@ - 'Không có quy tắc nào được chỉ định trong cấu hình Xác thực.', - 'ruleNotFound' => '{0} không phải là một quy tắc hợp lệ.', - 'groupNotFound' => '{0} không phải là một nhóm quy tắc xác nhận.', - 'groupNotArray' => '{0} nhóm quy tắc phải là một mảng.', - 'invalidTemplate' => '{0} không phải là mẫu Xác thực hợp lệ.', - - // Rule Messages - 'alpha' => 'Trường {field} chỉ có thể chứa các ký tự chữ cái.', - 'alpha_dash' => 'Trường {field} chỉ có thể chứa các ký tự chữ và số, gạch dưới và dấu gạch ngang.', - 'alpha_numeric' => 'Trường {field} chỉ có thể chứa các ký tự chữ và số.', - 'alpha_numeric_punct' => 'Trường {field} chỉ có thể chứa các ký tự chữ và số, dấu cách và ký tự ~! # $% & * - _ + = | :. ', - 'alpha_numeric_space' => 'Trường {field} chỉ có thể chứa các ký tự chữ và số.', - 'alpha_space' => 'Trường {field} chỉ có thể chứa các ký tự chữ cái and spaces.', - 'decimal' => 'Trường {field} phải chứa một số thập phân.', - 'differs' => 'Trường {field} phải khác với trường {param}.', - 'equals' => 'Trường {field} phải chính xác: {param}.', - 'exact_length' => 'Trường {field} phải có độ dài chính xác {param} ký tự.', - 'greater_than' => 'Trường {field} phải chứa một số lớn hơn {param}.', - 'greater_than_equal_to' => 'Trường {field} phải chứa một số lớn hơn hoặc bằng {param}.', - 'hex' => 'Trường {field} chỉ có thể chứa các ký tự thập lục phân.', - 'in_list' => 'Trường {field} phải là một trong: {param}.', - 'integer' => 'Trường {field} phải chứa một số nguyên.', - 'is_natural' => 'Trường {field} chỉ được chứa các chữ số.', - 'is_natural_no_zero' => 'Trường {field} chỉ được chứa các chữ số và phải lớn hơn 0.', - 'is_not_unique' => 'Trường {field} phải chứa một giá trị hiện có trước đó trong cơ sở dữ liệu.', - 'is_unique' => 'Trường {field} phải chứa một giá trị duy nhất.', - 'less_than' => 'Trường {field} phải chứa một số nhỏ hơn {param}.', - 'less_than_equal_to' => 'Trường {field} phải chứa một số nhỏ hơn hoặc bằng {param}.', - 'matches' => 'Trường {field} không khớp với trường {param}.', - 'max_length' => 'Trường {field} không thể vượt quá {param} ký tự.', - 'min_length' => 'Trường {field} phải có ít nhất {param} ký tự.', - 'not_equals' => 'Trường {field} không thể là: {param}.', - 'numeric' => 'Trường {field} chỉ được chứa số.', - 'regex_match' => 'Trường {field} không đúng định dạng', - 'required' => 'Trường {field} bắt buộc.', - 'required_with' => 'Trường {field} bắt buộc khi {param} tồn tại.', - 'required_without' => 'Trường {field} bắt buộc khi {param} không tồn tại.', - 'timezone' => 'Trường {field} phải là múi giờ hợp lệ. ', - 'valid_base64' => 'Trường {field} phải là một chuỗi base64 hợp lệ.', - 'valid_email' => 'Trường {field} phải là địa chỉ email hợp lệ.', - 'valid_emails' => 'Trường {field} phải chứa tất cả các địa chỉ email hợp lệ.', - 'valid_ip' => 'Trường {field} phải là một địa chỉ IP hợp lệ.', - 'valid_url' => 'Trường {field} phải là một đường dẫn URL hợp lệ.', - 'valid_date' => 'Trường {field} phải là một ngày hợp lệ.', - - // Credit Cards - 'valid_cc_num' => '{field} dường như không phải là số thẻ tín dụng hợp lệ.', - - // Files - 'uploaded' => '{field} không phải là một tập tin tải lên hợp lệ.', - 'max_size' => '{field} tệp quá nặng.', - 'is_image' => '{field} không phải là một tập tin hình ảnh được tải lên hợp lệ.', - 'mime_in' => '{field} phải là một tập tin có định dạng hợp lệ.', - 'ext_in' => '{field} phải là phần mở rộng tập tin hợp lệ.', - 'max_dims' => '{field} không phải là một hình ảnh, hoặc nó quá rộng hoặc quá cao.', -]; diff --git a/app/Language/vi/View.php b/app/Language/vi/View.php deleted file mode 100644 index 2ae3043d..00000000 --- a/app/Language/vi/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} không phải là một method hợp lệ.', - 'missingCellParameters' => '{class}::{method} không có thông số.', - 'invalidCellParameter' => '{0} không phải là một tên param hợp lệ.', - 'noCellClass' => 'Không có loại ô xem được cung cấp.', - 'invalidCellClass' => 'Không thể định vị lớp ô xem: {0}.', - 'tagSyntaxError' => 'Bạn có một lỗi cú pháp trong các thẻ Parser của bạn: {0}', -]; diff --git a/app/Language/zh-CN/CLI.php b/app/Language/zh-CN/CLI.php deleted file mode 100644 index e42052e4..00000000 --- a/app/Language/zh-CN/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - '找不到 "{0}" 命令', - 'helpUsage' => '用法:', - 'helpDescription' => '描述:', - 'helpOptions' => '选项:', - 'helpArguments' => '参数:', - 'invalidColor' => '无效的 {0} 颜色: {1}.', -]; diff --git a/app/Language/zh-CN/Cache.php b/app/Language/zh-CN/Cache.php deleted file mode 100644 index 217df5cc..00000000 --- a/app/Language/zh-CN/Cache.php +++ /dev/null @@ -1,44 +0,0 @@ - '{0} 缓存无法写入。', - 'invalidHandlers' => '缓存配置必须含有 $validHandlers 数组。', - 'noBackup' => '缓存配置必须含有 handler 和 backup handler。', - 'handlerNotFound' => '缓存配置指定了无效的 handler 或 backup handler。', -]; diff --git a/app/Language/zh-CN/Cast.php b/app/Language/zh-CN/Cast.php deleted file mode 100644 index 5666a504..00000000 --- a/app/Language/zh-CN/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - '超出了最大堆栈深度。', - 'jsonErrorStateMismatch' => '无效的 JSON 或模式不匹配。', - 'jsonErrorCtrlChar' => '控制字符错误', - 'jsonErrorSyntax' => 'JSON 语法错误', - 'jsonErrorUtf8' => '异常的 UTF-8 字符,可能是因为不正确的编码导致的。', - 'jsonErrorUnknown' => '未知错误', -]; diff --git a/app/Language/zh-CN/Core.php b/app/Language/zh-CN/Core.php deleted file mode 100644 index b8107bf7..00000000 --- a/app/Language/zh-CN/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - '无效的文件: {0}。', - 'copyError' => '尝试替换文件时发生错误,请确认文件路径是否有写权限。', - 'missingExtension' => '未加载 {0} 扩展。', - 'noHandlers' => '{0} 必须提供至少一个处理程序。', -]; diff --git a/app/Language/zh-CN/Database.php b/app/Language/zh-CN/Database.php deleted file mode 100644 index d54ce771..00000000 --- a/app/Language/zh-CN/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} 不是有效的模型回调事件。', - 'invalidArgument' => '必须提供有效的 {0}。', - 'invalidAllowedFields' => '模型中必须有指定的允许字段: {0}。', - 'emptyDataset' => '{0} 没有任何数据。', - 'failGetFieldData' => '无法在数据库中获取字段数据。', - 'failGetIndexData' => '无法在数据库中获取索引数据。', - 'failGetForeignKeyData' => '无法在数据库中获取外键数据。', - 'parseStringFail' => '解析密钥字符串失败。', - 'featureUnavailable' => '您正在使用的数据库不适用本功能。', - 'tableNotFound' => 'Table `{0}` was not found in the current database.', - 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', - 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', - 'fieldNotExists' => 'Field `{0}` not found.', - 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', - 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', -]; diff --git a/app/Language/zh-CN/Email.php b/app/Language/zh-CN/Email.php deleted file mode 100644 index 19b0c598..00000000 --- a/app/Language/zh-CN/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - 'The email validation method must be passed an array.', - 'invalidAddress' => 'Invalid email address: {0}', - 'attachmentMissing' => 'Unable to locate the following email attachment: {0}', - 'attachmentUnreadable' => 'Unable to open this attachment: {0}', - 'noFrom' => 'Cannot send mail with no "From" header.', - 'noRecipients' => 'You must include recipients: To, Cc, or Bcc', - 'sendFailurePHPMail' => 'Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.', - 'sendFailureSendmail' => 'Unable to send email using PHP Sendmail. Your server might not be configured to send mail using this method.', - 'sendFailureSmtp' => 'Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.', - 'sent' => 'Your message has been successfully sent using the following protocol: {0}', - 'noSocket' => 'Unable to open a socket to Sendmail. Please check settings.', - 'noHostname' => 'You did not specify a SMTP hostname.', - 'SMTPError' => 'The following SMTP error was encountered: {0}', - 'noSMTPAuth' => 'Error: You must assign a SMTP username and password.', - 'failedSMTPLogin' => 'Failed to send AUTH LOGIN command. Error: {0}', - 'SMTPAuthUsername' => 'Failed to authenticate username. Error: {0}', - 'SMTPAuthPassword' => 'Failed to authenticate password. Error: {0}', - 'SMTPDataFailure' => 'Unable to send data: {0}', - 'exitStatus' => 'Exit status code: {0}', -]; diff --git a/app/Language/zh-CN/Encryption.php b/app/Language/zh-CN/Encryption.php deleted file mode 100644 index b5917774..00000000 --- a/app/Language/zh-CN/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - 'No driver requested; Miss Daisy will be so upset!', - 'noHandlerAvailable' => 'Unable to find an available {0} encryption handler.', - 'unKnownHandler' => '"{0}" cannot be configured.', - 'starterKeyNeeded' => 'Encrypter needs a starter key.', - 'authenticationFailed' => 'Decrypting: authentication failed.', - 'encryptionFailed' => 'Encryption failed.', -]; diff --git a/app/Language/zh-CN/Entity.php b/app/Language/zh-CN/Entity.php deleted file mode 100644 index 7b7e6f69..00000000 --- a/app/Language/zh-CN/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - 'Trying to access non existent property {0} of {1}', -]; diff --git a/app/Language/zh-CN/Files.php b/app/Language/zh-CN/Files.php deleted file mode 100644 index 4afc9e92..00000000 --- a/app/Language/zh-CN/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - '未找到文件: {0}', - 'cannotMove' => '无法移动文件 {0} 至 {1} ({2})', -]; diff --git a/app/Language/zh-CN/Filters.php b/app/Language/zh-CN/Filters.php deleted file mode 100644 index 9703dab3..00000000 --- a/app/Language/zh-CN/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} 过滤器必须定义匹配的别名。', - 'incorrectInterface' => '{0} 必须实现 CodeIgniter\Filters\FilterInterface 接口。', -]; diff --git a/app/Language/zh-CN/Format.php b/app/Language/zh-CN/Format.php deleted file mode 100644 index 4c9d89d2..00000000 --- a/app/Language/zh-CN/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - '无法解析 json 字符串, 错误信息: "{0}".', - 'missingExtension' => '必须有 SimpleXML 扩展才能格式化 XML 文件。', -]; diff --git a/app/Language/zh-CN/HTTP.php b/app/Language/zh-CN/HTTP.php deleted file mode 100644 index 2719efdd..00000000 --- a/app/Language/zh-CN/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - '必须启用 CURL 才能使用 CURLRequest 工具类。', - 'invalidSSLKey' => '无法设置 SSL 密钥。 {0} 不是一个有效的密钥文件。', - 'sslCertNotFound' => '找不到 SSL 证书: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} 不是有效的内容协商。必须是以下内容之一: media, charset, encoding, language。', - - // Message - 'invalidHTTPProtocol' => '无效的 HTTP 协议版本,必须是以下内容之一: {0}', - - // Negotiate - 'emptySupportedNegotiations' => '必须为所有协商(Negotiation)提供一组受支持的值。', - - // RedirectResponse - 'invalidRoute' => '反向路由时,无法找到{0} 路由。', - - // DownloadResponse - 'cannotSetBinary' => '设置为文件路径时,无法设置为二进制。', - 'cannotSetFilepath' => '设置为二进制时,无法设置文件路径: {0}', - 'notFoundDownloadSource' => '无法找到下载内容源。', - 'cannotSetCache' => '不支持下载缓存。', - 'cannotSetStatusCode' => '不支持下载时更改状态代码,状态码: {0}, 原因: {1}', - - // Response - 'missingResponseStatus' => 'HTTP 响应缺少状态码。', - 'invalidStatusCode' => '{0} 不是有效的返回状态码。', - 'unknownStatusCode' => '未提供 HTTP 状态码或状态码未知: {0}', - - // URI - 'cannotParseURI' => '无法解析 URI: {0}', - 'segmentOutOfRange' => '请求的 URI 超出范围: {0}', - 'invalidPort' => '端口号必须在 0 至 65535 之间,现在是: {0}', - 'malformedQueryString' => '查询的字符串可能不包含 URI 片段。', - - // Page Not Found - 'pageNotFound' => '未找到指定的页面。', - 'emptyController' => '没有指定控制器。', - 'controllerNotFound' => '找不到控制器或方法: {0}::{1}', - 'methodNotFound' => '找不到控制器的方法: {0}', - - // CSRF - 'disallowedAction' => '你的请求操作是不被允许的。', - - // Uploaded file moving - 'alreadyMoved' => '上传的文件已经被移动了。', - 'invalidFile' => '原始文件不是一个有效的文件。', - 'moveFailed' => '无法移动文件 {0} 至 {1} ({2})', - - 'uploadErrOk' => '文件上传成功。', - 'uploadErrIniSize' => '文件 "%s" 超出了 php.ini 文件中 upload_max_filesize 的设置值。', - 'uploadErrFormSize' => '文件 "%s" 超出了表单上传最大设置值。', - 'uploadErrPartial' => '文件 "%s" 只上传了一部分。', - 'uploadErrNoFile' => '没有文件要被上传。', - 'uploadErrCantWrite' => '文件 "%s" 无法写入磁盘。', - 'uploadErrNoTmpDir' => '文件无法被上传: 缺少临时目录。', - 'uploadErrExtension' => '文件上传因为 PHP 扩展被停止了。', - 'uploadErrUnknown' => '文件 "%s" 因未知原因而上传失败了。' -]; diff --git a/app/Language/zh-CN/Images.php b/app/Language/zh-CN/Images.php deleted file mode 100644 index 3ac3cb10..00000000 --- a/app/Language/zh-CN/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - '必须制定原始图片。', - 'gdRequired' => 'GD 图像类需要使用此功能。', - 'gdRequiredForProps' => '服务器必须支持 GD 图像类才能获取图片信息。', - 'gifNotSupported' => '因为授权限制,通常不支持 GIF 图像。需要使用 JPG 或 PNG 图片。', - 'jpgNotSupported' => '不支持 JPG 图片。', - 'pngNotSupported' => '不支持 PNG 图片。', - 'unsupportedImageCreate' => '服务器不支持处理此图片所需的 GD 库。', - 'jpgOrPngRequired' => '调整图片大小仅适用于 PNG 或 JPG 图片。', - 'rotateUnsupported' => '服务器似乎不支持图片旋转。', - 'libPathInvalid' => '图片库路径不正确,请设置正确的路径。{0, string)', - 'imageProcessFailed' => '图片处理失败,请确定服务器是否支持已选的协议,以及图片处理库的路径是否正确。', - 'rotationAngleRequired' => '宣传图片操作需要设置旋转角度。', - 'invalidPath' => '图片路径不正确。', - 'copyFailed' => '图片复制失败。', - 'missingFont' => '无法找到要使用的字体。', - 'saveFailed' => '无法保存图片,请确认图片和文件目录是可写的。', - 'invalidDirection' => '图片旋转方向只能是 `vertical` 或 `horizontal`,现在是: {0}', - 'exifNotSupported' => 'PHP 环境不支持读取图片的 EXIF 数据。', -]; diff --git a/app/Language/zh-CN/Language.php b/app/Language/zh-CN/Language.php deleted file mode 100644 index ae099829..00000000 --- a/app/Language/zh-CN/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - '获取行必须是字符或字符串数组。', -]; diff --git a/app/Language/zh-CN/Log.php b/app/Language/zh-CN/Log.php deleted file mode 100644 index d45b4e16..00000000 --- a/app/Language/zh-CN/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} 是无效的日志级别。', -]; diff --git a/app/Language/zh-CN/Migrations.php b/app/Language/zh-CN/Migrations.php deleted file mode 100644 index 73abfc54..00000000 --- a/app/Language/zh-CN/Migrations.php +++ /dev/null @@ -1,81 +0,0 @@ - '必须设置迁移表。', -// 'invalidType' => '指定的迁移类型编号无效: {0}', - 'disabled' => '迁移状态为禁用或不正确,请确认 app/Config/Migrations 文件的 $enabled 值是否为 true。', - 'notFound' => '找不到指定的迁移文件:', - 'batchNotFound' => 'Target batch not found: ', - 'empty' => '没有指定的迁移文件。', - 'gap' => '版本号附近的迁移序列存在差异: ', - 'classNotFound' => '找不到指定的迁移类 "%s" 。', - 'missingMethod' => '迁移类缺少 "%s" 方法。', - - // Migration Command - 'migHelpLatest' => "\t\t数据库将迁移至最新的可用迁移。", - 'migHelpCurrent' => "\t\t数据库将迁移至配置文件中 'current' 的版本。", - 'migHelpVersion' => "\t数据库将迁移至 {v} 版本。", - 'migHelpRollback' => "\t运行所有迁移 'down'方法 至 0 版本。", - 'migHelpRefresh' => "\t\t卸载且重新运行所有迁移,重置数据库。", - 'migHelpSeed' => "\t运行填充程序,名称:[name]", - 'migCreate' => "\t创建一个新的迁移,名称:[name]", - 'nameMigration' => '命名迁移文件。', - 'badCreateName' => '你必须提供迁移文件名。', - 'writeError' => '尝试创建文件时出错。', - 'migNumberError' => '迁移号必须为3位数字且中间不能有任何空格。', - -// 'toLatest' => '迁移到最新版本...', - 'latest' => 'Running all new migrations...', - 'generalFault' => 'Migration failed!', - 'migInvalidVersion' => '提供的版本号无效。', - 'toVersionPH' => '迁移至 %s...', - 'toVersion' => '迁移至当前(current)版本...', - 'rollingBack' => '回滚所有迁移...', - 'noneFound' => '没有发现任何迁移。', - 'on' => '迁移: ', - 'migSeeder' => '填充(seeder)名', - 'migMissingSeeder' => '必须提供一个填充(seeder)名', - 'removed' => '回滚操作: ', - 'added' => '执行操作: ', - - 'version' => '版本', - 'filename' => '文件名', -]; diff --git a/app/Language/zh-CN/Number.php b/app/Language/zh-CN/Number.php deleted file mode 100644 index b3449ab4..00000000 --- a/app/Language/zh-CN/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' 千', - 'million' => ' 百万', - 'billion' => ' 亿', - 'trillion' => ' 兆', - 'quadrillion' => ' 万亿', -]; diff --git a/app/Language/zh-CN/Pager.php b/app/Language/zh-CN/Pager.php deleted file mode 100644 index e8d64215..00000000 --- a/app/Language/zh-CN/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - '页面导航', - 'first' => '首页', - 'previous' => '上一页', - 'next' => '下一页', - 'last' => '尾页', - 'older' => '旧', - 'newer' => '新', - 'invalidTemplate' => '{0} 不是有效的分页模板。', - 'invalidPaginationGroup' => '{0} 不是有效的分页分组。', -]; diff --git a/app/Language/zh-CN/RESTful.php b/app/Language/zh-CN/RESTful.php deleted file mode 100644 index 442243f6..00000000 --- a/app/Language/zh-CN/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - '"{0}" action not implemented.', -]; diff --git a/app/Language/zh-CN/Redirect.php b/app/Language/zh-CN/Redirect.php deleted file mode 100644 index fce28938..00000000 --- a/app/Language/zh-CN/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Unable to redirect to "{0}". Error status code "{1}"', -]; diff --git a/app/Language/zh-CN/Router.php b/app/Language/zh-CN/Router.php deleted file mode 100644 index fb286e81..00000000 --- a/app/Language/zh-CN/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - '参数与预期类型不一致。', - 'missingDefaultRoute' => '无法确定显示内容,因为路由文件中没有指定默认的路由。', -]; diff --git a/app/Language/zh-CN/Session.php b/app/Language/zh-CN/Session.php deleted file mode 100644 index d7339f30..00000000 --- a/app/Language/zh-CN/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` 必须是数据库中的表名才能正常工作。', - 'invalidSavePath' => 'Session: 配置的保存路径 "{0}" , 目录不存在或无法创建。', - 'writeProtectedSavePath' => 'Session: 配置的保存路径 "{0}" , PHP 程序无法写入。', - 'emptySavePath' => 'Session: 没有配置保存路径。', - 'invalidSavePathFormat' => 'Session: 无效的 Redis 保存路径: {0}', -]; diff --git a/app/Language/zh-CN/Time.php b/app/Language/zh-CN/Time.php deleted file mode 100644 index 6d7cdaf3..00000000 --- a/app/Language/zh-CN/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - '月份必须在 1 至 12 之间。 现在是: {0}', - 'invalidDay' => '天数必须在 1 至 31 之间。 现在是: {0}', - 'invalidOverDay' => '天数必须在 1 至 {0} 之间。 现在是: {1}', - 'invalidHours' => '小时必须在 0 至 23 之间。 现在是: {0}', - 'invalidMinutes' => '分钟必须在 0 至 59 之间。 现在是: {0}', - 'invalidSeconds' => '秒数必须在 0 至 59 之间。 现在是: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '{0} 以前', - 'inFuture' => '在 {0}', - 'yesterday' => '昨天', - 'tomorrow' => '明天', - 'now' => '现在', -]; diff --git a/app/Language/zh-CN/Validation.php b/app/Language/zh-CN/Validation.php deleted file mode 100644 index f35746cb..00000000 --- a/app/Language/zh-CN/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - '验证配置中没有指定任何规则。', - 'ruleNotFound' => '{0} 不是一个有效的规则。', - 'groupNotFound' => '{0} 不是一个有效的规则验证组。', - 'groupNotArray' => '{0} 验证组必须是一个数组类型。', - 'invalidTemplate' => '{0} 不是有效的验证模板。', - - // Rule Messages - 'alpha' => '{field} 字段只能包含字母字符。', - 'alpha_dash' => '{field} 字段只能包含字母数字、下划线和中划线。', - 'alpha_numeric' => '{field} 字段只能包含字母数字。', - 'alpha_numeric_space' => '{field} 字段只能包含字母数字和空格。', - 'alpha_space' => '{field} 字段只能包含字母字符和空格。', - 'decimal' => '{field} 字段只能包含十进制数字。', - 'differs' => '{field} 字段必须与 {param} 字段不同。', - 'equals' => 'The {field} field must be exactly: {param}.', - 'exact_length' => '{field} 字段的长度必须是 {param} 个字符。', - 'greater_than' => '{field} 字段必须是大于 {param} 的数字。', - 'greater_than_equal_to' => '{field} 字段必须是大于或等于 {param} 的数字。', - 'in_list' => '{field} 字段必须是以下内容之一: {param}.', - 'integer' => '{field} 字段必须是整数。', - 'is_natural' => '{field} 字段必须是数字。', - 'is_natural_no_zero' => '{field} 字段必须是数字且大于0。', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => '{field} 字段必须是唯一的值。', - 'less_than' => '{field} 字段必须小于 {param} 的数字。', - 'less_than_equal_to' => '{field} 字段必须小于或等于 {param} 的数字。', - 'matches' => '{field} 字段与 {param} 字段不匹配。', - 'max_length' => '{field} 字段长度不能超过 {param} 个字符。', - 'min_length' => '{field} 字段长度至少是 {param} 个字符。', - 'not_equals' => 'The {field} field cannot be: {param}.', - 'numeric' => '{field} 字段只能包含数字。', - 'regex_match' => '{field} 字段格式不正确。', - 'required' => '{field} 是必填字段。', - 'required_with' => '如果 {param} 存在时,{field} 是必填字段。', - 'required_without' => '如果 {param} 不存在时,{field} 是必填字段。', - 'timezone' => '{field} 字段必须是有效的时区。', - 'valid_base64' => '{field} 字段必须是有效的 base64 字符串。', - 'valid_email' => '{field} 字段必须是有效的 Email 地址。', - 'valid_emails' => '{field} 字段必须包含所有有效的 Email 地址。', - 'valid_ip' => '{field} 字段必须是有效的 IP 地址。', - 'valid_url' => '{field} 字段必须是有效的 URL 地址。', - 'valid_date' => '{field} 字段必须是有效的日期。', - - // Credit Cards - 'valid_cc_num' => '{field} 字段不是有效的信用卡号码。', - - // Files - 'uploaded' => '{field} 不是有效上传文件。', - 'max_size' => '{field} 文件太大了。', - 'is_image' => '{field} 不是有效的图片上传文件。', - 'mime_in' => '{field} 不是有效的 mime 类型。', - 'ext_in' => '{field} 没有有效的文件扩展名。', - 'max_dims' => '{field} 不是有效的图片文件,或图片太高、太宽了,请调整图片尺寸。', -]; diff --git a/app/Language/zh-CN/View.php b/app/Language/zh-CN/View.php deleted file mode 100644 index 5517a496..00000000 --- a/app/Language/zh-CN/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} 不是一个有效的方法。', - 'missingCellParameters' => '{class}::{method} 没有参数。', - 'invalidCellParameter' => '{0} 不是一个有效的参数名称。', - 'noCellClass' => '没有提供视图处理类。', - 'invalidCellClass' => '无法找到视图处理类: {0}.', - 'tagSyntaxError' => 'Parser 中存在语法错误: {0}', -]; diff --git a/app/Language/zh-TW/CLI.php b/app/Language/zh-TW/CLI.php deleted file mode 100644 index ac52a64c..00000000 --- a/app/Language/zh-TW/CLI.php +++ /dev/null @@ -1,47 +0,0 @@ - '找不到 "{0}" 指令。', - 'helpUsage' => '應用:', - 'helpDescription' => '說明:', - 'helpOptions' => '選項:', - 'helpArguments' => '引數:', - 'invalidColor' => '無效的 {0} 顏色: {1} 。', -]; diff --git a/app/Language/zh-TW/Cache.php b/app/Language/zh-TW/Cache.php deleted file mode 100644 index 6fd221a4..00000000 --- a/app/Language/zh-TW/Cache.php +++ /dev/null @@ -1,45 +0,0 @@ - '無法寫入快取 {0} 。', - 'invalidHandlers' => '快取設置必須具有 $validHandlers 陣列。', - 'noBackup' => '快取設置必須具有處理器(handler)以及備份處理器(backupHandler)。', - 'handlerNotFound' => '快取設置中指定了無效的處理器(handler)或備份處理器(backupHandler)。', -]; diff --git a/app/Language/zh-TW/Cast.php b/app/Language/zh-TW/Cast.php deleted file mode 100644 index 174ed6be..00000000 --- a/app/Language/zh-TW/Cast.php +++ /dev/null @@ -1,46 +0,0 @@ - '超過了最大堆疊深度。', - 'jsonErrorStateMismatch' => '下溢或模式不匹配。', - 'jsonErrorCtrlChar' => '發現意外的控制字元。', - 'jsonErrorSyntax' => '語法錯誤, JSON 格式錯誤。', - 'jsonErrorUtf8' => '格式錯誤的 UTF-8 字元,可能是因為編碼錯誤。', - 'jsonErrorUnknown' => '未知的錯誤。', -]; diff --git a/app/Language/zh-TW/Core.php b/app/Language/zh-TW/Core.php deleted file mode 100644 index 2759032b..00000000 --- a/app/Language/zh-TW/Core.php +++ /dev/null @@ -1,45 +0,0 @@ - '無效的檔案: {0}', - 'copyError' => '嘗試替換檔案({0})時遇到錯誤. 請確定檔案目錄具有可寫入的權限。', - 'missingExtension' => '尚未載入 {0} 擴充元件。', - 'noHandlers' => '{0} 最少必須提供一個處理器(handler)。', -]; diff --git a/app/Language/zh-TW/Database.php b/app/Language/zh-TW/Database.php deleted file mode 100644 index 0d7c7692..00000000 --- a/app/Language/zh-TW/Database.php +++ /dev/null @@ -1,56 +0,0 @@ - '{0} 並不是一個有效的模型回呼。', - 'invalidArgument' => '必須提供有效的: {0}.', - 'invalidAllowedFields' => '必須為模型指定允許的欄位: {0}', - 'emptyDataset' => '{0} 中沒有資料。', - 'failGetFieldData' => '無法從資料庫中取得欄位資料。', - 'failGetIndexData' => '無法從資料庫中取得索引資料。', - 'failGetForeignKeyData' => '無法從資料庫中取得外來鍵資料。', - 'parseStringFail' => '解析密鑰字串失敗', - 'featureUnavailable' => '此功能不適用於您所使用的資料庫。', - 'tableNotFound' => '在當前的資料庫中找不到資料表:`{0}` ', - 'noPrimaryKey' => '在`{0}` 模型類別中未指定主鍵。 ', - 'noDateFormat' => '在`{0}` 模型類別中日期格式(dateFormat)無效。 ', - 'fieldNotExists' => '找不到欄位:`{0}`。', - 'forEmptyInputGiven' => '`{0}`欄位不可聲明為空。', - 'forFindColumnHaveMultipleColumns' => '欄位名稱不可為多值。', -]; diff --git a/app/Language/zh-TW/Email.php b/app/Language/zh-TW/Email.php deleted file mode 100644 index f6a60ace..00000000 --- a/app/Language/zh-TW/Email.php +++ /dev/null @@ -1,59 +0,0 @@ - '電子郵件驗證方法(email validation method)必須傳入一個陣列。', - 'invalidAddress' => '無效的電子郵件地址: {0}', - 'attachmentMissing' => '找不到以下附件: {0}', - 'attachmentUnreadable' => '無法開啟此附件: {0}', - 'noFrom' => '請設定發件人(From),否則將無法傳送。', - 'noRecipients' => '請設定收件人(Recipients),收件人可以是: 發送給(To)、副本(CC),或密件副本(BCC)', - 'sendFailurePHPMail' => '無法使用 PHP mail() 傳送電子郵件。您的伺服器可能尚未配置使用這個方法發送郵件的相關設定。', - 'sendFailureSendmail' => '無法使用 PHP Sendmail 傳送電子郵件。您的伺服器可能尚未配置使用這個方法發送郵件的相關設定。', - 'sendFailureSmtp' => '無法使用 PHP SMTP 傳送電子郵件。您的伺服器可能尚未配置使用這個方法發送郵件的相關設定。', - 'sent' => '您的郵件已使用下列協議成功寄出: {0}', - 'noSocket' => '無法打開基座(Socket)傳送電子郵件,請確定您的設定是否正確。', - 'noHostname' => '尚未指定SMTP的主機名稱。', - 'SMTPError' => '發生以下SMTP錯誤: {0}', - 'noSMTPAuth' => '錯誤: 您必須指定一組SMTP的使用者名稱與密碼。', - 'failedSMTPLogin' => '無法傳送 AUTH LOGIN 指令。 錯誤: {0}', - 'SMTPAuthUsername' => '驗證使用者名稱失敗。 錯誤: {0}', - 'SMTPAuthPassword' => '驗證密碼失敗。 錯誤: {0}', - 'SMTPDataFailure' => '無法傳送資料: {0}', - 'exitStatus' => '結束(Exit)的狀態碼: {0}', -]; diff --git a/app/Language/zh-TW/Encryption.php b/app/Language/zh-TW/Encryption.php deleted file mode 100644 index 6b578377..00000000 --- a/app/Language/zh-TW/Encryption.php +++ /dev/null @@ -1,46 +0,0 @@ - '沒有任何驅動器被請求;黛西小姐感到十分困擾!(Miss Daisy will be so upset!)', - 'noHandlerAvailable' => '找不到可以使用的 {0} 加密處理器(encryption handler).', - 'unKnownHandler' => "'{0}' 無法設置。", - 'starterKeyNeeded' => '加密器(Encrypter)需要一組 starter key 。', - 'authenticationFailed' => '解密失敗: 身份驗證失敗。', - 'encryptionFailed' => '加密失敗。', -]; diff --git a/app/Language/zh-TW/Entity.php b/app/Language/zh-TW/Entity.php deleted file mode 100644 index 6dae8031..00000000 --- a/app/Language/zh-TW/Entity.php +++ /dev/null @@ -1,43 +0,0 @@ - '無法訪問 {1} 的 {0},這個屬性並不存在。', -]; diff --git a/app/Language/zh-TW/Files.php b/app/Language/zh-TW/Files.php deleted file mode 100644 index 6a6f0671..00000000 --- a/app/Language/zh-TW/Files.php +++ /dev/null @@ -1,42 +0,0 @@ - '找不到檔案:{0}', - 'cannotMove' => '無法將檔案從 {0} 移動到 {1}。({2})', -]; diff --git a/app/Language/zh-TW/Filters.php b/app/Language/zh-TW/Filters.php deleted file mode 100644 index 8fde3734..00000000 --- a/app/Language/zh-TW/Filters.php +++ /dev/null @@ -1,43 +0,0 @@ - '{0} 過濾器必續定義一個匹配的別名。', - 'incorrectInterface' => '{0} 必需實作介面: CodeIgniter\Filters\FilterInterface ', -]; diff --git a/app/Language/zh-TW/Format.php b/app/Language/zh-TW/Format.php deleted file mode 100644 index 5ccd8093..00000000 --- a/app/Language/zh-TW/Format.php +++ /dev/null @@ -1,43 +0,0 @@ - '解析JSON字串失敗,錯誤: "{0}".', - 'missingExtension' => '格式化XML需要使用到SimpleXML擴充元件。', -]; diff --git a/app/Language/zh-TW/HTTP.php b/app/Language/zh-TW/HTTP.php deleted file mode 100644 index 22c1cc7f..00000000 --- a/app/Language/zh-TW/HTTP.php +++ /dev/null @@ -1,100 +0,0 @@ - '必須啟動 CURL 才可以使用 CURLRequest 類別。', - 'invalidSSLKey' => '無法設定 SSL Key。 {0} 這是一個無效的檔案。', - 'sslCertNotFound' => '找不到 SSL 證書: {0}', - 'curlError' => '{0} : {1}', - - // IncomingRequest - 'invalidNegotiationType' => '{0} 不是有效的內容協商。其類型只能是下列之一:媒體(media)、字元集(charset)、編碼(encoding)或語言(language)。', - - // Message - 'invalidHTTPProtocol' => '無效的HTTP協議版本,其版本只能是下列之一: {0}', - - // Negotiate - 'emptySupportedNegotiations' => '您必須以陣列的形式,替所有協商(Negotiation)提供支持的值。', - - // RedirectResponse - 'invalidRoute' => '執行反向路由(reverse-routing)時找不到 {0} 此路由', - - // DownloadResponse - 'cannotSetBinary' => '設定文件路徑時不能設定成二進制。', - 'cannotSetFilepath' => '設定二進位時無法設定成文件路徑:{0}', - 'notFoundDownloadSource' => '找不到下載的內容源。', - 'cannotSetCache' => '不支援下載快取。', - 'cannotSetStatusCode' => '不支持下載時更改狀態碼。 狀態碼: {0}, 原因: {1}', - - // Response - 'missingResponseStatus' => 'HTTP 響應(Response)缺少狀態碼。', - 'invalidStatusCode' => '{0} 不是有效的HTTP回傳狀態碼。', - 'unknownStatusCode' => '未知的HTTP狀態碼或未提供消息: {0}', - - // URI - 'cannotParseURI' => '無法解析 URI: {0}', - 'segmentOutOfRange' => '請求的 URI 長度超過範圍: {0}', - 'invalidPort' => '連接埠必須在 0 到 65535 之間。目前的值為: {0}', - 'malformedQueryString' => '所查訊的字串可能不包含 URI 片段。', - - // Page Not Found - 'pageNotFound' => '找不到頁面。', - 'emptyController' => '未指定控制器。', - 'controllerNotFound' => '找不到任何控制器或方法: {0}::{1}', - 'methodNotFound' => '找不到控制器中的方法: {0}', - - // CSRF - 'disallowedAction' => '您請求的操作是不允許的。', - - // Uploaded file moving - 'alreadyMoved' => '所上傳的文件已經被移動。', - 'invalidFile' => '原始文件並非有效文件。', - 'moveFailed' => '無法將檔案由 {0} 移動至 {1} ({2})', - - 'uploadErrOk' => '檔案上傳成功。', - 'uploadErrIniSize' => '檔案 "%s" 超出了您在 php.ini 中所設定的 upload_max_filesize 大小。', - 'uploadErrFormSize' => '檔案 "%s" 超出了您在 php.ini 中所設定的表單檔案上傳大小。', - 'uploadErrPartial' => '檔案 "%s" 僅部分上傳成功。', - 'uploadErrNoFile' => '沒有任何上傳文件。', - 'uploadErrCantWrite' => '檔案 "%s" 無法寫入到磁碟。', - 'uploadErrNoTmpDir' => '無法上傳檔案:缺少暫存資料夾', - 'uploadErrExtension' => '檔案上傳被停止,因為被PHP擴充元件停止。', - 'uploadErrUnknown' => '檔案 "%s" 因為未知的錯誤上傳失敗。', -]; diff --git a/app/Language/zh-TW/Images.php b/app/Language/zh-TW/Images.php deleted file mode 100644 index b95baf29..00000000 --- a/app/Language/zh-TW/Images.php +++ /dev/null @@ -1,59 +0,0 @@ - '您必須在偏好設定中(preferences)指定來源圖像。', - 'gdRequired' => '使用這個功能需要 GD image 程式庫。', - 'gdRequiredForProps' => '你的伺服器必須支援 GD image 程式庫才能獲取圖像屬性。', - 'gifNotSupported' => '由於授權限制,GIF 圖像通常不支援,您可能得使用 JPG 與PNG 圖像。', - 'jpgNotSupported' => '不支援 JPG 圖像。', - 'pngNotSupported' => '不支援 PNG 圖像。', - 'unsupportedImageCreate' => '你的伺服器不支援處理此類圖像所需的GD功能。', - 'jpgOrPngRequired' => '在偏好設定中(preferences)調整圖像大小的功能僅適用於 JPEG 與 PNG 圖像。', - 'rotateUnsupported' => '伺服器似乎不支援圖像旋轉。', - 'libPathInvalid' => 'image 程式庫的路徑不正確,請在圖像的偏好設定中(preferences)設定正確的路徑。 {0, string)', - 'imageProcessFailed' => '圖像處理失敗,請確定您的伺服器支援您所選擇的協議,並且 image 程式庫所設定的路徑正確。', - 'rotationAngleRequired' => '您必須設定旋轉角度才能執行旋轉圖像功能。', - 'invalidPath' => '圖像的路徑不正確。', - 'copyFailed' => '圖像複製失敗。', - 'missingFont' => '找不到您所設定的字體。', - 'saveFailed' => '儲存圖像失敗,請確定圖像和檔案目錄允許寫入。', - 'invalidDirection' => '圖像翻轉方向只能是 `vertical` 或 `horizontal` 。 目前的值為: {0}', - 'exifNotSupported' => 'PHP環境不支援讀取EXIF資料。', -]; diff --git a/app/Language/zh-TW/Language.php b/app/Language/zh-TW/Language.php deleted file mode 100644 index 3562644b..00000000 --- a/app/Language/zh-TW/Language.php +++ /dev/null @@ -1,42 +0,0 @@ - 'Get line 必須是字串、陣列,或是字串陣列。', -]; diff --git a/app/Language/zh-TW/Log.php b/app/Language/zh-TW/Log.php deleted file mode 100644 index 4de74d52..00000000 --- a/app/Language/zh-TW/Log.php +++ /dev/null @@ -1,42 +0,0 @@ - '{0} 是無效的紀錄層級(log level)。', -]; diff --git a/app/Language/zh-TW/Migrations.php b/app/Language/zh-TW/Migrations.php deleted file mode 100644 index 2216031f..00000000 --- a/app/Language/zh-TW/Migrations.php +++ /dev/null @@ -1,79 +0,0 @@ - '必須設定被遷移的資料表。', - 'disabled' => '遷移功能無法使用。請確定 app/Config/Migrations 文件中的 $enabled 是否為 true', - 'notFound' => '找不到需要遷移的檔案: ', - 'batchNotFound' => '找不到目標批次檔(Target batch):', - 'empty' => '沒有設定任何需要遷移的檔案。', - 'gap' => '該版本號碼中的遷移序列存在差異: ', - 'classNotFound' => '找不到遷移類別 "%s" 。', - 'missingMethod' => '遷移類別缺少 "%s" 方法。', - - // Migration Command - 'migHelpLatest' => "\t\t資料庫將遷移到最新的可用遷移(available migration)。", - 'migHelpCurrent' => "\t\t資料庫將遷移到設定中設定為'當前(current)'的版本。", - 'migHelpVersion' => "\t將資料庫遷移到版本 {v} 。", - 'migHelpRollback' => "\t執行所有遷移 'down' 方法至版本 0 。", - 'migHelpRefresh' => "\t\t刷新資料庫:執行解除安裝並且重新執行所有遷移。", - 'migHelpSeed' => "\t執行所有名為 [name] 的資料填充器(Seeder)。", - 'migCreate' => "\t新建一個名為 [name] 的遷移。", - 'nameMigration' => '命名遷移檔案。', - 'badCreateName' => '遷移檔案必須命名。', - 'writeError' => '嘗試創建檔案時出現錯誤。', - 'migNumberError' => '遷移版本號碼必須為三位數字,且序列中不能有任何空格。', - - 'latest' => '遷移到最新版本...', - 'generalFault' => '遷移失敗!', - 'migInvalidVersion' => '提供了無效的版本號碼。', - 'toVersionPH' => '正在遷移至 %s 版本號...', - 'toVersion' => '正在遷移至當前(current)版本...', - 'rollingBack' => '還原所有遷移: ', - 'noneFound' => '找不到遷移。', - 'on' => '遷移到: ', - 'migSeeder' => '資料填充器(Seeder) 名稱:', - 'migMissingSeeder' => '您必須提供一個資料填充器(Seeder)名稱。', - 'removed' => '還原至: ', - 'added' => '執行: ', - - 'version' => '版本', - 'filename' => '檔案名稱', -]; diff --git a/app/Language/zh-TW/Number.php b/app/Language/zh-TW/Number.php deleted file mode 100644 index e4c89358..00000000 --- a/app/Language/zh-TW/Number.php +++ /dev/null @@ -1,53 +0,0 @@ - 'TB', - 'gigabyteAbbr' => 'GB', - 'megabyteAbbr' => 'MB', - 'kilobyteAbbr' => 'KB', - 'bytes' => 'Bytes', - - // don't forget the space in front of these! - 'thousand' => ' 千', - 'million' => ' 百萬', - 'billion' => ' 億', - 'trillion' => ' 兆', - 'quadrillion' => ' 京', -]; diff --git a/app/Language/zh-TW/Pager.php b/app/Language/zh-TW/Pager.php deleted file mode 100644 index 173675dc..00000000 --- a/app/Language/zh-TW/Pager.php +++ /dev/null @@ -1,50 +0,0 @@ - '頁面導覽', - 'first' => '頁首', - 'previous' => '上一頁', - 'next' => '下一頁', - 'last' => '頁尾', - 'older' => '舊的', - 'newer' => '新的', - 'invalidTemplate' => '{0} 並不是分頁樣板.', - 'invalidPaginationGroup' => '{0} 並不是有效的分頁組。', -]; diff --git a/app/Language/zh-TW/RESTful.php b/app/Language/zh-TW/RESTful.php deleted file mode 100644 index 9222010d..00000000 --- a/app/Language/zh-TW/RESTful.php +++ /dev/null @@ -1,41 +0,0 @@ - "'{0}' 動詞(action)未執行。", -]; diff --git a/app/Language/zh-TW/Redirect.php b/app/Language/zh-TW/Redirect.php deleted file mode 100644 index 48c47007..00000000 --- a/app/Language/zh-TW/Redirect.php +++ /dev/null @@ -1,42 +0,0 @@ - '無法轉址(redirect)到 "{0}"。錯誤狀態碼:"{1}"', -]; diff --git a/app/Language/zh-TW/Router.php b/app/Language/zh-TW/Router.php deleted file mode 100644 index 9e47766a..00000000 --- a/app/Language/zh-TW/Router.php +++ /dev/null @@ -1,43 +0,0 @@ - '參數與預期型別不匹配。', - 'missingDefaultRoute' => '尚未在路由文件中指定默認路由,導致無法顯示內容。', -]; diff --git a/app/Language/zh-TW/Session.php b/app/Language/zh-TW/Session.php deleted file mode 100644 index 5838bccc..00000000 --- a/app/Language/zh-TW/Session.php +++ /dev/null @@ -1,46 +0,0 @@ - '`sessionSavePath` 必須設定資料庫中存在的資料表名稱。', - 'invalidSavePath' => "Session: 所設定的儲存路徑 '{0}' 不是資料夾、不存在,或是無法創建。", - 'writeProtectedSavePath' => "Session: PHP 無法寫入您所設定的儲存路徑 '{0}' 。", - 'emptySavePath' => 'Session: 沒有設定儲存路徑。', - 'invalidSavePathFormat' => 'Session: 無效的Redis儲存路徑: {0}', -]; diff --git a/app/Language/zh-TW/Time.php b/app/Language/zh-TW/Time.php deleted file mode 100644 index bd169367..00000000 --- a/app/Language/zh-TW/Time.php +++ /dev/null @@ -1,59 +0,0 @@ - '月份必須在 1 到 12 之間。 您所輸入的值: {0}', - 'invalidDay' => '日期必須在 1 到 31 之間。 您所輸入的值: {0}', - 'invalidOverDay' => '日期必須在 1 到 {0} 之間。 您所輸入的值: {1}', - 'invalidHours' => '小時必須在 0 到 23 之間。 您所輸入的值: {0}', - 'invalidMinutes' => '分鐘必須在 0 到 59 之間。 您所輸入的值: {0}', - 'invalidSeconds' => '秒數必須在 0 到 59 之間。 您所輸入的值: {0}', - 'years' => '{0, plural, =1{# year} other{# years}}', - 'months' => '{0, plural, =1{# month} other{# months}}', - 'weeks' => '{0, plural, =1{# week} other{# weeks}}', - 'days' => '{0, plural, =1{# day} other{# days}}', - 'hours' => '{0, plural, =1{# hour} other{# hours}}', - 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', - 'seconds' => '{0, plural, =1{# second} other{# seconds}}', - 'ago' => '{0} 以前', - 'inFuture' => '在 {0}', - 'yesterday' => '昨天', - 'tomorrow' => '明天', - 'now' => '當前', -]; diff --git a/app/Language/zh-TW/Validation.php b/app/Language/zh-TW/Validation.php deleted file mode 100644 index 656341da..00000000 --- a/app/Language/zh-TW/Validation.php +++ /dev/null @@ -1,95 +0,0 @@ - '驗證設定中沒有指定任何規則。', - 'ruleNotFound' => '{0} 不是一個有效的規則。', - 'groupNotFound' => '{0} 不是一個驗證規則群組。', - 'groupNotArray' => '{0} 規則群組的型別必須是陣列。', - 'invalidTemplate' => '{0} 不是一個有效的驗證樣板。', - - // Rule Messages - 'alpha' => '欄位 {field} 的組成只能是字母字元。', - 'alpha_dash' => '欄位 {field} 的組成只能是字母數字、底線,以及破折號。', - 'alpha_numeric' => '欄位 {field} 的組成只能是字母數字。', - 'alpha_numeric_space' => '欄位 {field} 的組成只能是字母數字以及空格。', - 'alpha_space' => '欄位 {field} 的組成只能是字母字元以及空格。', - 'decimal' => '欄位 {field} 的組成只能是十進位的數字。', - 'differs' => '欄位 {field} 必須與欄位 {param} 不同。', - 'equals' => '欄位 {field} 必須全等於欄位 {param}。', - 'exact_length' => '欄位 {field} 的長度必須剛好是 {param} 個字元。', - 'greater_than' => '欄位 {field} 中的數字必須大於 {param}。', - 'greater_than_equal_to' => '欄位 {field} 中的數字必須大於或等於 {param}。', - 'in_list' => '欄位 {field} 必須是下列內容其中之一: {param}。', - 'integer' => '欄位 {field} 的型別必須是整數。', - 'is_natural' => '欄位 {field} 只能是數字。', - 'is_natural_no_zero' => '欄位 {field} 只能是大於零的數字。', - 'is_not_unique' => 'The {field} field must contain a previously existing value in the database.', - 'is_unique' => '欄位 {field} 必須是唯一的值。', - 'less_than' => '欄位 {field} 中的數字必須小於 {param}。', - 'less_than_equal_to' => '欄位 {field} 中的數字必須小於或等於 {param}。', - 'matches' => '欄位 {field} 與欄位 {param} 不匹配。', - 'max_length' => '欄位 {field} 的長度不能超過 {param} 個字元。', - 'min_length' => '欄位 {field} 的長度必須至少是 {param} 的字元。', - 'not_equals' => '欄位 {field} 不能是: {param}.', - 'numeric' => '欄位 {field} 必須包含數字。', - 'regex_match' => '欄位 {field} 的格式不正確。', - 'required' => '欄位 {field} 是必填欄位。', - 'required_with' => '如果 {param} 存在時,則欄位 {field} 為必填欄位。', - 'required_without' => '如果 {param} 不存在時,則欄位 {field} 為必填欄位。', - 'timezone' => '欄位 {field} 必須是有效的時區。', - 'valid_base64' => '欄位 {field} 必須是有效的 base64 字串。', - 'valid_email' => '欄位 {field} 必須是有效的 email 字串。', - 'valid_emails' => '欄位 {field} 中的 email 必須都是有效的email。', - 'valid_ip' => '欄位 {field} 必須是有效的 IP。', - 'valid_url' => '欄位 {field} 必須是有效的 URL.', - 'valid_date' => '欄位 {field} 必須是有效的日期格式', - - // Credit Cards - 'valid_cc_num' => '欄位 {field} 並不是一組有效的信用卡號碼。', - - // Files - 'uploaded' => '欄位 {field} 並非上傳檔案的格式。', - 'max_size' => '欄位 {field} 的檔案大小超過最大值。', - 'is_image' => '欄位 {field} 並不是圖片擋。', - 'mime_in' => '欄位 {field} 的類型並非: mime 。', - 'ext_in' => '欄位 {field} 並不是有效的擴充檔案。', - 'max_dims' => '欄位 {field} 並不是有效的圖像,或者是太寬、太高。', -]; diff --git a/app/Language/zh-TW/View.php b/app/Language/zh-TW/View.php deleted file mode 100644 index 3b93724d..00000000 --- a/app/Language/zh-TW/View.php +++ /dev/null @@ -1,46 +0,0 @@ - '{class}::{method} 不是有效的方法。', - 'missingCellParameters' => '{class}::{method} 沒有參數。', - 'invalidCellParameter' => '{0} 不是有效的參數名稱。', - 'noCellClass' => '沒有提供視圖元件類別。', - 'invalidCellClass' => '無法找到視圖元件類別: {0}.', - 'tagSyntaxError' => '您的解析器標籤(Parser tags)中存在著語法錯誤: {0}', -]; diff --git a/app/Libraries/.gitkeep b/app/Libraries/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Models/Model_attributes.php b/app/Models/Model_attributes.php deleted file mode 100644 index 1c8b4b79..00000000 --- a/app/Models/Model_attributes.php +++ /dev/null @@ -1,75 +0,0 @@ -where('active', 1)->findAll(); - } - - public function countAttributeValue($id = null) - { - if($id) { - $sql = "SELECT COUNT(*) as Count FROM attribute_value WHERE attribute_parent_id = ?"; - $query = $this->db->query($sql, array($id)); - $row = $query->getRow(); - return $count = $row->Count; - } - } - - /* get the attribute value data */ - // $id = attribute_parent_id - public function getAttributeValueData($id = null) - { - $sql = "SELECT * FROM attribute_value WHERE attribute_parent_id = ?"; - $query = $this->db->query($sql, array($id)); - return $query->getResult(); - } - - public function getAttributeValueById($id = null) - { - $sql = "SELECT * FROM attribute_value WHERE id = ?"; - $query = $this->db->query($sql, array($id)); - return $query->getRow(); - } - - public function createValue($data) - { - if($data) { - $builder = $this->db->table('attribute_value'); - return $builder->insert($data); - } - } - - public function updateValue($data, $id) - { - if($data && $id) { - $builder = $this->db->table('attribute_value'); - $builder->where('id', $id); - return $builder->update($data); - } - } - - public function removeValue($id) - { - if($id) { - $builder = $this->db->table('attribute_value'); - $builder->where('id', $id); - return $builder->delete(); - } - } - -} \ No newline at end of file diff --git a/app/Models/Model_brands.php b/app/Models/Model_brands.php deleted file mode 100644 index 16331a88..00000000 --- a/app/Models/Model_brands.php +++ /dev/null @@ -1,63 +0,0 @@ -where('active', 1)->findAll(); - } - - /* get the brand data */ - public function getBrandData($id = null) - { - if($id) { - $sql = "SELECT * FROM brands WHERE id = ?"; - $query = $this->db->query($sql, array($id)); - return $query->getRow(); - } - - $sql = "SELECT * FROM brands"; - $query = $this->db->query($sql); - return $query->getResult(); - } - - public function create($data) - { - if($data) { - $builder = $this->db->table('brands'); - return $builder->insert($data); - } - } - - public function up($data, $id) - { - if($data && $id) { - $builder = $this->db->table('brands'); - $builder->where('id', $id); - return $builder->update($data); - } - } - - public function remove($id) - { - if($id) { - $builder = $this->db->table('brands'); - $builder->where('id', $id); - return $builder->delete(); - } - } - -} \ No newline at end of file diff --git a/app/Models/Model_category.php b/app/Models/Model_category.php deleted file mode 100644 index 0415d2f3..00000000 --- a/app/Models/Model_category.php +++ /dev/null @@ -1,23 +0,0 @@ -where('active', 1)->findAll(); - } - -} \ No newline at end of file diff --git a/app/Models/Model_company.php b/app/Models/Model_company.php deleted file mode 100644 index 05ec5605..00000000 --- a/app/Models/Model_company.php +++ /dev/null @@ -1,17 +0,0 @@ -db->query($sql, array($groupId)); - return $query->getRow(); - } - - $sql = "SELECT * FROM groups WHERE id != ?"; - $query = $this->db->query($sql, array(1)); - return $query->getResult(); - } - - public function existInUserGroup($id) - { - $sql = "SELECT * FROM user_group WHERE group_id = ?"; - $query = $this->db->query($sql, array($id)); - return null !== $query->getRow(); - } - - public function getUserGroupByUserId($user_id) - { - $sql = "SELECT * FROM user_group - INNER JOIN groups ON groups.id = user_group.group_id - WHERE user_group.user_id = ?"; - $query = $this->db->query($sql, array($user_id)); - $result = $query->getRow(); - - return $result; - - } -} \ No newline at end of file diff --git a/app/Models/Model_orders.php b/app/Models/Model_orders.php deleted file mode 100644 index f98bc497..00000000 --- a/app/Models/Model_orders.php +++ /dev/null @@ -1,191 +0,0 @@ -db->query($sql, array($order_id)); - return $query->getResult(); - } - - public function create() - { - $session = \Config\Services::session(); - $request = \Config\Services::request(); - $user_id = $session->id; - $bill_no = 'BILPR-'.strtoupper(substr(md5(uniqid(mt_rand(), true)), 0, 4)); - $data = array( - 'bill_no' => $bill_no, - 'customer_name' => $request->getPost('customer_name'), - 'customer_address' => $request->getPost('customer_address'), - 'customer_phone' => $request->getPost('customer_phone'), - 'date_time' => strtotime(date('Y-m-d h:i:s a')), - 'gross_amount' => $request->getPost('gross_amount_value'), - 'service_charge_rate' => $request->getPost('service_charge_rate'), - 'service_charge' => ($request->getPost('service_charge_value') > 0) ?$request->getPost('service_charge_value'):0, - 'vat_charge_rate' => $request->getPost('vat_charge_rate'), - 'vat_charge' => ($request->getPost('vat_charge_value') > 0) ? $request->getPost('vat_charge_value') : 0, - 'net_amount' => $request->getPost('net_amount_value'), - 'discount' => $request->getPost('discount'), - 'paid_status' => 2, - 'user_id' => $user_id - ); - - $order_id = $this->insert($data,true); - - $this->model_products = new Model_products(); - - $count_product = count($request->getPost('product')); - for($x = 0; $x < $count_product; $x++) { - $items = array( - 'order_id' => $order_id, - 'product_id' => $request->getPost('product')[$x], - 'qty' => $request->getPost('qty')[$x], - 'rate' => $request->getPost('rate_value')[$x], - 'amount' => $request->getPost('amount_value')[$x], - ); - - $builder = $this->db->table('orders_item'); - $builder->insert($items); - - // now decrease the stock from the product - $product_data = $this->model_products->find($request->getPost('product')[$x]); - $qty = (int) $product_data->qty - (int) $request->getPost('qty')[$x]; - - $update_product = array('qty' => $qty); - - - $this->model_products->update($request->getPost('product')[$x], $update_product); - } - - return ($order_id) ? $order_id : false; - } - - public function countOrderItem($order_id) - { - if($order_id) { - $sql = "SELECT COUNT(*) as Count FROM orders_item WHERE order_id = ?"; - $query = $this->db->query($sql, array($order_id)); - $row = $query->getRow(); - return $count = $row->Count; - } - } - - public function up($id) - { - if($id) { - $session = \Config\Services::session(); - $request = \Config\Services::request(); - $user_id = $session->id; - // fetch the order data - - $data = array( - 'customer_name' => $request->getPost('customer_name'), - 'customer_address' => $request->getPost('customer_address'), - 'customer_phone' => $request->getPost('customer_phone'), - 'gross_amount' => $request->getPost('gross_amount_value'), - 'service_charge_rate' => $request->getPost('service_charge_rate'), - 'service_charge' => ($request->getPost('service_charge_value') > 0) ? $request->getPost('service_charge_value'):0, - 'vat_charge_rate' => $request->getPost('vat_charge_rate'), - 'vat_charge' => ($request->getPost('vat_charge_value') > 0) ? $request->getPost('vat_charge_value') : 0, - 'net_amount' => $request->getPost('net_amount_value'), - 'discount' => $request->getPost('discount'), - 'paid_status' => $request->getPost('paid_status'), - 'user_id' => $user_id - ); - - $update = $this->update($id, $data); - - // now the order item - // first we will replace the product qty to original and subtract the qty again - $this->model_products = new Model_products(); - $get_order_item = $this->getOrdersItemData($id); - foreach ($get_order_item as $k => $v) { - $product_id = $v->product_id; - $qty = $v->qty; - // get the product - $product_data = $this->model_products->find($product_id); - if(isset($product_data)){ - $update_qty = $qty + $product_data->qty; - $update_product_data = array('qty' => $update_qty); - - // update the product qty - $this->model_products->update($product_id, $update_product_data); - } - } - - // now remove the order item data - $builder = $this->db->table('orders_item'); - $builder->where('order_id', $id); - $builder->delete(); - - // now decrease the product qty - $count_product = count($request->getPost('product')); - for($x = 0; $x < $count_product; $x++) { - $items = array( - 'order_id' => $id, - 'product_id' => $request->getPost('product')[$x], - 'qty' => $request->getPost('qty')[$x], - 'rate' => $request->getPost('rate_value')[$x], - 'amount' => $request->getPost('amount_value')[$x], - ); - $builder = $this->db->table('orders_item'); - $builder->insert($items); - - // now decrease the stock from the product - $product_data = $this->model_products->find($request->getPost('product')[$x]); - $qty = (int) $product_data->qty - (int) $request->getPost('qty')[$x]; - - $update_product = array('qty' => $qty); - $this->model_products->update($request->getPost('product')[$x], $update_product); - } - - return true; - } - } - - - - public function remove($id) - { - if($id) { - $builder = $this->db->table('orders'); - $builder->where('id', $id); - $delete = $builder->delete(); - $builder = $this->db->table('orders_item'); - $builder->where('order_id', $id); - $delete_item = $builder->delete(); - return ($delete == true && $delete_item) ? true : false; - } - } - - public function countTotalPaidOrders() - { - $sql = "SELECT COUNT(*) as Count FROM orders WHERE paid_status = ?"; - $query = $this->db->query($sql, array(1)); - $row = $query->getRow(); - return $count = $row->Count; - } - -} \ No newline at end of file diff --git a/app/Models/Model_products.php b/app/Models/Model_products.php deleted file mode 100644 index 173cf4bf..00000000 --- a/app/Models/Model_products.php +++ /dev/null @@ -1,30 +0,0 @@ -where('availability', 1)->findAll(); - } - - public function countTotalProducts() - { - $sql = "SELECT COUNT(*) as Count FROM products"; - $query = $this->db->query($sql); - $row = $query->getRow(); - return $count = $row->Count; - } - -} \ No newline at end of file diff --git a/app/Models/Model_stores.php b/app/Models/Model_stores.php deleted file mode 100644 index ad63ebbe..00000000 --- a/app/Models/Model_stores.php +++ /dev/null @@ -1,31 +0,0 @@ -where('active', 1)->findAll(); - } - - public function countTotalStores() - { - $sql = "SELECT COUNT(*) as Count FROM stores WHERE active = ?"; - $query = $this->db->query($sql, array(1)); - $row = $query->getRow(); - return $count = $row->Count; - } - -} \ No newline at end of file diff --git a/app/Models/Model_users.php b/app/Models/Model_users.php deleted file mode 100644 index 535d790b..00000000 --- a/app/Models/Model_users.php +++ /dev/null @@ -1,91 +0,0 @@ -db->query($sql, array($userId)); - $result = $query->getRow(); - } - - $sql = "SELECT * FROM users WHERE id != ?"; - $query = $this->db->query($sql, array(1)); - return $query->getResult(); - } - - public function getUserGroup($userId = null) - { - if($userId) { - $builder = $this->db->table("user_group"); - $builder->where("user_id", $userId); - $query = $builder->get(); - $result = $query->getRow(); - - $group_id = $result->group_id; - $g_sql = "SELECT * FROM groups WHERE id = ?"; - $g_query = $this->db->query($g_sql, array($group_id)); - $q_result = $g_query->getRow(); - return $q_result; - } - } - - public function create($data = '', $group_id = null) - { - - if($data && $group_id) { - $builder = $this->db->table('users'); - $create = $builder->insert($data); - $user_id = $this->db->insertID(); - - $group_data = array( - 'user_id' => $user_id, - 'group_id' => $group_id - ); - $builder = $this->db->table('user_group'); - $group_data = $builder->insert($group_data); - - return ($create == true && $group_data) ? true : false; - } - } - - public function edit($data = array(), $id = null, $group_id = null) - { - $builder = $this->db->table('users'); - $builder->where('id', $id); - $update = $builder->update($data); - - if($group_id) { - // user group - $update_user_group = array('group_id' => $group_id); - $builder = $this->db->table('user_group'); - $builder->where('user_id', $id); - $user_group = $builder->update($update_user_group); - return ($update == true && $user_group == true) ? true : false; - } - - return ($update == true) ? true : false; - } - - public function countTotalUsers() - { - $sql = "SELECT COUNT(*) as Count FROM users"; - $query = $this->db->query($sql); - $row = $query->getRow(); - return $count = $row->Count; - } - -} \ No newline at end of file diff --git a/app/ThirdParty/.gitkeep b/app/ThirdParty/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/Views/errors/cli/error_404.php b/app/Views/errors/cli/error_404.php deleted file mode 100644 index d5bccb43..00000000 --- a/app/Views/errors/cli/error_404.php +++ /dev/null @@ -1,6 +0,0 @@ - -Message: -Filename: getFile(), "\n"; ?> -Line Number: getLine(); ?> - - - - Backtrace: - getTrace() as $error): ?> - - - - - - diff --git a/app/Views/errors/cli/production.php b/app/Views/errors/cli/production.php deleted file mode 100644 index 7db744ec..00000000 --- a/app/Views/errors/cli/production.php +++ /dev/null @@ -1,5 +0,0 @@ - - - - - 404 Page Not Found - - - - -
-

404 - File Not Found

- -

- - - - Sorry! Cannot seem to find the page you were looking for. - -

-
- - diff --git a/app/Views/errors/html/error_exception.php b/app/Views/errors/html/error_exception.php deleted file mode 100644 index 09fddcbd..00000000 --- a/app/Views/errors/html/error_exception.php +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - - - <?= htmlspecialchars($title, ENT_SUBSTITUTE, 'UTF-8') ?> - - - - - - - -
-
-

getCode() ? ' #' . $exception->getCode() : '') ?>

-

- getMessage() ?> - getMessage())) ?>" - rel="noreferrer" target="_blank">search → -

-
-
- - -
-

at line

- - -
- -
- -
- -
- - - -
- - -
- -
    - $row) : ?> - -
  1. -

    - - - - - {PHP internal code} - - - - -   —   - - - ( arguments ) -

    - - - getParameters(); - } - foreach ($row['args'] as $key => $value) : ?> - - - - - - -
    name : "#$key", ENT_SUBSTITUTE, 'UTF-8') ?>
    -
    - - () - - - - -   —   () - -

    - - - -
    - -
    - -
  2. - - -
- -
- - -
- - - -

$

- - - - - - - - - - $value) : ?> - - - - - - -
KeyValue
- - - - ' . print_r($value, true) ?> - -
- - - - - - -

Constants

- - - - - - - - - - $value) : ?> - - - - - - -
KeyValue
- - - - ' . print_r($value, true) ?> - -
- -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pathuri ?>
HTTP MethodgetMethod(true) ?>
IP AddressgetIPAddress() ?>
Is AJAX Request?isAJAX() ? 'yes' : 'no' ?>
Is CLI Request?isCLI() ? 'yes' : 'no' ?>
Is Secure Request?isSecure() ? 'yes' : 'no' ?>
User AgentgetUserAgent()->getAgentString() ?>
- - - - - - - - -

$

- - - - - - - - - - $value) : ?> - - - - - - -
KeyValue
- - - - ' . print_r($value, true) ?> - -
- - - - - -
- No $_GET, $_POST, or $_COOKIE Information to show. -
- - - - getHeaders(); ?> - - -

Headers

- - - - - - - - - - - - - - - - - - - - -
HeaderValue
getName(), 'html') ?>getValueLine(), 'html') ?>
- - -
- - - setStatusCode(http_response_code()); - ?> -
- - - - - -
Response StatusgetStatusCode() . ' - ' . $response->getReason() ?>
- - getHeaders(); ?> - - - -

Headers

- - - - - - - - - - $value) : ?> - - - - - - -
HeaderValue
getHeaderLine($name), 'html') ?>
- - -
- - -
- - -
    - -
  1. - -
-
- - -
- - - - - - - - - - - - - - - - -
Memory Usage
Peak Memory Usage:
Memory Limit:
- -
- -
- -
- - - - - diff --git a/app/Views/errors/html/production.php b/app/Views/errors/html/production.php deleted file mode 100644 index cca49c2e..00000000 --- a/app/Views/errors/html/production.php +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - Whoops! - - - - - -
- -

Whoops!

- -

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

- -
- - - - diff --git a/app/config/autoload.php b/app/config/autoload.php deleted file mode 100644 index eaecfdf0..00000000 --- a/app/config/autoload.php +++ /dev/null @@ -1,66 +0,0 @@ - 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/constants.php b/app/config/constants.php deleted file mode 100644 index b25f71cd..00000000 --- a/app/config/constants.php +++ /dev/null @@ -1,77 +0,0 @@ - '', - 'hostname' => 'localhost', - 'username' => 'root', - 'password' => '', - 'database' => 'stock', - '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 deleted file mode 100644 index 67d5dd20..00000000 --- a/app/config/doctypes.php +++ /dev/null @@ -1,33 +0,0 @@ - '', - '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/mimes.php b/app/config/mimes.php deleted file mode 100644 index 41014d40..00000000 --- a/app/config/mimes.php +++ /dev/null @@ -1,530 +0,0 @@ - [ - '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/routes.php b/app/config/routes.php deleted file mode 100644 index e70901aa..00000000 --- a/app/config/routes.php +++ /dev/null @@ -1,52 +0,0 @@ -setDefaultNamespace('App\Controllers'); -// $routes->setDefaultController('Auth'); -// $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('/', 'Auth::login'); -$routes->match(['get', 'post'], 'file/(:segment)', 'File::index/$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/application/.DS_Store b/application/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..07d6cc69facb7d092326dc4aad6bdeaa38fbbfab GIT binary patch literal 12292 zcmeHNO>h)N6n-xxVP;6ofcy=xutkgp43LdU0E?d`8!S?wL^dG_0mJOhNJb|!ac6cH zh{05OQ42j-1s0qvy-0De#L^QNF9-)cU`o&`4<0<|#iOOARle??O(h$1FqTv*bZ>RP z?$`aMr{8w>`(F0|0Cwc91VAGIC=?mhYXB-WfcP>hObe`@#aUqqagZX(0p)c73v6&9 zaDzf>R%^+S8ju=TNE)c1mtpI-l43QCfIofxW?Vl5Q1NbN)OCWex%oa;EUB!jUaF|t zGUHH}cDUck`d->OZx88p!LVQKqGET>E;x3vFYCMc5ic0hmuF2kn|IC7KH$2nanK*y zXG4}d5%{?<#TyRkdOom^+0@P{*qzjxL|3pU9UToF-wTf0xqxVWvRUX)yJYWV{+p`?+OkcqXoQ!Mtc;<+`9Gg^i za`l?EwZ=MQL#e7Ngq2Agf8` zY)UOfnbaSttJNBft*UM+JpqkZaJFeXR6S68UUoc-bBq?PRnaZA*EKV?D_A?V-HLu# z?JJ033+4)KucG#6{gDwGWWc-KpEQgYShq*aAUry1d-O`Tsqfk~Ygc#DD-E!^1D3^J zNU2YIQ6vR@ejGFhKu(5iY_dxC|e_b@&`^!Y%k3zJYJy9^8i?;b-_2 zeuqEcPxuR~u?{!jM%;vP+=6Y`jyo}l2QY=5*oDV1jlFmr2hl?%? zyohh(JNO>Hk00YFcmqGhn|KSq#M^iW@8UhYFW$0(%}f@K2vSP%`-gJSH2h_dr6uY? z2sxrI{cOrHV>=ox)`5Rotg(a7XsOwYl^z&rSShpjB~42zH6S(c5Nm+#4{?f&CL=l_ zDBn6LVGx4VGYG*0<;f4=ym&;D5uFf}i;@f%B`QRjH4^n)ocQsmoQ&v%ph6r_hyzAF zW8|Tr5C@F&=732-WhylwH85KP)x;{t{_}wo4-or*S0e!bqbpZ!tZ&@bvU5*z3Ko~4 z;pv#1gK&YeIr=W4YYvBJzoB(O&|-QOVSa_zKGmvedL=mpqITDAs;wsYFCL|> z*Y>Nb4!j$!A(m1V9m~P|oKXH6+<-6OE4WJ#{s;I8eu3W*2)@_gYJ%@^tjEW&0k`80 zOkfMP;$GYr0r?~N9CqXL1m*|v6b|8OH1Q>L3CjC8isuN*kK+Y=4d1{w@ht-Nm+&%y z`YU)9Kg5s3Jez{>hi1+@yjDKx3hA8Z`raAhv;Dma3g8gBEkckf2GMkcJ0)~`ujGm< znxfTer_$torb9E#2OVZ^kd?a4a5xj?dwk!W%A1+vX5#6Y^*KO-V{%?w~jZ($9A<)zAdqPd|Xx5G$i(RogO)N ze(crp3s=N&F)~$9C(2Xl)tN(Nr)ARHmfrTl^tNZsRcRfhb-@4II!vQ z0jUA00jUA00jYucYM_b)=eSr{V6InUS4&g8rMdk-yIyk)SGr+zPbx1x7wDzu+{<*H z_kZ%hP9E6(s{^|^w#_p4Y{psgqO>53)1m$8>7Ge+V WBLI0}H~$MeY5&>Og{zCi{{IcSn)Cet literal 0 HcmV?d00001 diff --git a/app/.htaccess b/application/.htaccess similarity index 90% rename from app/.htaccess rename to application/.htaccess index f24db0ac..6c63ed4c 100644 --- a/app/.htaccess +++ b/application/.htaccess @@ -3,4 +3,4 @@ Deny from all - + \ No newline at end of file diff --git a/app/Models/index.html b/application/cache/index.html similarity index 100% rename from app/Models/index.html rename to application/cache/index.html diff --git a/application/config/autoload.php b/application/config/autoload.php new file mode 100644 index 00000000..9e4e03bc --- /dev/null +++ b/application/config/autoload.php @@ -0,0 +1,135 @@ + 'ua'); +*/ +$autoload['libraries'] = array('session', 'form_validation', 'database'); + +/* +| ------------------------------------------------------------------- +| Auto-load Drivers +| ------------------------------------------------------------------- +| These classes are located in system/libraries/ or in your +| application/libraries/ directory, but are also placed inside their +| own subdirectory and they extend the CI_Driver_Library class. They +| offer multiple interchangeable driver options. +| +| Prototype: +| +| $autoload['drivers'] = array('cache'); +| +| You can also supply an alternative property name to be assigned in +| the controller: +| +| $autoload['drivers'] = array('cache' => 'cch'); +| +*/ +$autoload['drivers'] = array(); + +/* +| ------------------------------------------------------------------- +| Auto-load Helper Files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['helper'] = array('url', 'file'); +*/ +$autoload['helper'] = array('url', 'form'); + +/* +| ------------------------------------------------------------------- +| Auto-load Config files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['config'] = array('config1', 'config2'); +| +| NOTE: This item is intended for use ONLY if you have created custom +| config files. Otherwise, leave it blank. +| +*/ +$autoload['config'] = array(); + +/* +| ------------------------------------------------------------------- +| Auto-load Language files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['language'] = array('lang1', 'lang2'); +| +| NOTE: Do not include the "_lang" part of your file. For example +| "codeigniter_lang.php" would be referenced as array('codeigniter'); +| +*/ +$autoload['language'] = array(); + +/* +| ------------------------------------------------------------------- +| Auto-load Models +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['model'] = array('first_model', 'second_model'); +| +| You can also supply an alternative model name to be assigned +| in the controller: +| +| $autoload['model'] = array('first_model' => 'first'); +*/ +$autoload['model'] = array(); diff --git a/application/config/config.php b/application/config/config.php new file mode 100644 index 00000000..97d1ae8d --- /dev/null +++ b/application/config/config.php @@ -0,0 +1,523 @@ +]+$/i +| +| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! +| +*/ +$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; + +/* +|-------------------------------------------------------------------------- +| Enable Query Strings +|-------------------------------------------------------------------------- +| +| By default CodeIgniter uses search-engine friendly segment based URLs: +| example.com/who/what/where/ +| +| You can optionally enable standard query string based URLs: +| example.com?who=me&what=something&where=here +| +| Options are: TRUE or FALSE (boolean) +| +| The other items let you set the query string 'words' that will +| invoke your controllers and its functions: +| example.com/index.php?c=controller&m=function +| +| Please note that some of the helpers won't work as expected when +| this feature is enabled, since CodeIgniter is designed primarily to +| use segment based URLs. +| +*/ +$config['enable_query_strings'] = FALSE; +$config['controller_trigger'] = 'c'; +$config['function_trigger'] = 'm'; +$config['directory_trigger'] = 'd'; + +/* +|-------------------------------------------------------------------------- +| Allow $_GET array +|-------------------------------------------------------------------------- +| +| By default CodeIgniter enables access to the $_GET array. If for some +| reason you would like to disable it, set 'allow_get_array' to FALSE. +| +| WARNING: This feature is DEPRECATED and currently available only +| for backwards compatibility purposes! +| +*/ +$config['allow_get_array'] = TRUE; + +/* +|-------------------------------------------------------------------------- +| Error Logging Threshold +|-------------------------------------------------------------------------- +| +| You can enable error logging by setting a threshold over zero. The +| threshold determines what gets logged. Threshold options are: +| +| 0 = Disables logging, Error logging TURNED OFF +| 1 = Error Messages (including PHP errors) +| 2 = Debug Messages +| 3 = Informational Messages +| 4 = All Messages +| +| You can also pass an array with threshold levels to show individual error types +| +| array(2) = Debug Messages, without Error Messages +| +| For a live site you'll usually only enable Errors (1) to be logged otherwise +| your log files will fill up very fast. +| +*/ +$config['log_threshold'] = 0; + +/* +|-------------------------------------------------------------------------- +| Error Logging Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/logs/ directory. Use a full server path with trailing slash. +| +*/ +$config['log_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Log File Extension +|-------------------------------------------------------------------------- +| +| The default filename extension for log files. The default '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 'php'. +| +*/ +$config['log_file_extension'] = ''; + +/* +|-------------------------------------------------------------------------- +| Log File Permissions +|-------------------------------------------------------------------------- +| +| 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.) +*/ +$config['log_file_permissions'] = 0644; + +/* +|-------------------------------------------------------------------------- +| Date Format for Logs +|-------------------------------------------------------------------------- +| +| Each item that is logged has an associated date. You can use PHP date +| codes to set your own date formatting +| +*/ +$config['log_date_format'] = 'Y-m-d H:i:s'; + +/* +|-------------------------------------------------------------------------- +| Error Views Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/views/errors/ directory. Use a full server path with trailing slash. +| +*/ +$config['error_views_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Cache Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/cache/ directory. Use a full server path with trailing slash. +| +*/ +$config['cache_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Cache Include Query String +|-------------------------------------------------------------------------- +| +| Whether to take the URL query string into consideration when generating +| output cache files. Valid options are: +| +| FALSE = Disabled +| TRUE = Enabled, take all query parameters into account. +| Please be aware that this may result in numerous cache +| files generated for the same page over and over again. +| array('q') = Enabled, but only take into account the specified list +| of query parameters. +| +*/ +$config['cache_query_string'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Encryption Key +|-------------------------------------------------------------------------- +| +| If you use the Encryption class, you must set an encryption key. +| See the user guide for more info. +| +| https://codeigniter.com/user_guide/libraries/encryption.html +| +*/ +$config['encryption_key'] = 'Go87NSzqqq96Dq2jcjnvhVUCpKPeP2ea'; + +/* +|-------------------------------------------------------------------------- +| Session Variables +|-------------------------------------------------------------------------- +| +| 'sess_driver' +| +| The storage driver to use: files, database, redis, memcached +| +| 'sess_cookie_name' +| +| The session cookie name, must contain only [0-9a-z_-] characters +| +| 'sess_expiration' +| +| The number of SECONDS you want the session to last. +| Setting to 0 (zero) means expire when the browser is closed. +| +| 'sess_save_path' +| +| The location to save sessions to, driver dependent. +| +| For the 'files' driver, it's a path to a writable directory. +| WARNING: Only absolute paths are supported! +| +| For the 'database' driver, it's a table name. +| Please read up the manual for the format with other session drivers. +| +| IMPORTANT: You are REQUIRED to set a valid save path! +| +| 'sess_match_ip' +| +| Whether to match the user's IP address when reading the session data. +| +| WARNING: If you're using the database driver, don't forget to update +| your session table's PRIMARY KEY when changing this setting. +| +| 'sess_time_to_update' +| +| How many seconds between CI regenerating the session ID. +| +| 'sess_regenerate_destroy' +| +| Whether to destroy session data associated with the old session ID +| when auto-regenerating the session ID. When set to FALSE, the data +| will be later deleted by the garbage collector. +| +| Other session cookie settings are shared with the rest of the application, +| except for 'cookie_prefix' and 'cookie_httponly', which are ignored here. +| +*/ +$config['sess_driver'] = 'files'; +$config['sess_cookie_name'] = 'ci_session'; +$config['sess_expiration'] = 7200; +$config['sess_save_path'] = NULL; +$config['sess_match_ip'] = FALSE; +$config['sess_time_to_update'] = 300; +$config['sess_regenerate_destroy'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Cookie Related Variables +|-------------------------------------------------------------------------- +| +| 'cookie_prefix' = Set a cookie name prefix if you need to avoid collisions +| 'cookie_domain' = Set to .your-domain.com for site-wide cookies +| 'cookie_path' = Typically will be a forward slash +| 'cookie_secure' = Cookie will only be set if a secure HTTPS connection exists. +| 'cookie_httponly' = Cookie will only be accessible via HTTP(S) (no javascript) +| +| Note: These settings (with the exception of 'cookie_prefix' and +| 'cookie_httponly') will also affect sessions. +| +*/ +$config['cookie_prefix'] = ''; +$config['cookie_domain'] = ''; +$config['cookie_path'] = '/'; +$config['cookie_secure'] = FALSE; +$config['cookie_httponly'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Standardize newlines +|-------------------------------------------------------------------------- +| +| Determines whether to standardize newline characters in input data, +| meaning to replace \r\n, \r, \n occurrences with the PHP_EOL value. +| +| WARNING: This feature is DEPRECATED and currently available only +| for backwards compatibility purposes! +| +*/ +$config['standardize_newlines'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Global XSS Filtering +|-------------------------------------------------------------------------- +| +| Determines whether the XSS filter is always active when GET, POST or +| COOKIE data is encountered +| +| WARNING: This feature is DEPRECATED and currently available only +| for backwards compatibility purposes! +| +*/ +$config['global_xss_filtering'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Cross Site Request Forgery +|-------------------------------------------------------------------------- +| Enables a CSRF cookie token to be set. When set to TRUE, token will be +| checked on a submitted form. If you are accepting user data, it is strongly +| recommended CSRF protection be enabled. +| +| 'csrf_token_name' = The token name +| 'csrf_cookie_name' = The cookie name +| 'csrf_expire' = The number in seconds the token should expire. +| 'csrf_regenerate' = Regenerate token on every submission +| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks +*/ +$config['csrf_protection'] = FALSE; +$config['csrf_token_name'] = 'csrf_test_name'; +$config['csrf_cookie_name'] = 'csrf_cookie_name'; +$config['csrf_expire'] = 7200; +$config['csrf_regenerate'] = TRUE; +$config['csrf_exclude_uris'] = array(); + +/* +|-------------------------------------------------------------------------- +| Output Compression +|-------------------------------------------------------------------------- +| +| Enables Gzip output compression for faster page loads. When enabled, +| the output class will test whether your server supports Gzip. +| Even if it does, however, not all browsers support compression +| so enable only if you are reasonably sure your visitors can handle it. +| +| Only used if zlib.output_compression is turned off in your php.ini. +| Please do not use it together with httpd-level output compression. +| +| VERY IMPORTANT: If you are getting a blank page when compression is enabled it +| means you are prematurely outputting something to your browser. It could +| even be a line of whitespace at the end of one of your scripts. For +| compression to work, nothing can be sent before the output buffer is called +| by the output class. Do not 'echo' any values with compression enabled. +| +*/ +$config['compress_output'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Master Time Reference +|-------------------------------------------------------------------------- +| +| Options are 'local' or any PHP supported timezone. This preference tells +| the system whether to use your server's local time as the master 'now' +| reference, or convert it to the configured one timezone. See the 'date +| helper' page of the user guide for information regarding date handling. +| +*/ +$config['time_reference'] = 'local'; + +/* +|-------------------------------------------------------------------------- +| Rewrite PHP Short Tags +|-------------------------------------------------------------------------- +| +| If your PHP installation does not have short tag support enabled CI +| can rewrite the tags on-the-fly, enabling you to utilize that syntax +| in your view files. Options are TRUE or FALSE (boolean) +| +| Note: You need to have eval() enabled for this to work. +| +*/ +$config['rewrite_short_tags'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Reverse Proxy IPs +|-------------------------------------------------------------------------- +| +| If your server is behind a reverse proxy, you must whitelist the proxy +| IP addresses from which CodeIgniter should trust headers such as +| HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify +| the visitor's IP address. +| +| You can use both an array or a comma-separated list of proxy addresses, +| as well as specifying whole subnets. Here are a few examples: +| +| Comma-separated: '10.0.1.200,192.168.5.0/24' +| Array: array('10.0.1.200', '192.168.5.0/24') +*/ +$config['proxy_ips'] = ''; diff --git a/application/config/constants.php b/application/config/constants.php new file mode 100644 index 00000000..18d3b4b7 --- /dev/null +++ b/application/config/constants.php @@ -0,0 +1,85 @@ +db->last_query() and profiling of DB queries. +| When you run a query, with this setting set to TRUE (default), +| CodeIgniter will store the SQL statement for debugging purposes. +| However, this may cause high memory usage, especially if you run +| a lot of SQL queries ... disable this to avoid that problem. +| +| The $active_group variable lets you choose which connection group to +| make active. By default there is only one group (the 'default' group). +| +| The $query_builder variables lets you determine whether or not to load +| the query builder class. +*/ +$active_group = 'default'; +$query_builder = TRUE; + +$db['default'] = array( + 'dsn' => '', + 'hostname' => 'localhost', + 'username' => 'root', + 'password' => '', + 'database' => 'stock', + 'dbdriver' => 'mysqli', + 'dbprefix' => '', + 'pconnect' => FALSE, + 'db_debug' => (ENVIRONMENT !== 'production'), + 'cache_on' => FALSE, + 'cachedir' => '', + 'char_set' => 'utf8', + 'dbcollat' => 'utf8_general_ci', + 'swap_pre' => '', + 'encrypt' => FALSE, + 'compress' => FALSE, + 'stricton' => FALSE, + 'failover' => array(), + 'save_queries' => TRUE +); diff --git a/application/config/doctypes.php b/application/config/doctypes.php new file mode 100644 index 00000000..59a7991e --- /dev/null +++ b/application/config/doctypes.php @@ -0,0 +1,24 @@ + '', + '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/application/config/foreign_chars.php b/application/config/foreign_chars.php new file mode 100644 index 00000000..ac406e3d --- /dev/null +++ b/application/config/foreign_chars.php @@ -0,0 +1,103 @@ + 'ae', + '/ö|œ/' => 'oe', + '/ü/' => 'ue', + '/Ä/' => 'Ae', + '/Ü/' => 'Ue', + '/Ö/' => 'Oe', + '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A', + '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a', + '/Б/' => 'B', + '/б/' => 'b', + '/Ç|Ć|Ĉ|Ċ|Č/' => 'C', + '/ç|ć|ĉ|ċ|č/' => 'c', + '/Д/' => 'D', + '/д/' => 'd', + '/Ð|Ď|Đ|Δ/' => 'Dj', + '/ð|ď|đ|δ/' => 'dj', + '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Э/' => 'E', + '/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|э/' => 'e', + '/Ф/' => 'F', + '/ф/' => 'f', + '/Ĝ|Ğ|Ġ|Ģ|Γ|Г|Ґ/' => 'G', + '/ĝ|ğ|ġ|ģ|γ|г|ґ/' => 'g', + '/Ĥ|Ħ/' => 'H', + '/ĥ|ħ/' => 'h', + '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Ы/' => 'I', + '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|ы|ї/' => 'i', + '/Ĵ/' => 'J', + '/ĵ/' => 'j', + '/Ķ|Κ|К/' => 'K', + '/ķ|κ|к/' => 'k', + '/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L', + '/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l', + '/М/' => 'M', + '/м/' => 'm', + '/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N', + '/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n', + '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O', + '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o', + '/П/' => 'P', + '/п/' => 'p', + '/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R', + '/ŕ|ŗ|ř|ρ|р/' => 'r', + '/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S', + '/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's', + '/Ț|Ţ|Ť|Ŧ|τ|Т/' => 'T', + '/ț|ţ|ť|ŧ|т/' => 't', + '/Þ|þ/' => 'th', + '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U', + '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u', + '/Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ|Й/' => 'Y', + '/ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ|й/' => 'y', + '/В/' => 'V', + '/в/' => 'v', + '/Ŵ/' => 'W', + '/ŵ/' => 'w', + '/Ź|Ż|Ž|Ζ|З/' => 'Z', + '/ź|ż|ž|ζ|з/' => 'z', + '/Æ|Ǽ/' => 'AE', + '/ß/' => 'ss', + '/IJ/' => 'IJ', + '/ij/' => 'ij', + '/Œ/' => 'OE', + '/ƒ/' => 'f', + '/ξ/' => 'ks', + '/π/' => 'p', + '/β/' => 'v', + '/μ/' => 'm', + '/ψ/' => 'ps', + '/Ё/' => 'Yo', + '/ё/' => 'yo', + '/Є/' => 'Ye', + '/є/' => 'ye', + '/Ї/' => 'Yi', + '/Ж/' => 'Zh', + '/ж/' => 'zh', + '/Х/' => 'Kh', + '/х/' => 'kh', + '/Ц/' => 'Ts', + '/ц/' => 'ts', + '/Ч/' => 'Ch', + '/ч/' => 'ch', + '/Ш/' => 'Sh', + '/ш/' => 'sh', + '/Щ/' => 'Shch', + '/щ/' => 'shch', + '/Ъ|ъ|Ь|ь/' => '', + '/Ю/' => 'Yu', + '/ю/' => 'yu', + '/Я/' => 'Ya', + '/я/' => 'ya' +); diff --git a/application/config/hooks.php b/application/config/hooks.php new file mode 100644 index 00000000..a8f38a5d --- /dev/null +++ b/application/config/hooks.php @@ -0,0 +1,13 @@ + array( + 'hostname' => '127.0.0.1', + 'port' => '11211', + 'weight' => '1', + ), +); diff --git a/application/config/migration.php b/application/config/migration.php new file mode 100644 index 00000000..4b585a65 --- /dev/null +++ b/application/config/migration.php @@ -0,0 +1,84 @@ +migration->current() this is the version that schema will +| be upgraded / downgraded to. +| +*/ +$config['migration_version'] = 0; + +/* +|-------------------------------------------------------------------------- +| Migrations Path +|-------------------------------------------------------------------------- +| +| Path to your migrations folder. +| Typically, it will be within your application path. +| Also, writing permission is required within the migrations path. +| +*/ +$config['migration_path'] = APPPATH.'migrations/'; diff --git a/application/config/mimes.php b/application/config/mimes.php new file mode 100644 index 00000000..01765333 --- /dev/null +++ b/application/config/mimes.php @@ -0,0 +1,183 @@ + array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'), + 'cpt' => 'application/mac-compactpro', + 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'), + 'bin' => array('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' => array('application/octet-stream', 'application/x-msdownload'), + 'class' => 'application/octet-stream', + 'psd' => array('application/x-photoshop', 'image/vnd.adobe.photoshop'), + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'), + 'ai' => array('application/pdf', 'application/postscript'), + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => array('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' => array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'), + 'pptx' => array('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' => array('application/x-httpd-php', 'application/php', 'application/x-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' => array('application/x-javascript', 'text/plain'), + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => array('application/x-tar', 'application/x-gzip-compressed'), + 'z' => 'application/x-compress', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'), + 'rar' => array('application/x-rar', 'application/rar', 'application/x-rar-compressed'), + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'), + 'aif' => array('audio/x-aiff', 'audio/aiff'), + 'aiff' => array('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' => array('audio/x-wav', 'audio/wave', 'audio/wav'), + 'bmp' => array('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', + 'jpeg' => array('image/jpeg', 'image/pjpeg'), + 'jpg' => array('image/jpeg', 'image/pjpeg'), + 'jpe' => array('image/jpeg', 'image/pjpeg'), + 'jp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'j2k' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpf' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpg2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpx' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpm' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'mj2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'mjp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'png' => array('image/png', 'image/x-png'), + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => array('text/css', 'text/plain'), + 'html' => array('text/html', 'text/plain'), + 'htm' => array('text/html', 'text/plain'), + 'shtml' => array('text/html', 'text/plain'), + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => array('text/plain', 'text/x-log'), + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => array('application/xml', 'text/xml', 'text/plain'), + 'xsl' => array('application/xml', 'text/xsl', 'text/xml'), + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'), + 'movie' => 'video/x-sgi-movie', + 'doc' => array('application/msword', 'application/vnd.ms-office'), + 'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'), + 'dot' => array('application/msword', 'application/vnd.ms-office'), + 'dotx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'), + 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'), + 'word' => array('application/msword', 'application/octet-stream'), + 'xl' => 'application/excel', + 'eml' => 'message/rfc822', + 'json' => array('application/json', 'text/json'), + 'pem' => array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'), + 'p10' => array('application/x-pkcs10', 'application/pkcs10'), + 'p12' => 'application/x-pkcs12', + 'p7a' => 'application/x-pkcs7-signature', + 'p7c' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), + 'p7m' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'crt' => array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'), + 'crl' => array('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' => array('application/pkix-cert', 'application/x-x509-ca-cert'), + '3g2' => 'video/3gpp2', + '3gp' => array('video/3gp', 'video/3gpp'), + 'mp4' => 'video/mp4', + 'm4a' => 'audio/x-m4a', + 'f4v' => array('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' => array('video/x-ms-wmv', 'video/x-ms-asf'), + 'au' => 'audio/x-au', + 'ac3' => 'audio/ac3', + 'flac' => 'audio/x-flac', + 'ogg' => array('audio/ogg', 'video/ogg', 'application/ogg'), + 'kmz' => array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'), + 'kml' => array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'), + 'ics' => 'text/calendar', + 'ical' => 'text/calendar', + 'zsh' => 'text/x-scriptzsh', + '7zip' => array('application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'), + 'cdr' => array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'), + 'wma' => array('audio/x-ms-wma', 'video/x-ms-asf'), + 'jar' => array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'), + 'svg' => array('image/svg+xml', 'application/xml', 'text/xml'), + 'vcf' => 'text/x-vcard', + 'srt' => array('text/srt', 'text/plain'), + 'vtt' => array('text/vtt', 'text/plain'), + 'ico' => array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'), + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'otf' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web' +); diff --git a/application/config/profiler.php b/application/config/profiler.php new file mode 100644 index 00000000..3db22e39 --- /dev/null +++ b/application/config/profiler.php @@ -0,0 +1,14 @@ + my_controller/index +| my-controller/my-method -> my_controller/my_method +*/ +$route['default_controller'] = 'auth/login'; +$route['404_override'] = ''; +$route['translate_uri_dashes'] = FALSE; diff --git a/application/config/smileys.php b/application/config/smileys.php new file mode 100644 index 00000000..abf9a898 --- /dev/null +++ b/application/config/smileys.php @@ -0,0 +1,64 @@ + array('grin.gif', '19', '19', 'grin'), + ':lol:' => array('lol.gif', '19', '19', 'LOL'), + ':cheese:' => array('cheese.gif', '19', '19', 'cheese'), + ':)' => array('smile.gif', '19', '19', 'smile'), + ';-)' => array('wink.gif', '19', '19', 'wink'), + ';)' => array('wink.gif', '19', '19', 'wink'), + ':smirk:' => array('smirk.gif', '19', '19', 'smirk'), + ':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'), + ':-S' => array('confused.gif', '19', '19', 'confused'), + ':wow:' => array('surprise.gif', '19', '19', 'surprised'), + ':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'), + ':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'), + '%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'), + ';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'), + ':P' => array('raspberry.gif', '19', '19', 'raspberry'), + ':blank:' => array('blank.gif', '19', '19', 'blank stare'), + ':long:' => array('longface.gif', '19', '19', 'long face'), + ':ohh:' => array('ohh.gif', '19', '19', 'ohh'), + ':grrr:' => array('grrr.gif', '19', '19', 'grrr'), + ':gulp:' => array('gulp.gif', '19', '19', 'gulp'), + '8-/' => array('ohoh.gif', '19', '19', 'oh oh'), + ':down:' => array('downer.gif', '19', '19', 'downer'), + ':red:' => array('embarrassed.gif', '19', '19', 'red face'), + ':sick:' => array('sick.gif', '19', '19', 'sick'), + ':shut:' => array('shuteye.gif', '19', '19', 'shut eye'), + ':-/' => array('hmm.gif', '19', '19', 'hmmm'), + '>:(' => array('mad.gif', '19', '19', 'mad'), + ':mad:' => array('mad.gif', '19', '19', 'mad'), + '>:-(' => array('angry.gif', '19', '19', 'angry'), + ':angry:' => array('angry.gif', '19', '19', 'angry'), + ':zip:' => array('zip.gif', '19', '19', 'zipper'), + ':kiss:' => array('kiss.gif', '19', '19', 'kiss'), + ':ahhh:' => array('shock.gif', '19', '19', 'shock'), + ':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'), + ':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'), + ':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'), + ':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'), + ':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'), + ':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'), + ':vampire:' => array('vampire.gif', '19', '19', 'vampire'), + ':snake:' => array('snake.gif', '19', '19', 'snake'), + ':exclaim:' => array('exclaim.gif', '19', '19', 'exclaim'), + ':question:' => array('question.gif', '19', '19', 'question') + +); diff --git a/application/config/user_agents.php b/application/config/user_agents.php new file mode 100644 index 00000000..798086b6 --- /dev/null +++ b/application/config/user_agents.php @@ -0,0 +1,214 @@ + '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. +$browsers = array( + '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' +); + +$mobiles = array( + // 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. +$robots = array( + '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/Controllers/Attributes.php b/application/controllers/Attributes.php similarity index 64% rename from app/Controllers/Attributes.php rename to application/controllers/Attributes.php index 70934c09..61ff1525 100644 --- a/app/Controllers/Attributes.php +++ b/application/controllers/Attributes.php @@ -1,7 +1,6 @@ -not_logged_in(); $this->data['page_title'] = 'Attributes'; - $this->model_attributes = new Model_attributes(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_attributes'); } /* @@ -22,10 +21,9 @@ public function __construct() public function index() { if(!in_array('viewAttribute', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $this->data['locale'] = $this->request->getLocale(); $this->render_template('attributes/index', $this->data); } @@ -35,7 +33,7 @@ public function index() public function fetchAttributeDataById($id) { if($id) { - $data = $this->model_attributes->find($id); + $data = $this->model_attributes->getAttributeData($id); echo json_encode($data); } } @@ -47,22 +45,22 @@ public function fetchAttributeData() { $result = array('data' => array()); - $data = $this->model_attributes->findAll(); + $data = $this->model_attributes->getAttributeData(); foreach ($data as $key => $value) { - $count_attribute_value = $this->model_attributes->countAttributeValue($value->id); - + $count_attribute_value = $this->model_attributes->countAttributeValue($value['id']); // button - $buttons = ' Add Value'; - if(in_array('updateAttribute', $this->permission)) $buttons .= ''; - if(in_array('deleteAttribute', $this->permission)) $buttons .= ''; + $buttons = ' Add Value + + + '; - $status = ($value->active == 1) ? 'Active' : 'Inactive'; + $status = ($value['active'] == 1) ? 'Active' : 'Inactive'; $result['data'][$key] = array( - $value->name, + $value['name'], $count_attribute_value, $status, $buttons @@ -78,23 +76,23 @@ public function fetchAttributeData() public function create() { if(!in_array('createAttribute', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); - $this->validation->setRule('attribute_name', 'Attribute name', 'trim|required'); - $this->validation->setRule('active', 'Active', 'trim|required'); + $this->form_validation->set_rules('attribute_name', 'Attribute name', 'trim|required'); + $this->form_validation->set_rules('active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('attribute_name'), - 'active' => $this->request->getPost('active'), + 'name' => $this->input->post('attribute_name'), + 'active' => $this->input->post('active'), ); - $create = $this->model_attributes->insert($data); + $create = $this->model_attributes->create($data); if($create == true) { $response['success'] = true; $response['messages'] = 'Succesfully created'; @@ -120,24 +118,24 @@ public function create() public function update($id) { if(!in_array('updateAttribute', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); if($id) { - $this->validation->setRule('edit_attribute_name', 'Attribute name', 'trim|required'); - $this->validation->setRule('edit_active', 'Active', 'trim|required'); + $this->form_validation->set_rules('edit_attribute_name', 'Attribute name', 'trim|required'); + $this->form_validation->set_rules('edit_active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('edit_attribute_name'), - 'active' => $this->request->getPost('edit_active'), + 'name' => $this->input->post('edit_attribute_name'), + 'active' => $this->input->post('edit_active'), ); - $update = $this->model_attributes->update($id, $data); + $update = $this->model_attributes->update($data, $id); if($update == true) { $response['success'] = true; $response['messages'] = 'Succesfully updated'; @@ -168,14 +166,14 @@ public function update($id) public function remove() { if(!in_array('deleteAttribute', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $attribute_id = $this->request->getPost('attribute_id'); + $attribute_id = $this->input->post('attribute_id'); $response = array(); if($attribute_id) { - $delete = $this->model_attributes->delete($attribute_id); + $delete = $this->model_attributes->remove($attribute_id); if($delete == true) { $response['success'] = true; $response['messages'] = "Successfully removed"; @@ -201,11 +199,10 @@ public function remove() public function addvalue($attribute_id = null) { if(!$attribute_id) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refersh'); } - $this->data['attribute_data'] = $this->model_attributes->find($attribute_id); - $this->data['locale'] = $this->request->getLocale(); + $this->data['attribute_data'] = $this->model_attributes->getAttributeData($attribute_id); $this->render_template('attributes/addvalue', $this->data); } @@ -224,12 +221,12 @@ public function fetchAttributeValueData($attribute_parent_id) // button $buttons = ' - - + + '; $result['data'][$key] = array( - $value->value, + $value['value'], $buttons ); } // /foreach @@ -255,15 +252,15 @@ public function createValue() { $response = array(); - $this->validation->setRule('attribute_value_name', 'Attribute value', 'trim|required'); + $this->form_validation->set_rules('attribute_value_name', 'Attribute value', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { - $attribute_parent_id = $this->request->getPost('attribute_parent_id'); + if ($this->form_validation->run() == TRUE) { + $attribute_parent_id = $this->input->post('attribute_parent_id'); $data = array( - 'value' => $this->request->getPost('attribute_value_name'), + 'value' => $this->input->post('attribute_value_name'), 'attribute_parent_id' => $attribute_parent_id ); @@ -296,14 +293,14 @@ public function updateValue($id) $response = array(); if($id) { - $this->validation->setRule('edit_attribute_value_name', 'Attribute value', 'trim|required'); + $this->form_validation->set_rules('edit_attribute_value_name', 'Attribute value', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { - $attribute_parent_id = $this->request->getPost('attribute_parent_id'); + if ($this->form_validation->run() == TRUE) { + $attribute_parent_id = $this->input->post('attribute_parent_id'); $data = array( - 'value' => $this->request->getPost('edit_attribute_value_name'), + 'value' => $this->input->post('edit_attribute_value_name'), 'attribute_parent_id' => $attribute_parent_id ); @@ -338,7 +335,7 @@ public function updateValue($id) public function removeValue() { - $attribute_value_id = $this->request->getPost('attribute_value_id'); + $attribute_value_id = $this->input->post('attribute_value_id'); $response = array(); if($attribute_value_id) { diff --git a/application/controllers/Auth.php b/application/controllers/Auth.php new file mode 100644 index 00000000..76bc9a32 --- /dev/null +++ b/application/controllers/Auth.php @@ -0,0 +1,72 @@ +load->model('model_auth'); + } + + /* + Check if the login form is submitted, and validates the user credential + If not submitted it redirects to the login page + */ + public function login() + { + + $this->logged_in(); + + $this->form_validation->set_rules('email', 'Email', 'required'); + $this->form_validation->set_rules('password', 'Password', 'required'); + + if ($this->form_validation->run() == TRUE) { + // true case + $email_exists = $this->model_auth->check_email($this->input->post('email')); + + if($email_exists == TRUE) { + $login = $this->model_auth->login($this->input->post('email'), $this->input->post('password')); + + if($login) { + + $logged_in_sess = array( + 'id' => $login['id'], + 'username' => $login['username'], + 'email' => $login['email'], + 'logged_in' => TRUE + ); + + $this->session->set_userdata($logged_in_sess); + redirect('dashboard', 'refresh'); + } + else { + $this->data['errors'] = 'Incorrect username/password combination'; + $this->load->view('login', $this->data); + } + } + else { + $this->data['errors'] = 'Email does not exists'; + + $this->load->view('login', $this->data); + } + } + else { + // false case + $this->load->view('login'); + } + } + + /* + clears the session and redirects to login page + */ + public function logout() + { + $this->session->sess_destroy(); + redirect('auth/login', 'refresh'); + } + +} diff --git a/app/Controllers/Brands.php b/application/controllers/Brands.php similarity index 69% rename from app/Controllers/Brands.php rename to application/controllers/Brands.php index d9d0630b..80588cca 100644 --- a/app/Controllers/Brands.php +++ b/application/controllers/Brands.php @@ -1,7 +1,6 @@ -not_logged_in(); $this->data['page_title'] = 'Brands'; - $this->model_brands = new Model_brands(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_brands'); } /* @@ -22,13 +21,12 @@ public function __construct() public function index() { if(!in_array('viewBrand', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $result = $this->model_brands->getBrandData(); $this->data['results'] = $result; - $this->data['locale'] = $this->request->getLocale(); $this->render_template('brands/index', $this->data); } @@ -48,18 +46,18 @@ public function fetchBrandData() $buttons = ''; if(in_array('viewBrand', $this->permission)) { - $buttons .= ''; + $buttons .= ''; } if(in_array('deleteBrand', $this->permission)) { - $buttons .= ' + $buttons .= ' '; } - $status = ($value->active == 1) ? 'Active' : 'Inactive'; + $status = ($value['active'] == 1) ? 'Active' : 'Inactive'; $result['data'][$key] = array( - $value->name, + $value['name'], $status, $buttons ); @@ -93,20 +91,20 @@ public function create() { if(!in_array('createBrand', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); - $this->validation->setRule('brand_name', 'Brand name', 'trim|required'); - $this->validation->setRule('active', 'Active', 'trim|required'); + $this->form_validation->set_rules('brand_name', 'Brand name', 'trim|required'); + $this->form_validation->set_rules('active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('brand_name'), - 'active' => $this->request->getPost('active'), + 'name' => $this->input->post('brand_name'), + 'active' => $this->input->post('active'), ); $create = $this->model_brands->create($data); @@ -138,24 +136,24 @@ public function create() public function update($id) { if(!in_array('updateBrand', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); if($id) { - $this->validation->setRule('edit_brand_name', 'Brand name', 'trim|required'); - $this->validation->setRule('edit_active', 'Active', 'trim|required'); + $this->form_validation->set_rules('edit_brand_name', 'Brand name', 'trim|required'); + $this->form_validation->set_rules('edit_active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('edit_brand_name'), - 'active' => $this->request->getPost('edit_active') + 'name' => $this->input->post('edit_brand_name'), + 'active' => $this->input->post('edit_active'), ); - $update = $this->model_brands->update($id, $data); + $update = $this->model_brands->update($data, $id); if($update == true) { $response['success'] = true; $response['messages'] = 'Succesfully updated'; @@ -187,10 +185,10 @@ public function update($id) public function remove() { if(!in_array('deleteBrand', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $brand_id = $this->request->getPost('brand_id'); + $brand_id = $this->input->post('brand_id'); $response = array(); if($brand_id) { $delete = $this->model_brands->remove($brand_id); diff --git a/app/Controllers/Category.php b/application/controllers/Category.php similarity index 65% rename from app/Controllers/Category.php rename to application/controllers/Category.php index 045ea3e4..2e7bb49b 100644 --- a/app/Controllers/Category.php +++ b/application/controllers/Category.php @@ -1,6 +1,6 @@ -not_logged_in(); $this->data['page_title'] = 'Category'; - $this->model_category = new Model_category(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_category'); } /* @@ -22,9 +22,8 @@ public function index() { if(!in_array('viewCategory', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $this->data['locale'] = $this->request->getLocale(); $this->render_template('category/index', $this->data); } @@ -38,7 +37,7 @@ public function index() public function fetchCategoryDataById($id) { if($id) { - $data = $this->model_category->find($id); + $data = $this->model_category->getCategoryData($id); echo json_encode($data); } @@ -53,7 +52,7 @@ public function fetchCategoryData() { $result = array('data' => array()); - $data = $this->model_category->findAll(); + $data = $this->model_category->getCategoryData(); foreach ($data as $key => $value) { @@ -61,18 +60,18 @@ public function fetchCategoryData() $buttons = ''; if(in_array('updateCategory', $this->permission)) { - $buttons .= ''; + $buttons .= ''; } if(in_array('deleteCategory', $this->permission)) { - $buttons .= ' '; + $buttons .= ' '; } - $status = ($value->active == 1) ? 'Active' : 'Inactive'; + $status = ($value['active'] == 1) ? 'Active' : 'Inactive'; $result['data'][$key] = array( - $value->name, + $value['name'], $status, $buttons ); @@ -89,23 +88,23 @@ public function fetchCategoryData() public function create() { if(!in_array('createCategory', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); - $this->validation->setRule('category_name', 'Category name', 'trim|required'); - $this->validation->setRule('active', 'Active', 'trim|required'); + $this->form_validation->set_rules('category_name', 'Category name', 'trim|required'); + $this->form_validation->set_rules('active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('category_name'), - 'active' => $this->request->getPost('active'), + 'name' => $this->input->post('category_name'), + 'active' => $this->input->post('active'), ); - $create = $this->model_category->insert($data); + $create = $this->model_category->create($data); if($create == true) { $response['success'] = true; $response['messages'] = 'Succesfully created'; @@ -134,24 +133,24 @@ public function update($id) { if(!in_array('updateCategory', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); if($id) { - $this->validation->setRule('edit_category_name', 'Category name', 'trim|required'); - $this->validation->setRule('edit_active', 'Active', 'trim|required'); + $this->form_validation->set_rules('edit_category_name', 'Category name', 'trim|required'); + $this->form_validation->set_rules('edit_active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('edit_category_name'), - 'active' => $this->request->getPost('edit_active'), + 'name' => $this->input->post('edit_category_name'), + 'active' => $this->input->post('edit_active'), ); - $update = $this->model_category->update($id, $data); + $update = $this->model_category->update($data, $id); if($update == true) { $response['success'] = true; $response['messages'] = 'Succesfully updated'; @@ -183,14 +182,14 @@ public function update($id) public function remove() { if(!in_array('deleteCategory', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $category_id = $this->request->getPost('category_id'); + $category_id = $this->input->post('category_id'); $response = array(); if($category_id) { - $delete = $this->model_category->delete($category_id); + $delete = $this->model_category->remove($category_id); if($delete == true) { $response['success'] = true; $response['messages'] = "Successfully removed"; diff --git a/application/controllers/Company.php b/application/controllers/Company.php new file mode 100644 index 00000000..83b71037 --- /dev/null +++ b/application/controllers/Company.php @@ -0,0 +1,75 @@ +not_logged_in(); + + $this->data['page_title'] = 'Company'; + + $this->load->model('model_company'); + } + + /* + * It redirects to the company page and displays all the company information + * It also updates the company information into the database if the + * validation for each input field is successfully valid + */ + public function index() + { + if(!in_array('updateCompany', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $this->form_validation->set_rules('company_name', 'Company name', 'trim|required'); + $this->form_validation->set_rules('service_charge_value', 'Charge Amount', 'trim|integer'); + $this->form_validation->set_rules('vat_charge_value', 'Vat Charge', 'trim|integer'); + $this->form_validation->set_rules('address', 'Address', 'trim|required'); + $this->form_validation->set_rules('message', 'Message', 'trim|required'); + + + if ($this->form_validation->run() == TRUE) { + // true case + + $data = array( + 'company_name' => $this->input->post('company_name'), + 'service_charge_value' => $this->input->post('service_charge_value'), + 'vat_charge_value' => $this->input->post('vat_charge_value'), + 'address' => $this->input->post('address'), + 'phone' => $this->input->post('phone'), + 'country' => $this->input->post('country'), + 'message' => $this->input->post('message'), + 'currency' => $this->input->post('currency') + ); + + + + $update = $this->model_company->update($data, 1); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully created'); + redirect('company/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('company/index', 'refresh'); + } + } + else { + + // false case + + + $this->data['currency_symbols'] = $this->currency(); + $this->data['company_data'] = $this->model_company->getCompanyData(1); + $this->render_template('company/index', $this->data); + } + + + } + +} \ No newline at end of file diff --git a/app/Controllers/Dashboard.php b/application/controllers/Dashboard.php similarity index 65% rename from app/Controllers/Dashboard.php rename to application/controllers/Dashboard.php index 8983d921..585cdc8a 100644 --- a/app/Controllers/Dashboard.php +++ b/application/controllers/Dashboard.php @@ -1,25 +1,19 @@ -not_logged_in(); $this->data['page_title'] = 'Dashboard'; - $this->model_products = new Model_products(); - $this->model_orders = new Model_orders(); - $this->model_users = new Model_users(); - $this->model_stores = new Model_stores(); + $this->load->model('model_products'); + $this->load->model('model_orders'); + $this->load->model('model_users'); + $this->load->model('model_stores'); } /* @@ -34,7 +28,7 @@ public function index() $this->data['total_users'] = $this->model_users->countTotalUsers(); $this->data['total_stores'] = $this->model_stores->countTotalStores(); - $user_id = $this->session->id; + $user_id = $this->session->userdata('id'); $is_admin = ($user_id == 1) ? true :false; $this->data['is_admin'] = $is_admin; diff --git a/app/Controllers/Groups.php b/application/controllers/Groups.php similarity index 51% rename from app/Controllers/Groups.php rename to application/controllers/Groups.php index 095492f4..b41355f7 100644 --- a/app/Controllers/Groups.php +++ b/application/controllers/Groups.php @@ -1,7 +1,4 @@ -not_logged_in(); $this->data['page_title'] = 'Groups'; - $this->model_groups = new Model_groups(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_groups'); } /* @@ -23,8 +20,9 @@ public function __construct() */ public function index() { + if(!in_array('viewGroup', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $groups_data = $this->model_groups->getGroupData(); @@ -42,33 +40,32 @@ public function create() { if(!in_array('createGroup', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $this->validation->setRule('group_name', 'Group name', 'required'); + $this->form_validation->set_rules('group_name', 'Group name', 'required'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { // true case - $permission = serialize($this->request->getPost('permission')); + $permission = serialize($this->input->post('permission')); $data = array( - 'group_name' => $this->request->getPost('group_name'), + 'group_name' => $this->input->post('group_name'), 'permission' => $permission ); - $create = $this->model_groups->insert($data); + $create = $this->model_groups->create($data); if($create == true) { - $this->session->setFlashdata('success', lang('Main.createdOK')); - return redirect()->to(base_url('groups/')); + $this->session->set_flashdata('success', 'Successfully created'); + redirect('groups/', 'refresh'); } else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('groups/create')); + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('groups/create', 'refresh'); } } else { // false case - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; $this->render_template('groups/create', $this->data); } } @@ -82,38 +79,35 @@ public function edit($id = null) { if(!in_array('updateGroup', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } if($id) { - if($id==1){ - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('users/')); - } - $this->validation->setRule('group_name', 'Group name', 'required'); - if ($this->validate($this->validation->getRules()) == TRUE) { + $this->form_validation->set_rules('group_name', 'Group name', 'required'); + + if ($this->form_validation->run() == TRUE) { // true case - $permission = serialize($this->request->getPost('permission')); + $permission = serialize($this->input->post('permission')); $data = array( - 'group_name' => $this->request->getPost('group_name'), + 'group_name' => $this->input->post('group_name'), 'permission' => $permission ); - $update = $this->model_groups->update($id, $data); + $update = $this->model_groups->edit($data, $id); if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - return redirect()->to(base_url('groups/')); + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('groups/', 'refresh'); } else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('groups/edit/'.$id)); + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('groups/edit/'.$id, 'refresh'); } } else { // false case - $group_data = $this->model_groups->find($id); + $group_data = $this->model_groups->getGroupData($id); $this->data['group_data'] = $group_data; $this->render_template('groups/edit', $this->data); } @@ -128,30 +122,26 @@ public function delete($id) { if(!in_array('deleteGroup', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } if($id) { - if($id==1){ - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('users/')); - } - if($this->request->getPost('confirm')) { + if($this->input->post('confirm')) { $check = $this->model_groups->existInUserGroup($id); if($check == true) { - $this->session->setFlashdata('error', 'Group exists in the users'); - return redirect()->to(base_url('groups/')); + $this->session->set_flashdata('error', 'Group exists in the users'); + redirect('groups/', 'refresh'); } else { $delete = $this->model_groups->delete($id); if($delete == true) { - $this->session->setFlashdata('success', 'Successfully removed'); - return redirect()->to(base_url('groups/')); + $this->session->set_flashdata('success', 'Successfully removed'); + redirect('groups/', 'refresh'); } else { - $this->session->setFlashdata('error', lang('Main.error')); - return redirect()->to(base_url('groups/delete/'.$id)); + $this->session->set_flashdata('error', 'Error occurred!!'); + redirect('groups/delete/'.$id, 'refresh'); } } } diff --git a/app/Controllers/Orders.php b/application/controllers/Orders.php similarity index 63% rename from app/Controllers/Orders.php rename to application/controllers/Orders.php index e49e4b65..98cef944 100644 --- a/app/Controllers/Orders.php +++ b/application/controllers/Orders.php @@ -1,9 +1,6 @@ -not_logged_in(); $this->data['page_title'] = 'Orders'; - $this->model_orders = new Model_orders(); - $this->model_products = new Model_products(); - $this->model_company = new Model_company(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_orders'); + $this->load->model('model_products'); + $this->load->model('model_company'); } /* @@ -26,10 +23,9 @@ public function __construct() public function index() { if(!in_array('viewOrder', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $this->data['locale'] = $this->request->getLocale(); $this->data['page_title'] = 'Manage Orders'; $this->render_template('orders/index', $this->data); } @@ -42,13 +38,13 @@ public function fetchOrdersData() { $result = array('data' => array()); - $data = $this->model_orders->findAll(); + $data = $this->model_orders->getOrdersData(); foreach ($data as $key => $value) { - $count_total_item = $this->model_orders->countOrderItem($value->id); - $date = date('d-m-Y', $value->date_time); - $time = date('h:i a', $value->date_time); + $count_total_item = $this->model_orders->countOrderItem($value['id']); + $date = date('d-m-Y', $value['date_time']); + $time = date('h:i a', $value['date_time']); $date_time = $date . ' ' . $time; @@ -56,18 +52,18 @@ public function fetchOrdersData() $buttons = ''; if(in_array('viewOrder', $this->permission)) { - $buttons .= ''; + $buttons .= ''; } if(in_array('updateOrder', $this->permission)) { - $buttons .= ' '; + $buttons .= ' '; } if(in_array('deleteOrder', $this->permission)) { - $buttons .= ' '; + $buttons .= ' '; } - if($value->paid_status == 1) { + if($value['paid_status'] == 1) { $paid_status = 'Paid'; } else { @@ -75,12 +71,12 @@ public function fetchOrdersData() } $result['data'][$key] = array( - $value->bill_no, - $value->customer_name, - $value->customer_phone, + $value['bill_no'], + $value['customer_name'], + $value['customer_phone'], $date_time, $count_total_item, - $value->net_amount, + $value['net_amount'], $paid_status, $buttons ); @@ -97,36 +93,35 @@ public function fetchOrdersData() public function create() { if(!in_array('createOrder', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $this->data['page_title'] = 'Add Order'; - $this->validation->setRule('product', 'Nome prodotto', 'required'); + $this->form_validation->set_rules('product[]', 'Product name', 'trim|required'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $order_id = $this->model_orders->create(); if($order_id) { - $this->session->setFlashdata('success', lang('Main.createdOK')); - return redirect()->to(base_url('orders/update/'.$order_id)); + $this->session->set_flashdata('success', 'Successfully created'); + redirect('orders/update/'.$order_id, 'refresh'); } else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('orders/create/')); + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('orders/create/', 'refresh'); } } else { // false case - $company = $this->model_company->find(1); + $company = $this->model_company->getCompanyData(1); $this->data['company_data'] = $company; - $this->data['is_vat_enabled'] = ($company->vat_charge_value > 0) ? true : false; - $this->data['is_service_enabled'] = ($company->service_charge_value > 0) ? true : false; + $this->data['is_vat_enabled'] = ($company['vat_charge_value'] > 0) ? true : false; + $this->data['is_service_enabled'] = ($company['service_charge_value'] > 0) ? true : false; - $this->data['products'] = $this->model_products->getActiveProductData(); - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; + $this->data['products'] = $this->model_products->getActiveProductData(); $this->render_template('orders/create', $this->data); } @@ -139,9 +134,9 @@ public function create() */ public function getProductValueById() { - $product_id = $this->request->getPost('product_id'); + $product_id = $this->input->post('product_id'); if($product_id) { - $product_data = $this->model_products->find($product_id); + $product_data = $this->model_products->getProductData($product_id); echo json_encode($product_data); } } @@ -165,43 +160,43 @@ public function getTableProductRow() public function update($id) { if(!in_array('updateOrder', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } if(!$id) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $this->data['page_title'] = 'Update Order'; - $this->validation->setRule('product', 'Product name', 'required'); + $this->form_validation->set_rules('product[]', 'Product name', 'trim|required'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { - $update = $this->model_orders->up($id); + $update = $this->model_orders->update($id); if($update == true) { - $this->session->setFlashdata('success', lang('Main.updatedOK')); - return redirect()->to(base_url('orders/update/'.$id)); + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('orders/update/'.$id, 'refresh'); } else { - $this->session->setFlashdata('errors', lang('Main.error')); - return redirect()->to(base_url('orders/update/'.$id)); + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('orders/update/'.$id, 'refresh'); } } else { // false case - $company = $this->model_company->find(1); + $company = $this->model_company->getCompanyData(1); $this->data['company_data'] = $company; - $this->data['is_vat_enabled'] = ($company->vat_charge_value > 0) ? true : false; - $this->data['is_service_enabled'] = ($company->service_charge_value > 0) ? true : false; + $this->data['is_vat_enabled'] = ($company['vat_charge_value'] > 0) ? true : false; + $this->data['is_service_enabled'] = ($company['service_charge_value'] > 0) ? true : false; $result = array(); - $orders_data = $this->model_orders->find($id); + $orders_data = $this->model_orders->getOrdersData($id); $result['order'] = $orders_data; - $orders_item = $this->model_orders->getOrdersItemData($orders_data->id); + $orders_item = $this->model_orders->getOrdersItemData($orders_data['id']); foreach($orders_item as $k => $v) { $result['order_item'][] = $v; @@ -209,8 +204,7 @@ public function update($id) $this->data['order_data'] = $result; - $this->data['products'] = $this->model_products->getActiveProductData(); - if($this->request->getMethod()=="post") $this->data['validation'] = $this->validation; + $this->data['products'] = $this->model_products->getActiveProductData(); $this->render_template('orders/edit', $this->data); } @@ -223,10 +217,10 @@ public function update($id) public function remove() { if(!in_array('deleteOrder', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $order_id = $this->request->getPost('order_id'); + $order_id = $this->input->post('order_id'); $response = array(); if($order_id) { @@ -255,16 +249,16 @@ public function remove() public function printDiv($id) { if(!in_array('viewOrder', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } if($id) { - $order_data = $this->model_orders->find($id); + $order_data = $this->model_orders->getOrdersData($id); $orders_items = $this->model_orders->getOrdersItemData($id); - $company_info = $this->model_company->find(1); + $company_info = $this->model_company->getCompanyData(1); - $order_date = date('d/m/Y', $order_data->date_time); - $paid_status = ($order_data->paid_status == 1) ? "Paid" : "Unpaid"; + $order_date = date('d/m/Y', $order_data['date_time']); + $paid_status = ($order_data['paid_status'] == 1) ? "Paid" : "Unpaid"; $html = ' @@ -289,7 +283,7 @@ public function printDiv($id)
@@ -300,10 +294,10 @@ public function printDiv($id)
- Bill ID: '.$order_data->bill_no.'
- Name: '.$order_data->customer_name.'
- Address: '.$order_data->customer_address.'
- Phone: '.$order_data->customer_phone.' + Bill ID: '.$order_data['bill_no'].'
+ Name: '.$order_data['customer_name'].'
+ Address: '.$order_data['customer_address'].'
+ Phone: '.$order_data['customer_phone'].'
@@ -316,8 +310,8 @@ public function printDiv($id) Product name - '.lang('Main.price').' - '.lang('Main.qty').' + Price + Qty Amount @@ -325,13 +319,13 @@ public function printDiv($id) foreach ($orders_items as $k => $v) { - $product_data = $this->model_products->find($v->product_id); + $product_data = $this->model_products->getProductData($v['product_id']); $html .= ' - '.$product_data->name.' - '.$v->rate.' - '.$v->qty.' - '.$v->amount.' + '.$product_data['name'].' + '.$v['rate'].' + '.$v['qty'].' + '.$v['amount'].' '; } @@ -350,31 +344,31 @@ public function printDiv($id) - + '; - if($order_data->service_charge > 0) { + if($order_data['service_charge'] > 0) { $html .= ' - - + + '; } - if($order_data->vat_charge > 0) { + if($order_data['vat_charge'] > 0) { $html .= ' - - + + '; } $html .=' - + - + diff --git a/application/controllers/Products.php b/application/controllers/Products.php new file mode 100644 index 00000000..d8124617 --- /dev/null +++ b/application/controllers/Products.php @@ -0,0 +1,301 @@ +not_logged_in(); + + $this->data['page_title'] = 'Products'; + + $this->load->model('model_products'); + $this->load->model('model_brands'); + $this->load->model('model_category'); + $this->load->model('model_stores'); + $this->load->model('model_attributes'); + } + + /* + * It only redirects to the manage product page + */ + public function index() + { + if(!in_array('viewProduct', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $this->render_template('products/index', $this->data); + } + + /* + * It Fetches the products data from the product table + * this function is called from the datatable ajax function + */ + public function fetchProductData() + { + $result = array('data' => array()); + + $data = $this->model_products->getProductData(); + + foreach ($data as $key => $value) { + + $store_data = $this->model_stores->getStoresData($value['store_id']); + // button + $buttons = ''; + if(in_array('updateProduct', $this->permission)) { + $buttons .= ''; + } + + if(in_array('deleteProduct', $this->permission)) { + $buttons .= ' '; + } + + + $img = ''.$value['name'].''; + + $availability = ($value['availability'] == 1) ? 'Active' : 'Inactive'; + + $qty_status = ''; + if($value['qty'] <= 10) { + $qty_status = 'Low !'; + } else if($value['qty'] <= 0) { + $qty_status = 'Out of stock !'; + } + + + $result['data'][$key] = array( + $img, + $value['sku'], + $value['name'], + $value['price'], + $value['qty'] . ' ' . $qty_status, + $store_data['name'], + $availability, + $buttons + ); + } // /foreach + + echo json_encode($result); + } + + /* + * If the validation is not valid, then it redirects to the create page. + * If the validation for each input field is valid then it inserts the data into the database + * and it stores the operation message into the session flashdata and display on the manage product page + */ + public function create() + { + if(!in_array('createProduct', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $this->form_validation->set_rules('product_name', 'Product name', 'trim|required'); + $this->form_validation->set_rules('sku', 'SKU', 'trim|required'); + $this->form_validation->set_rules('price', 'Price', 'trim|required'); + $this->form_validation->set_rules('qty', 'Qty', 'trim|required'); + $this->form_validation->set_rules('store', 'Store', 'trim|required'); + $this->form_validation->set_rules('availability', 'Availability', 'trim|required'); + + + if ($this->form_validation->run() == TRUE) { + // true case + $upload_image = $this->upload_image(); + + $data = array( + 'name' => $this->input->post('product_name'), + 'sku' => $this->input->post('sku'), + 'price' => $this->input->post('price'), + 'qty' => $this->input->post('qty'), + 'image' => $upload_image, + 'description' => $this->input->post('description'), + 'attribute_value_id' => json_encode($this->input->post('attributes_value_id')), + 'brand_id' => json_encode($this->input->post('brands')), + 'category_id' => json_encode($this->input->post('category')), + 'store_id' => $this->input->post('store'), + 'availability' => $this->input->post('availability'), + ); + + $create = $this->model_products->create($data); + if($create == true) { + $this->session->set_flashdata('success', 'Successfully created'); + redirect('products/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('products/create', 'refresh'); + } + } + else { + // false case + + // attributes + $attribute_data = $this->model_attributes->getActiveAttributeData(); + + $attributes_final_data = array(); + foreach ($attribute_data as $k => $v) { + $attributes_final_data[$k]['attribute_data'] = $v; + + $value = $this->model_attributes->getAttributeValueData($v['id']); + + $attributes_final_data[$k]['attribute_value'] = $value; + } + + $this->data['attributes'] = $attributes_final_data; + $this->data['brands'] = $this->model_brands->getActiveBrands(); + $this->data['category'] = $this->model_category->getActiveCategroy(); + $this->data['stores'] = $this->model_stores->getActiveStore(); + + $this->render_template('products/create', $this->data); + } + } + + /* + * This function is invoked from another function to upload the image into the assets folder + * and returns the image path + */ + public function upload_image() + { + // assets/images/product_image + $config['upload_path'] = 'assets/images/product_image'; + $config['file_name'] = uniqid(); + $config['allowed_types'] = 'gif|jpg|png'; + $config['max_size'] = '1000'; + + // $config['max_width'] = '1024';s + // $config['max_height'] = '768'; + + $this->load->library('upload', $config); + if ( ! $this->upload->do_upload('product_image')) + { + $error = $this->upload->display_errors(); + return $error; + } + else + { + $data = array('upload_data' => $this->upload->data()); + $type = explode('.', $_FILES['product_image']['name']); + $type = $type[count($type) - 1]; + + $path = $config['upload_path'].'/'.$config['file_name'].'.'.$type; + return ($data == true) ? $path : false; + } + } + + /* + * If the validation is not valid, then it redirects to the edit product page + * If the validation is successfully then it updates the data into the database + * and it stores the operation message into the session flashdata and display on the manage product page + */ + public function update($product_id) + { + if(!in_array('updateProduct', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + if(!$product_id) { + redirect('dashboard', 'refresh'); + } + + $this->form_validation->set_rules('product_name', 'Product name', 'trim|required'); + $this->form_validation->set_rules('sku', 'SKU', 'trim|required'); + $this->form_validation->set_rules('price', 'Price', 'trim|required'); + $this->form_validation->set_rules('qty', 'Qty', 'trim|required'); + $this->form_validation->set_rules('store', 'Store', 'trim|required'); + $this->form_validation->set_rules('availability', 'Availability', 'trim|required'); + + if ($this->form_validation->run() == TRUE) { + // true case + + $data = array( + 'name' => $this->input->post('product_name'), + 'sku' => $this->input->post('sku'), + 'price' => $this->input->post('price'), + 'qty' => $this->input->post('qty'), + 'description' => $this->input->post('description'), + 'attribute_value_id' => json_encode($this->input->post('attributes_value_id')), + 'brand_id' => json_encode($this->input->post('brands')), + 'category_id' => json_encode($this->input->post('category')), + 'store_id' => $this->input->post('store'), + 'availability' => $this->input->post('availability'), + ); + + + if($_FILES['product_image']['size'] > 0) { + $upload_image = $this->upload_image(); + $upload_image = array('image' => $upload_image); + + $this->model_products->update($upload_image, $product_id); + } + + $update = $this->model_products->update($data, $product_id); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('products/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('products/update/'.$product_id, 'refresh'); + } + } + else { + // attributes + $attribute_data = $this->model_attributes->getActiveAttributeData(); + + $attributes_final_data = array(); + foreach ($attribute_data as $k => $v) { + $attributes_final_data[$k]['attribute_data'] = $v; + + $value = $this->model_attributes->getAttributeValueData($v['id']); + + $attributes_final_data[$k]['attribute_value'] = $value; + } + + // false case + $this->data['attributes'] = $attributes_final_data; + $this->data['brands'] = $this->model_brands->getActiveBrands(); + $this->data['category'] = $this->model_category->getActiveCategroy(); + $this->data['stores'] = $this->model_stores->getActiveStore(); + + $product_data = $this->model_products->getProductData($product_id); + $this->data['product_data'] = $product_data; + $this->render_template('products/edit', $this->data); + } + } + + /* + * It removes the data from the database + * and it returns the response into the json format + */ + public function remove() + { + if(!in_array('deleteProduct', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $product_id = $this->input->post('product_id'); + + $response = array(); + if($product_id) { + $delete = $this->model_products->remove($product_id); + if($delete == true) { + $response['success'] = true; + $response['messages'] = "Successfully removed"; + } + else { + $response['success'] = false; + $response['messages'] = "Error in the database while removing the product information"; + } + } + else { + $response['success'] = false; + $response['messages'] = "Refersh the page again!!"; + } + + echo json_encode($response); + } + +} \ No newline at end of file diff --git a/app/Controllers/Reports.php b/application/controllers/Reports.php similarity index 76% rename from app/Controllers/Reports.php rename to application/controllers/Reports.php index d8bad0fa..e5709a97 100644 --- a/app/Controllers/Reports.php +++ b/application/controllers/Reports.php @@ -1,7 +1,6 @@ -data['page_title'] = 'Stores'; - $this->model_reports = new Model_reports(); + $this->load->model('model_reports'); } /* @@ -19,13 +18,13 @@ public function __construct() public function index() { if(!in_array('viewReports', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $today_year = date('Y'); - if($this->request->getPost('select_year')) { - $today_year = $this->request->getPost('select_year'); + if($this->input->post('select_year')) { + $today_year = $this->input->post('select_year'); } $parking_data = $this->model_reports->getOrderData($today_year); @@ -39,7 +38,7 @@ public function index() $total_amount_earned = array(); foreach ($v as $k2 => $v2) { if($v2) { - $total_amount_earned[] = $v2->gross_amount; + $total_amount_earned[] = $v2['gross_amount']; } } $final_parking_data[$k] = array_sum($total_amount_earned); diff --git a/app/Controllers/Stores.php b/application/controllers/Stores.php similarity index 67% rename from app/Controllers/Stores.php rename to application/controllers/Stores.php index e83d0bd0..783aebfd 100644 --- a/app/Controllers/Stores.php +++ b/application/controllers/Stores.php @@ -1,7 +1,6 @@ -not_logged_in(); $this->data['page_title'] = 'Stores'; - $this->model_stores = new Model_stores(); - $this->validation = \Config\Services::validation(); + $this->load->model('model_stores'); } /* @@ -22,9 +21,8 @@ public function __construct() public function index() { if(!in_array('viewStore', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $this->data['locale'] = $this->request->getLocale(); $this->render_template('stores/index', $this->data); } @@ -36,7 +34,7 @@ public function index() public function fetchStoresDataById($id) { if($id) { - $data = $this->model_stores->find($id); + $data = $this->model_stores->getStoresData($id); echo json_encode($data); } } @@ -50,7 +48,7 @@ public function fetchStoresData() { $result = array('data' => array()); - $data = $this->model_stores->findAll(); + $data = $this->model_stores->getStoresData(); foreach ($data as $key => $value) { @@ -58,17 +56,17 @@ public function fetchStoresData() $buttons = ''; if(in_array('updateStore', $this->permission)) { - $buttons = ''; + $buttons = ''; } if(in_array('deleteStore', $this->permission)) { - $buttons .= ' '; + $buttons .= ' '; } - $status = ($value->active == 1) ? 'Active' : 'Inactive'; + $status = ($value['active'] == 1) ? 'Active' : 'Inactive'; $result['data'][$key] = array( - $value->name, + $value['name'], $status, $buttons ); @@ -85,23 +83,23 @@ public function fetchStoresData() public function create() { if(!in_array('createStore', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); - $this->validation->setRule('store_name', 'Store name', 'trim|required'); - $this->validation->setRule('active', 'Active', 'trim|required'); + $this->form_validation->set_rules('store_name', 'Store name', 'trim|required'); + $this->form_validation->set_rules('active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('store_name'), - 'active' => $this->request->getPost('active'), + 'name' => $this->input->post('store_name'), + 'active' => $this->input->post('active'), ); - $create = $this->model_stores->insert($data); + $create = $this->model_stores->create($data); if($create == true) { $response['success'] = true; $response['messages'] = 'Succesfully created'; @@ -129,24 +127,24 @@ public function create() public function update($id) { if(!in_array('updateStore', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } $response = array(); if($id) { - $this->validation->setRule('edit_store_name', 'Store name', 'trim|required'); - $this->validation->setRule('edit_active', 'Active', 'trim|required'); + $this->form_validation->set_rules('edit_store_name', 'Store name', 'trim|required'); + $this->form_validation->set_rules('edit_active', 'Active', 'trim|required'); - // $this->form_validation->set_error_delimiters('

','

'); + $this->form_validation->set_error_delimiters('

','

'); - if ($this->validate($this->validation->getRules()) == TRUE) { + if ($this->form_validation->run() == TRUE) { $data = array( - 'name' => $this->request->getPost('edit_store_name'), - 'active' => $this->request->getPost('edit_active'), + 'name' => $this->input->post('edit_store_name'), + 'active' => $this->input->post('edit_active'), ); - $update = $this->model_stores->update($id, $data); + $update = $this->model_stores->update($data, $id); if($update == true) { $response['success'] = true; $response['messages'] = 'Succesfully updated'; @@ -180,14 +178,14 @@ public function update($id) public function remove() { if(!in_array('deleteStore', $this->permission)) { - return redirect()->to(base_url('dashboard')); + redirect('dashboard', 'refresh'); } - $store_id = $this->request->getPost('store_id'); + $store_id = $this->input->post('store_id'); $response = array(); if($store_id) { - $delete = $this->model_stores->delete($store_id); + $delete = $this->model_stores->remove($store_id); if($delete == true) { $response['success'] = true; $response['messages'] = "Successfully removed"; diff --git a/application/controllers/Users.php b/application/controllers/Users.php new file mode 100644 index 00000000..c84c9650 --- /dev/null +++ b/application/controllers/Users.php @@ -0,0 +1,331 @@ +not_logged_in(); + + $this->data['page_title'] = 'Users'; + + + $this->load->model('model_users'); + $this->load->model('model_groups'); + } + + + public function index() + { + if(!in_array('viewUser', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $user_data = $this->model_users->getUserData(); + + $result = array(); + foreach ($user_data as $k => $v) { + + $result[$k]['user_info'] = $v; + + $group = $this->model_users->getUserGroup($v['id']); + $result[$k]['user_group'] = $group; + } + + $this->data['user_data'] = $result; + + $this->render_template('users/index', $this->data); + } + + public function create() + { + if(!in_array('createUser', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $this->form_validation->set_rules('groups', 'Group', 'required'); + $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|is_unique[users.username]'); + $this->form_validation->set_rules('email', 'Email', 'trim|required|is_unique[users.email]'); + $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]'); + $this->form_validation->set_rules('cpassword', 'Confirm password', 'trim|required|matches[password]'); + $this->form_validation->set_rules('fname', 'First name', 'trim|required'); + + if ($this->form_validation->run() == TRUE) { + // true case + $password = $this->password_hash($this->input->post('password')); + $data = array( + 'username' => $this->input->post('username'), + 'password' => $password, + 'email' => $this->input->post('email'), + 'firstname' => $this->input->post('fname'), + 'lastname' => $this->input->post('lname'), + 'phone' => $this->input->post('phone'), + 'gender' => $this->input->post('gender'), + ); + + $create = $this->model_users->create($data, $this->input->post('groups')); + if($create == true) { + $this->session->set_flashdata('success', 'Successfully created'); + redirect('users/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('users/create', 'refresh'); + } + } + else { + // false case + $group_data = $this->model_groups->getGroupData(); + $this->data['group_data'] = $group_data; + + $this->render_template('users/create', $this->data); + } + + + } + + public function password_hash($pass = '') + { + if($pass) { + $password = password_hash($pass, PASSWORD_DEFAULT); + return $password; + } + } + + public function edit($id = null) + { + if(!in_array('updateUser', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + if($id) { + $this->form_validation->set_rules('groups', 'Group', 'required'); + $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); + $this->form_validation->set_rules('email', 'Email', 'trim|required'); + $this->form_validation->set_rules('fname', 'First name', 'trim|required'); + + + if ($this->form_validation->run() == TRUE) { + // true case + if(empty($this->input->post('password')) && empty($this->input->post('cpassword'))) { + $data = array( + 'username' => $this->input->post('username'), + 'email' => $this->input->post('email'), + 'firstname' => $this->input->post('fname'), + 'lastname' => $this->input->post('lname'), + 'phone' => $this->input->post('phone'), + 'gender' => $this->input->post('gender'), + ); + + $update = $this->model_users->edit($data, $id, $this->input->post('groups')); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully created'); + redirect('users/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('users/edit/'.$id, 'refresh'); + } + } + else { + $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]'); + $this->form_validation->set_rules('cpassword', 'Confirm password', 'trim|required|matches[password]'); + + if($this->form_validation->run() == TRUE) { + + $password = $this->password_hash($this->input->post('password')); + + $data = array( + 'username' => $this->input->post('username'), + 'password' => $password, + 'email' => $this->input->post('email'), + 'firstname' => $this->input->post('fname'), + 'lastname' => $this->input->post('lname'), + 'phone' => $this->input->post('phone'), + 'gender' => $this->input->post('gender'), + ); + + $update = $this->model_users->edit($data, $id, $this->input->post('groups')); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('users/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('users/edit/'.$id, 'refresh'); + } + } + else { + // false case + $user_data = $this->model_users->getUserData($id); + $groups = $this->model_users->getUserGroup($id); + + $this->data['user_data'] = $user_data; + $this->data['user_group'] = $groups; + + $group_data = $this->model_groups->getGroupData(); + $this->data['group_data'] = $group_data; + + $this->render_template('users/edit', $this->data); + } + + } + } + else { + // false case + $user_data = $this->model_users->getUserData($id); + $groups = $this->model_users->getUserGroup($id); + + $this->data['user_data'] = $user_data; + $this->data['user_group'] = $groups; + + $group_data = $this->model_groups->getGroupData(); + $this->data['group_data'] = $group_data; + + $this->render_template('users/edit', $this->data); + } + } + } + + public function delete($id) + { + if(!in_array('deleteUser', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + if($id) { + if($this->input->post('confirm')) { + $delete = $this->model_users->delete($id); + if($delete == true) { + $this->session->set_flashdata('success', 'Successfully removed'); + redirect('users/', 'refresh'); + } + else { + $this->session->set_flashdata('error', 'Error occurred!!'); + redirect('users/delete/'.$id, 'refresh'); + } + + } + else { + $this->data['id'] = $id; + $this->render_template('users/delete', $this->data); + } + } + } + + public function profile() + { + if(!in_array('viewProfile', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $user_id = $this->session->userdata('id'); + + $user_data = $this->model_users->getUserData($user_id); + $this->data['user_data'] = $user_data; + + $user_group = $this->model_users->getUserGroup($user_id); + $this->data['user_group'] = $user_group; + + $this->render_template('users/profile', $this->data); + } + + public function setting() + { + if(!in_array('updateSetting', $this->permission)) { + redirect('dashboard', 'refresh'); + } + + $id = $this->session->userdata('id'); + + if($id) { + $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); + $this->form_validation->set_rules('email', 'Email', 'trim|required'); + $this->form_validation->set_rules('fname', 'First name', 'trim|required'); + + + if ($this->form_validation->run() == TRUE) { + // true case + if(empty($this->input->post('password')) && empty($this->input->post('cpassword'))) { + $data = array( + 'username' => $this->input->post('username'), + 'email' => $this->input->post('email'), + 'firstname' => $this->input->post('fname'), + 'lastname' => $this->input->post('lname'), + 'phone' => $this->input->post('phone'), + 'gender' => $this->input->post('gender'), + ); + + $update = $this->model_users->edit($data, $id); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('users/setting/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('users/setting/', 'refresh'); + } + } + else { + $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]'); + $this->form_validation->set_rules('cpassword', 'Confirm password', 'trim|required|matches[password]'); + + if($this->form_validation->run() == TRUE) { + + $password = $this->password_hash($this->input->post('password')); + + $data = array( + 'username' => $this->input->post('username'), + 'password' => $password, + 'email' => $this->input->post('email'), + 'firstname' => $this->input->post('fname'), + 'lastname' => $this->input->post('lname'), + 'phone' => $this->input->post('phone'), + 'gender' => $this->input->post('gender'), + ); + + $update = $this->model_users->edit($data, $id, $this->input->post('groups')); + if($update == true) { + $this->session->set_flashdata('success', 'Successfully updated'); + redirect('users/setting/', 'refresh'); + } + else { + $this->session->set_flashdata('errors', 'Error occurred!!'); + redirect('users/setting/', 'refresh'); + } + } + else { + // false case + $user_data = $this->model_users->getUserData($id); + $groups = $this->model_users->getUserGroup($id); + + $this->data['user_data'] = $user_data; + $this->data['user_group'] = $groups; + + $group_data = $this->model_groups->getGroupData(); + $this->data['group_data'] = $group_data; + + $this->render_template('users/setting', $this->data); + } + + } + } + else { + // false case + $user_data = $this->model_users->getUserData($id); + $groups = $this->model_users->getUserGroup($id); + + $this->data['user_data'] = $user_data; + $this->data['user_group'] = $groups; + + $group_data = $this->model_groups->getGroupData(); + $this->data['group_data'] = $group_data; + + $this->render_template('users/setting', $this->data); + } + } + } + + +} \ No newline at end of file diff --git a/app/Views/errors/html/index.html b/application/controllers/index.html similarity index 100% rename from app/Views/errors/html/index.html rename to application/controllers/index.html diff --git a/app/Controllers/Admin_Controller.php b/application/core/MY_Controller.php similarity index 79% rename from app/Controllers/Admin_Controller.php rename to application/core/MY_Controller.php index ae22a317..bf7d2a2d 100644 --- a/app/Controllers/Admin_Controller.php +++ b/application/core/MY_Controller.php @@ -1,56 +1,71 @@ -session = \Config\Services::session(); + parent::__construct(); + $group_data = array(); - if(empty($this->session->logged_in)) { + if(empty($this->session->userdata('logged_in'))) { $session_data = array('logged_in' => FALSE); - $this->session->set($session_data); + $this->session->set_userdata($session_data); } else { - $user_id = $this->session->id; - $this->model_groups = new Model_groups(); + $user_id = $this->session->userdata('id'); + $this->load->model('model_groups'); $group_data = $this->model_groups->getUserGroupByUserId($user_id); - $this->data['user_permission'] = unserialize($group_data->permission); - $this->data['session'] = $this->session; - $this->permission = unserialize($group_data->permission); + $this->data['user_permission'] = unserialize($group_data['permission']); + $this->permission = unserialize($group_data['permission']); + } + } + + public function logged_in() + { + $session_data = $this->session->userdata(); + if($session_data['logged_in'] == TRUE) { + redirect('dashboard', 'refresh'); + } + } + + public function not_logged_in() + { + $session_data = $this->session->userdata(); + if($session_data['logged_in'] == FALSE) { + redirect('auth/login', 'refresh'); } } public function render_template($page = null, $data = array()) { - echo view('templates/header',$data); - echo view('templates/header_menu',$data); - echo view('templates/side_menubar',$data); - echo view($page, $data); - echo view('templates/footer',$data); + $this->load->view('templates/header',$data); + $this->load->view('templates/header_menu',$data); + $this->load->view('templates/side_menubar',$data); + $this->load->view($page, $data); + $this->load->view('templates/footer',$data); } public function company_currency() { - // $this->load->model('model_company'); - $this->model_company = new Model_company(); - $company_currency = $this->model_company->find(1); + $this->load->model('model_company'); + $company_currency = $this->model_company->getCompanyData(1); $currencies = $this->currency(); $currency = ''; foreach ($currencies as $key => $value) { - if($key == $company_currency->currency) { + if($key == $company_currency['currency']) { $currency = $value; } } diff --git a/app/Views/errors/index.html b/application/core/index.html similarity index 100% rename from app/Views/errors/index.html rename to application/core/index.html diff --git a/app/Views/index.html b/application/helpers/index.html similarity index 100% rename from app/Views/index.html rename to application/helpers/index.html diff --git a/app/index.html b/application/hooks/index.html similarity index 100% rename from app/index.html rename to application/hooks/index.html diff --git a/writable/cache/index.html b/application/index.html similarity index 100% rename from writable/cache/index.html rename to application/index.html diff --git a/writable/logs/index.html b/application/language/english/index.html similarity index 100% rename from writable/logs/index.html rename to application/language/english/index.html diff --git a/writable/session/index.html b/application/language/index.html similarity index 100% rename from writable/session/index.html rename to application/language/index.html diff --git a/writable/uploads/index.html b/application/libraries/index.html similarity index 100% rename from writable/uploads/index.html rename to application/libraries/index.html diff --git a/application/logs/index.html b/application/logs/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/application/logs/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/app/Models/.DS_Store b/application/models/.DS_Store similarity index 100% rename from app/Models/.DS_Store rename to application/models/.DS_Store diff --git a/application/models/Model_attributes.php b/application/models/Model_attributes.php new file mode 100644 index 00000000..0b946abf --- /dev/null +++ b/application/models/Model_attributes.php @@ -0,0 +1,109 @@ +db->query($sql, array(1)); + return $query->result_array(); + } + + /* get the attribute data */ + public function getAttributeData($id = null) + { + if($id) { + $sql = "SELECT * FROM attributes where id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM attributes"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + public function countAttributeValue($id = null) + { + if($id) { + $sql = "SELECT * FROM attribute_value WHERE attribute_parent_id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->num_rows(); + } + } + + /* get the attribute value data */ + // $id = attribute_parent_id + public function getAttributeValueData($id = null) + { + $sql = "SELECT * FROM attribute_value WHERE attribute_parent_id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->result_array(); + } + + public function getAttributeValueById($id = null) + { + $sql = "SELECT * FROM attribute_value WHERE id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->row_array(); + } + + public function create($data) + { + if($data) { + $insert = $this->db->insert('attributes', $data); + return ($insert == true) ? true : false; + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('attributes', $data); + return ($update == true) ? true : false; + } + } + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('attributes'); + return ($delete == true) ? true : false; + } + } + + public function createValue($data) + { + if($data) { + $insert = $this->db->insert('attribute_value', $data); + return ($insert == true) ? true : false; + } + } + + public function updateValue($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('attribute_value', $data); + return ($update == true) ? true : false; + } + } + + public function removeValue($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('attribute_value'); + return ($delete == true) ? true : false; + } + } + +} \ No newline at end of file diff --git a/app/Models/Model_auth.php b/application/models/Model_auth.php similarity index 68% rename from app/Models/Model_auth.php rename to application/models/Model_auth.php index 0bc52fee..7cfe22e8 100644 --- a/app/Models/Model_auth.php +++ b/application/models/Model_auth.php @@ -1,16 +1,10 @@ db->query($sql, array($email)); - $row = $query->getRow(); - return isset($row); + $result = $query->num_rows(); + return ($result == 1) ? true : false; } return false; @@ -36,16 +30,18 @@ public function login($email, $password) { $sql = "SELECT * FROM users WHERE email = ?"; $query = $this->db->query($sql, array($email)); - $result = $query->getRow(); - if(isset($result->password)) { + if($query->num_rows() == 1) { + $result = $query->row_array(); - $hash_password = password_verify($password, $result->password); + $hash_password = password_verify($password, $result['password']); if($hash_password === true) { return $result; } else { return false; } + + } else { return false; diff --git a/application/models/Model_brands.php b/application/models/Model_brands.php new file mode 100644 index 00000000..1080eba2 --- /dev/null +++ b/application/models/Model_brands.php @@ -0,0 +1,58 @@ +db->query($sql, array(1)); + return $query->result_array(); + } + + /* get the brand data */ + public function getBrandData($id = null) + { + if($id) { + $sql = "SELECT * FROM brands WHERE id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM brands"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + public function create($data) + { + if($data) { + $insert = $this->db->insert('brands', $data); + return ($insert == true) ? true : false; + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('brands', $data); + return ($update == true) ? true : false; + } + } + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('brands'); + return ($delete == true) ? true : false; + } + } + +} \ No newline at end of file diff --git a/application/models/Model_category.php b/application/models/Model_category.php new file mode 100644 index 00000000..7bb09a91 --- /dev/null +++ b/application/models/Model_category.php @@ -0,0 +1,58 @@ +db->query($sql, array(1)); + return $query->result_array(); + } + + /* get the brand data */ + public function getCategoryData($id = null) + { + if($id) { + $sql = "SELECT * FROM categories WHERE id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM categories"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + public function create($data) + { + if($data) { + $insert = $this->db->insert('categories', $data); + return ($insert == true) ? true : false; + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('categories', $data); + return ($update == true) ? true : false; + } + } + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('categories'); + return ($delete == true) ? true : false; + } + } + +} \ No newline at end of file diff --git a/application/models/Model_company.php b/application/models/Model_company.php new file mode 100644 index 00000000..93ba277d --- /dev/null +++ b/application/models/Model_company.php @@ -0,0 +1,30 @@ +db->query($sql, array($id)); + return $query->row_array(); + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('company', $data); + return ($update == true) ? true : false; + } + } + + +} \ No newline at end of file diff --git a/application/models/Model_groups.php b/application/models/Model_groups.php new file mode 100644 index 00000000..1b7ddc4d --- /dev/null +++ b/application/models/Model_groups.php @@ -0,0 +1,61 @@ +db->query($sql, array($groupId)); + return $query->row_array(); + } + + $sql = "SELECT * FROM groups WHERE id != ?"; + $query = $this->db->query($sql, array(1)); + return $query->result_array(); + } + + public function create($data = '') + { + $create = $this->db->insert('groups', $data); + return ($create == true) ? true : false; + } + + public function edit($data, $id) + { + $this->db->where('id', $id); + $update = $this->db->update('groups', $data); + return ($update == true) ? true : false; + } + + public function delete($id) + { + $this->db->where('id', $id); + $delete = $this->db->delete('groups'); + return ($delete == true) ? true : false; + } + + public function existInUserGroup($id) + { + $sql = "SELECT * FROM user_group WHERE group_id = ?"; + $query = $this->db->query($sql, array($id)); + return ($query->num_rows() == 1) ? true : false; + } + + public function getUserGroupByUserId($user_id) + { + $sql = "SELECT * FROM user_group + INNER JOIN groups ON groups.id = user_group.group_id + WHERE user_group.user_id = ?"; + $query = $this->db->query($sql, array($user_id)); + $result = $query->row_array(); + + return $result; + + } +} \ No newline at end of file diff --git a/application/models/Model_orders.php b/application/models/Model_orders.php new file mode 100644 index 00000000..028a0d55 --- /dev/null +++ b/application/models/Model_orders.php @@ -0,0 +1,185 @@ +db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM orders ORDER BY id DESC"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + // get the orders item data + public function getOrdersItemData($order_id = null) + { + if(!$order_id) { + return false; + } + + $sql = "SELECT * FROM orders_item WHERE order_id = ?"; + $query = $this->db->query($sql, array($order_id)); + return $query->result_array(); + } + + public function create() + { + $user_id = $this->session->userdata('id'); + $bill_no = 'BILPR-'.strtoupper(substr(md5(uniqid(mt_rand(), true)), 0, 4)); + $data = array( + 'bill_no' => $bill_no, + 'customer_name' => $this->input->post('customer_name'), + 'customer_address' => $this->input->post('customer_address'), + 'customer_phone' => $this->input->post('customer_phone'), + 'date_time' => strtotime(date('Y-m-d h:i:s a')), + 'gross_amount' => $this->input->post('gross_amount_value'), + 'service_charge_rate' => $this->input->post('service_charge_rate'), + 'service_charge' => ($this->input->post('service_charge_value') > 0) ?$this->input->post('service_charge_value'):0, + 'vat_charge_rate' => $this->input->post('vat_charge_rate'), + 'vat_charge' => ($this->input->post('vat_charge_value') > 0) ? $this->input->post('vat_charge_value') : 0, + 'net_amount' => $this->input->post('net_amount_value'), + 'discount' => $this->input->post('discount'), + 'paid_status' => 2, + 'user_id' => $user_id + ); + + $insert = $this->db->insert('orders', $data); + $order_id = $this->db->insert_id(); + + $this->load->model('model_products'); + + $count_product = count($this->input->post('product')); + for($x = 0; $x < $count_product; $x++) { + $items = array( + 'order_id' => $order_id, + 'product_id' => $this->input->post('product')[$x], + 'qty' => $this->input->post('qty')[$x], + 'rate' => $this->input->post('rate_value')[$x], + 'amount' => $this->input->post('amount_value')[$x], + ); + + $this->db->insert('orders_item', $items); + + // now decrease the stock from the product + $product_data = $this->model_products->getProductData($this->input->post('product')[$x]); + $qty = (int) $product_data['qty'] - (int) $this->input->post('qty')[$x]; + + $update_product = array('qty' => $qty); + + + $this->model_products->update($update_product, $this->input->post('product')[$x]); + } + + return ($order_id) ? $order_id : false; + } + + public function countOrderItem($order_id) + { + if($order_id) { + $sql = "SELECT * FROM orders_item WHERE order_id = ?"; + $query = $this->db->query($sql, array($order_id)); + return $query->num_rows(); + } + } + + public function update($id) + { + if($id) { + $user_id = $this->session->userdata('id'); + // fetch the order data + + $data = array( + 'customer_name' => $this->input->post('customer_name'), + 'customer_address' => $this->input->post('customer_address'), + 'customer_phone' => $this->input->post('customer_phone'), + 'gross_amount' => $this->input->post('gross_amount_value'), + 'service_charge_rate' => $this->input->post('service_charge_rate'), + 'service_charge' => ($this->input->post('service_charge_value') > 0) ? $this->input->post('service_charge_value'):0, + 'vat_charge_rate' => $this->input->post('vat_charge_rate'), + 'vat_charge' => ($this->input->post('vat_charge_value') > 0) ? $this->input->post('vat_charge_value') : 0, + 'net_amount' => $this->input->post('net_amount_value'), + 'discount' => $this->input->post('discount'), + 'paid_status' => $this->input->post('paid_status'), + 'user_id' => $user_id + ); + + $this->db->where('id', $id); + $update = $this->db->update('orders', $data); + + // now the order item + // first we will replace the product qty to original and subtract the qty again + $this->load->model('model_products'); + $get_order_item = $this->getOrdersItemData($id); + foreach ($get_order_item as $k => $v) { + $product_id = $v['product_id']; + $qty = $v['qty']; + // get the product + $product_data = $this->model_products->getProductData($product_id); + $update_qty = $qty + $product_data['qty']; + $update_product_data = array('qty' => $update_qty); + + // update the product qty + $this->model_products->update($update_product_data, $product_id); + } + + // now remove the order item data + $this->db->where('order_id', $id); + $this->db->delete('orders_item'); + + // now decrease the product qty + $count_product = count($this->input->post('product')); + for($x = 0; $x < $count_product; $x++) { + $items = array( + 'order_id' => $id, + 'product_id' => $this->input->post('product')[$x], + 'qty' => $this->input->post('qty')[$x], + 'rate' => $this->input->post('rate_value')[$x], + 'amount' => $this->input->post('amount_value')[$x], + ); + $this->db->insert('orders_item', $items); + + // now decrease the stock from the product + $product_data = $this->model_products->getProductData($this->input->post('product')[$x]); + $qty = (int) $product_data['qty'] - (int) $this->input->post('qty')[$x]; + + $update_product = array('qty' => $qty); + $this->model_products->update($update_product, $this->input->post('product')[$x]); + } + + return true; + } + } + + + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('orders'); + + $this->db->where('order_id', $id); + $delete_item = $this->db->delete('orders_item'); + return ($delete == true && $delete_item) ? true : false; + } + } + + public function countTotalPaidOrders() + { + $sql = "SELECT * FROM orders WHERE paid_status = ?"; + $query = $this->db->query($sql, array(1)); + return $query->num_rows(); + } + +} \ No newline at end of file diff --git a/application/models/Model_products.php b/application/models/Model_products.php new file mode 100644 index 00000000..6efac94a --- /dev/null +++ b/application/models/Model_products.php @@ -0,0 +1,64 @@ +db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM products ORDER BY id DESC"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + public function getActiveProductData() + { + $sql = "SELECT * FROM products WHERE availability = ? ORDER BY id DESC"; + $query = $this->db->query($sql, array(1)); + return $query->result_array(); + } + + public function create($data) + { + if($data) { + $insert = $this->db->insert('products', $data); + return ($insert == true) ? true : false; + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('products', $data); + return ($update == true) ? true : false; + } + } + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('products'); + return ($delete == true) ? true : false; + } + } + + public function countTotalProducts() + { + $sql = "SELECT * FROM products"; + $query = $this->db->query($sql); + return $query->num_rows(); + } + +} \ No newline at end of file diff --git a/app/Models/Model_reports.php b/application/models/Model_reports.php similarity index 80% rename from app/Models/Model_reports.php rename to application/models/Model_reports.php index 2742eb49..b5792e28 100644 --- a/app/Models/Model_reports.php +++ b/application/models/Model_reports.php @@ -1,12 +1,11 @@ db->query($sql, array(1)); - $result = $query->getResult(); + $result = $query->result_array(); $return_data = array(); foreach ($result as $k => $v) { - $date = date('Y', $v->date_time); + $date = date('Y', $v['date_time']); $return_data[] = $date; } @@ -40,7 +39,7 @@ public function getOrderData($year) $sql = "SELECT * FROM orders WHERE paid_status = ?"; $query = $this->db->query($sql, array(1)); - $result = $query->getResult(); + $result = $query->result_array(); $final_data = array(); foreach ($months as $month_k => $month_y) { @@ -48,7 +47,7 @@ public function getOrderData($year) $final_data[$get_mon_year][] = ''; foreach ($result as $k => $v) { - $month_year = date('Y-m', $v->date_time); + $month_year = date('Y-m', $v['date_time']); if($get_mon_year == $month_year) { $final_data[$get_mon_year][] = $v; diff --git a/application/models/Model_stores.php b/application/models/Model_stores.php new file mode 100644 index 00000000..caa248b8 --- /dev/null +++ b/application/models/Model_stores.php @@ -0,0 +1,65 @@ +db->query($sql, array(1)); + return $query->result_array(); + } + + /* get the brand data */ + public function getStoresData($id = null) + { + if($id) { + $sql = "SELECT * FROM stores where id = ?"; + $query = $this->db->query($sql, array($id)); + return $query->row_array(); + } + + $sql = "SELECT * FROM stores"; + $query = $this->db->query($sql); + return $query->result_array(); + } + + public function create($data) + { + if($data) { + $insert = $this->db->insert('stores', $data); + return ($insert == true) ? true : false; + } + } + + public function update($data, $id) + { + if($data && $id) { + $this->db->where('id', $id); + $update = $this->db->update('stores', $data); + return ($update == true) ? true : false; + } + } + + public function remove($id) + { + if($id) { + $this->db->where('id', $id); + $delete = $this->db->delete('stores'); + return ($delete == true) ? true : false; + } + } + + public function countTotalStores() + { + $sql = "SELECT * FROM stores WHERE active = ?"; + $query = $this->db->query($sql, array(1)); + return $query->num_rows(); + } + +} \ No newline at end of file diff --git a/application/models/Model_users.php b/application/models/Model_users.php new file mode 100644 index 00000000..ac0cfbd3 --- /dev/null +++ b/application/models/Model_users.php @@ -0,0 +1,87 @@ +db->query($sql, array($userId)); + return $query->row_array(); + } + + $sql = "SELECT * FROM users WHERE id != ?"; + $query = $this->db->query($sql, array(1)); + return $query->result_array(); + } + + public function getUserGroup($userId = null) + { + if($userId) { + $sql = "SELECT * FROM user_group WHERE user_id = ?"; + $query = $this->db->query($sql, array($userId)); + $result = $query->row_array(); + + $group_id = $result['group_id']; + $g_sql = "SELECT * FROM groups WHERE id = ?"; + $g_query = $this->db->query($g_sql, array($group_id)); + $q_result = $g_query->row_array(); + return $q_result; + } + } + + public function create($data = '', $group_id = null) + { + + if($data && $group_id) { + $create = $this->db->insert('users', $data); + + $user_id = $this->db->insert_id(); + + $group_data = array( + 'user_id' => $user_id, + 'group_id' => $group_id + ); + + $group_data = $this->db->insert('user_group', $group_data); + + return ($create == true && $group_data) ? true : false; + } + } + + public function edit($data = array(), $id = null, $group_id = null) + { + $this->db->where('id', $id); + $update = $this->db->update('users', $data); + + if($group_id) { + // user group + $update_user_group = array('group_id' => $group_id); + $this->db->where('user_id', $id); + $user_group = $this->db->update('user_group', $update_user_group); + return ($update == true && $user_group == true) ? true : false; + } + + return ($update == true) ? true : false; + } + + public function delete($id) + { + $this->db->where('id', $id); + $delete = $this->db->delete('users'); + return ($delete == true) ? true : false; + } + + public function countTotalUsers() + { + $sql = "SELECT * FROM users"; + $query = $this->db->query($sql); + return $query->num_rows(); + } + +} \ No newline at end of file diff --git a/application/models/index.html b/application/models/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/application/models/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/application/third_party/index.html b/application/third_party/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/application/third_party/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/app/Views/attributes/addvalue.php b/application/views/attributes/addvalue.php similarity index 90% rename from app/Views/attributes/addvalue.php rename to application/views/attributes/addvalue.php index ef8e6136..223c751b 100644 --- a/app/Views/attributes/addvalue.php +++ b/application/views/attributes/addvalue.php @@ -10,7 +10,7 @@ @@ -23,21 +23,21 @@
-

Attribute name: name; ?>

+

Attribute name:

- getFlashdata('success')): ?> + session->flashdata('success')): ?> - getFlashdata('error')): ?> + session->flashdata('error')): ?> @@ -58,7 +58,7 @@ - + @@ -99,9 +99,9 @@ @@ -132,9 +132,9 @@ @@ -155,11 +155,11 @@ @@ -182,11 +182,8 @@ // initialize the datatable manageTable = $('#manageTable').DataTable({ - 'ajax': base_url+'/attributes/fetchAttributeValueData/'+id; ?>, - 'order': [], - 'language': { - 'url': base_url + '/assets/bower_components/datatables.net/i18n/.json' - } + 'ajax': base_url+'attributes/fetchAttributeValueData/'+, + 'order': [] }); // submit the create from @@ -254,7 +251,7 @@ function editFunc(id) { $.ajax({ - url: base_url+'/attributes/fetchAttributeValueById/'+id, + url: base_url+'attributes/fetchAttributeValueById/'+id, type: 'post', dataType: 'json', success:function(response) { diff --git a/app/Views/attributes/index.php b/application/views/attributes/index.php similarity index 89% rename from app/Views/attributes/index.php rename to application/views/attributes/index.php index ea3e9906..acc5849a 100644 --- a/app/Views/attributes/index.php +++ b/application/views/attributes/index.php @@ -5,12 +5,12 @@

- - + Manage + Attributes

@@ -22,15 +22,15 @@
- getFlashdata('success')): ?> + session->flashdata('success')): ?> - getFlashdata('error')): ?> + session->flashdata('error')): ?> @@ -50,9 +50,9 @@ - + - + @@ -92,7 +92,7 @@
- +
- +
- + - + @@ -91,7 +91,7 @@
- +
- +
Gross Amount:'.$order_data->gross_amount.''.$order_data['gross_amount'].'
Service Charge ('.$order_data->service_charge_rate.'%)'.$order_data->service_charge.'Service Charge ('.$order_data['service_charge_rate'].'%)'.$order_data['service_charge'].'
Vat Charge ('.$order_data->vat_charge_rate.'%)'.$order_data->vat_charge.'Vat Charge ('.$order_data['vat_charge_rate'].'%)'.$order_data['vat_charge'].'
Discount:'.$order_data->discount.''.$order_data['discount'].'
Net Amount:'.$order_data->net_amount.''.$order_data['net_amount'].'
Paid Status:
Attribute Value Action
Attribute Name Total valueStatus Action
Brand NameStatus Action
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeIgniter Version:{ ciVersion }
PHP Version:{ phpVersion }
PHP SAPI:{ phpSAPI }
Environment:{ environment }
Base URL: - { if $baseURL == '' } -
- The $baseURL should always be set manually to prevent possible URL personification from external parties. -
- { else } - { baseURL } - { endif } -
TimeZone:{ timezone }
Locale:{ locale }
Content Security Policy Enabled:{ if $cspEnabled } Yes { else } No { endif }
diff --git a/system/Debug/Toolbar/Views/_database.tpl b/system/Debug/Toolbar/Views/_database.tpl deleted file mode 100644 index b5cf1a43..00000000 --- a/system/Debug/Toolbar/Views/_database.tpl +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - {queries} - - - - - {/queries} - -
TimeQuery String
{duration}{! sql !}
diff --git a/system/Debug/Toolbar/Views/_events.tpl b/system/Debug/Toolbar/Views/_events.tpl deleted file mode 100644 index 88d732f4..00000000 --- a/system/Debug/Toolbar/Views/_events.tpl +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - {events} - - - - - - {/events} - -
TimeEvent NameTimes Called
{ duration } ms{event}{count}
diff --git a/system/Debug/Toolbar/Views/_files.tpl b/system/Debug/Toolbar/Views/_files.tpl deleted file mode 100644 index 9c992ab7..00000000 --- a/system/Debug/Toolbar/Views/_files.tpl +++ /dev/null @@ -1,16 +0,0 @@ - - - {userFiles} - - - - - {/userFiles} - {coreFiles} - - - - - {/coreFiles} - -
{name}{path}
{name}{path}
diff --git a/system/Debug/Toolbar/Views/_history.tpl b/system/Debug/Toolbar/Views/_history.tpl deleted file mode 100644 index 9db00ecc..00000000 --- a/system/Debug/Toolbar/Views/_history.tpl +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - {files} - - - - - - - - - - {/files} - -
ActionDatetimeStatusMethodURLContent-TypeIs AJAX?
- - {datetime}{status}{method}{url}{contentType}{isAJAX}
diff --git a/system/Debug/Toolbar/Views/_logs.tpl b/system/Debug/Toolbar/Views/_logs.tpl deleted file mode 100644 index 7c80d849..00000000 --- a/system/Debug/Toolbar/Views/_logs.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{ if $logs == [] } -

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

-{ else } - - - - - - - - - {logs} - - - - - {/logs} - -
SeverityMessage
{level}{msg}
-{ endif } diff --git a/system/Debug/Toolbar/Views/_routes.tpl b/system/Debug/Toolbar/Views/_routes.tpl deleted file mode 100644 index e277046a..00000000 --- a/system/Debug/Toolbar/Views/_routes.tpl +++ /dev/null @@ -1,52 +0,0 @@ -

Matched Route

- - - - {matchedRoute} - - - - - - - - - - - - - - - - - {params} - - - - - {/params} - {/matchedRoute} - -
Directory:{directory}
Controller:{controller}
Method:{method}
Params:{paramCount} / {truePCount}
{name}{value}
- - -

Defined Routes

- - - - - - - - - - - {routes} - - - - - - {/routes} - -
MethodRouteHandler
{method}{route}{handler}
diff --git a/system/Debug/Toolbar/Views/toolbar.css b/system/Debug/Toolbar/Views/toolbar.css deleted file mode 100644 index e2abb4ce..00000000 --- a/system/Debug/Toolbar/Views/toolbar.css +++ /dev/null @@ -1,609 +0,0 @@ -/* CodeIgniter 4 - Debug bar - ============================================================================ */ -/* Forum: https://forum.codeigniter.com - * Github: https://github.com/codeigniter4/codeigniter4 - * Slack: https://codeigniterchat.slack.com - * Website: https://codeigniter.com - */ -#debug-icon { - bottom: 0; - position: fixed; - right: 0; - z-index: 10000; - height: 36px; - width: 36px; - margin: 0px; - padding: 0px; - clear: both; - text-align: center; } - #debug-icon a svg { - margin: 8px; - max-width: 20px; - max-height: 20px; } - #debug-icon.fixed-top { - bottom: auto; - top: 0; } - #debug-icon .debug-bar-ndisplay { - display: none; } - -#debug-bar { - bottom: 0; - left: 0; - position: fixed; - right: 0; - z-index: 10000; - height: 36px; - line-height: 36px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; - font-size: 16px; - font-weight: 400; } - #debug-bar h1 { - bottom: 0; - display: inline-block; - font-size: 14px; - font-weight: normal; - margin: 0 16px 0 0; - padding: 0; - position: absolute; - right: 30px; - text-align: left; - top: 0; } - #debug-bar h2 { - font-size: 16px; - margin: 0; - padding: 5px 0 10px 0; } - #debug-bar h2 span { - font-size: 13px; } - #debug-bar h3 { - font-size: 12px; - font-weight: 200; - margin: 0 0 0 10px; - padding: 0; - text-transform: uppercase; } - #debug-bar p { - font-size: 12px; - margin: 0 0 0 15px; - padding: 0; } - #debug-bar a { - text-decoration: none; } - #debug-bar a:hover { - text-decoration: underline; } - #debug-bar button { - border: 1px solid; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - cursor: pointer; - line-height: 15px; } - #debug-bar button:hover { - text-decoration: underline; } - #debug-bar table { - border-collapse: collapse; - font-size: 14px; - line-height: normal; - margin: 5px 10px 15px 10px; - width: calc(100% - 10px); } - #debug-bar table strong { - font-weight: 500; } - #debug-bar table th { - display: table-cell; - font-weight: 600; - padding-bottom: 0.7em; - text-align: left; } - #debug-bar table tr { - border: none; } - #debug-bar table td { - border: none; - display: table-cell; - margin: 0; - text-align: left; } - #debug-bar table td:first-child { - max-width: 20%; } - #debug-bar table td:first-child.narrow { - width: 7em; } - #debug-bar .toolbar { - display: block; - overflow: hidden; - overflow-y: auto; - padding: 0 12px 0 12px; - /* give room for OS X scrollbar */ - white-space: nowrap; - z-index: 10000; } - #debug-bar.fixed-top { - bottom: auto; - top: 0; } - #debug-bar.fixed-top .tab { - bottom: auto; - top: 36px; } - #debug-bar #toolbar-position a, - #debug-bar #toolbar-theme a { - float: left; - padding: 0 6px; } - #debug-bar #toolbar-position a:hover, - #debug-bar #toolbar-theme a:hover { - text-decoration: none; } - #debug-bar #debug-bar-link { - bottom: 0; - display: inline-block; - font-size: 16px; - line-height: 36px; - padding: 6px; - position: absolute; - right: 10px; - top: 0; - width: 24px; } - #debug-bar .ci-label { - display: inline-block; - font-size: 14px; - vertical-align: baseline; } - #debug-bar .ci-label:hover { - cursor: pointer; } - #debug-bar .ci-label a { - color: inherit; - display: block; - letter-spacing: normal; - padding: 0 10px; - text-decoration: none; } - #debug-bar .ci-label img { - clear: left; - display: inline-block; - float: left; - margin: 6px 3px 6px 0; - width: 16px !important; - } - #debug-bar .ci-label .badge { - border-radius: 12px; - -moz-border-radius: 12px; - -webkit-border-radius: 12px; - display: inline-block; - font-size: 75%; - font-weight: bold; - line-height: 12px; - margin-left: 5px; - padding: 2px 5px; - text-align: center; - vertical-align: baseline; - white-space: nowrap; } - #debug-bar .tab { - bottom: 35px; - display: none; - left: 0; - max-height: 62%; - overflow: hidden; - overflow-y: auto; - padding: 1em 2em; - position: fixed; - right: 0; - z-index: 9999; } - #debug-bar .timeline { - margin-left: 0; - width: 100%; } - #debug-bar .timeline th { - border-left: 1px solid; - font-size: 12px; - font-weight: 200; - padding: 5px 5px 10px 5px; - position: relative; - text-align: left; } - #debug-bar .timeline th:first-child { - border-left: 0; } - #debug-bar .timeline td { - border-left: 1px solid; - padding: 5px; - position: relative; } - #debug-bar .timeline td:first-child { - border-left: 0; } - #debug-bar .timeline .timer { - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - display: inline-block; - padding: 5px; - position: absolute; - top: 30%; } - #debug-bar .route-params, - #debug-bar .route-params-item { - vertical-align: top; } - #debug-bar .route-params td:first-child, - #debug-bar .route-params-item td:first-child { - font-style: italic; - padding-left: 1em; - text-align: right; } - -.debug-view.show-view { - border: 1px solid; - margin: 4px; } - -.debug-view-path { - font-family: monospace; - font-size: 12px; - letter-spacing: normal; - min-height: 16px; - padding: 2px; - text-align: left; } - -.show-view .debug-view-path { - display: block !important; } - -@media screen and (max-width: 1024px) { - .hide-sm { - display: none !important; } } -#debug-icon { - background-color: #FFFFFF; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #debug-icon a:active, #debug-icon a:link, #debug-icon a:visited { - color: #DD8615; } - -#debug-bar { - background-color: #FFFFFF; - color: #434343; } - #debug-bar h1, - #debug-bar h2, - #debug-bar h3, - #debug-bar p, - #debug-bar a, - #debug-bar button, - #debug-bar table, - #debug-bar thead, - #debug-bar tr, - #debug-bar td, - #debug-bar button, - #debug-bar .toolbar { - background-color: transparent; - color: #434343; } - #debug-bar button { - background-color: #FFFFFF; } - #debug-bar table strong { - color: #FDC894; } - #debug-bar table tbody tr:hover { - background-color: #DFDFDF; } - #debug-bar table tbody tr.current { - background-color: #FDC894; } - #debug-bar table tbody tr.current:hover td { - background-color: #DD4814; - color: #FFFFFF; } - #debug-bar .toolbar { - background-color: #FFFFFF; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #debug-bar .toolbar img { - filter: brightness(0) invert(0.4); } - #debug-bar.fixed-top .toolbar { - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #debug-bar.fixed-top .tab { - box-shadow: 0 1px 4px #DFDFDF; - -moz-box-shadow: 0 1px 4px #DFDFDF; - -webkit-box-shadow: 0 1px 4px #DFDFDF; } - #debug-bar .muted { - color: #434343; } - #debug-bar .muted td { - color: #DFDFDF; } - #debug-bar .muted:hover td { - color: #434343; } - #debug-bar #toolbar-position, - #debug-bar #toolbar-theme { - filter: brightness(0) invert(0.6); } - #debug-bar .ci-label.active { - background-color: #DFDFDF; } - #debug-bar .ci-label:hover { - background-color: #DFDFDF; } - #debug-bar .ci-label .badge { - background-color: #5BC0DE; - color: #FFFFFF; } - #debug-bar .tab { - background-color: #FFFFFF; - box-shadow: 0 -1px 4px #DFDFDF; - -moz-box-shadow: 0 -1px 4px #DFDFDF; - -webkit-box-shadow: 0 -1px 4px #DFDFDF; } - #debug-bar .timeline th, - #debug-bar .timeline td { - border-color: #DFDFDF; } - #debug-bar .timeline .timer { - background-color: #DD8615; } - -.debug-view.show-view { - border-color: #DD8615; } - -.debug-view-path { - background-color: #FDC894; - color: #434343; } - -@media (prefers-color-scheme: dark) { - #debug-icon { - background-color: #252525; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #debug-icon a:active, #debug-icon a:link, #debug-icon a:visited { - color: #DD8615; } - - #debug-bar { - background-color: #252525; - color: #DFDFDF; } - #debug-bar h1, - #debug-bar h2, - #debug-bar h3, - #debug-bar p, - #debug-bar a, - #debug-bar button, - #debug-bar table, - #debug-bar thead, - #debug-bar tr, - #debug-bar td, - #debug-bar button, - #debug-bar .toolbar { - background-color: transparent; - color: #DFDFDF; } - #debug-bar button { - background-color: #252525; } - #debug-bar table strong { - color: #FDC894; } - #debug-bar table tbody tr:hover { - background-color: #434343; } - #debug-bar table tbody tr.current { - background-color: #FDC894; } - #debug-bar table tbody tr.current td { - color: #252525; } - #debug-bar table tbody tr.current:hover td { - background-color: #DD4814; - color: #FFFFFF; } - #debug-bar .toolbar { - background-color: #434343; - box-shadow: 0 0 4px #434343; - -moz-box-shadow: 0 0 4px #434343; - -webkit-box-shadow: 0 0 4px #434343; } - #debug-bar .toolbar img { - filter: brightness(0) invert(1); } - #debug-bar.fixed-top .toolbar { - box-shadow: 0 0 4px #434343; - -moz-box-shadow: 0 0 4px #434343; - -webkit-box-shadow: 0 0 4px #434343; } - #debug-bar.fixed-top .tab { - box-shadow: 0 1px 4px #434343; - -moz-box-shadow: 0 1px 4px #434343; - -webkit-box-shadow: 0 1px 4px #434343; } - #debug-bar .muted { - color: #DFDFDF; } - #debug-bar .muted td { - color: #434343; } - #debug-bar .muted:hover td { - color: #DFDFDF; } - #debug-bar #toolbar-position, - #debug-bar #toolbar-theme { - filter: brightness(0) invert(0.6); } - #debug-bar .ci-label.active { - background-color: #252525; } - #debug-bar .ci-label:hover { - background-color: #252525; } - #debug-bar .ci-label .badge { - background-color: #5BC0DE; - color: #DFDFDF; } - #debug-bar .tab { - background-color: #252525; - box-shadow: 0 -1px 4px #434343; - -moz-box-shadow: 0 -1px 4px #434343; - -webkit-box-shadow: 0 -1px 4px #434343; } - #debug-bar .timeline th, - #debug-bar .timeline td { - border-color: #434343; } - #debug-bar .timeline .timer { - background-color: #DD8615; } - - .debug-view.show-view { - border-color: #DD8615; } - - .debug-view-path { - background-color: #FDC894; - color: #434343; } } -#toolbarContainer.dark #debug-icon { - background-color: #252525; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #toolbarContainer.dark #debug-icon a:active, #toolbarContainer.dark #debug-icon a:link, #toolbarContainer.dark #debug-icon a:visited { - color: #DD8615; } -#toolbarContainer.dark #debug-bar { - background-color: #252525; - color: #DFDFDF; } - #toolbarContainer.dark #debug-bar h1, - #toolbarContainer.dark #debug-bar h2, - #toolbarContainer.dark #debug-bar h3, - #toolbarContainer.dark #debug-bar p, - #toolbarContainer.dark #debug-bar a, - #toolbarContainer.dark #debug-bar button, - #toolbarContainer.dark #debug-bar table, - #toolbarContainer.dark #debug-bar thead, - #toolbarContainer.dark #debug-bar tr, - #toolbarContainer.dark #debug-bar td, - #toolbarContainer.dark #debug-bar button, - #toolbarContainer.dark #debug-bar .toolbar { - background-color: transparent; - color: #DFDFDF; } - #toolbarContainer.dark #debug-bar button { - background-color: #252525; } - #toolbarContainer.dark #debug-bar table strong { - color: #FDC894; } - #toolbarContainer.dark #debug-bar table tbody tr:hover { - background-color: #434343; } - #toolbarContainer.dark #debug-bar table tbody tr.current { - background-color: #FDC894; } - #toolbarContainer.dark #debug-bar table tbody tr.current td { - color: #252525; } - #toolbarContainer.dark #debug-bar table tbody tr.current:hover td { - background-color: #DD4814; - color: #FFFFFF; } - #toolbarContainer.dark #debug-bar .toolbar { - background-color: #434343; - box-shadow: 0 0 4px #434343; - -moz-box-shadow: 0 0 4px #434343; - -webkit-box-shadow: 0 0 4px #434343; } - #toolbarContainer.dark #debug-bar .toolbar img { - filter: brightness(0) invert(1); } - #toolbarContainer.dark #debug-bar.fixed-top .toolbar { - box-shadow: 0 0 4px #434343; - -moz-box-shadow: 0 0 4px #434343; - -webkit-box-shadow: 0 0 4px #434343; } - #toolbarContainer.dark #debug-bar.fixed-top .tab { - box-shadow: 0 1px 4px #434343; - -moz-box-shadow: 0 1px 4px #434343; - -webkit-box-shadow: 0 1px 4px #434343; } - #toolbarContainer.dark #debug-bar .muted { - color: #DFDFDF; } - #toolbarContainer.dark #debug-bar .muted td { - color: #434343; } - #toolbarContainer.dark #debug-bar .muted:hover td { - color: #DFDFDF; } - #toolbarContainer.dark #debug-bar #toolbar-position, - #toolbarContainer.dark #debug-bar #toolbar-theme { - filter: brightness(0) invert(0.6); } - #toolbarContainer.dark #debug-bar .ci-label.active { - background-color: #252525; } - #toolbarContainer.dark #debug-bar .ci-label:hover { - background-color: #252525; } - #toolbarContainer.dark #debug-bar .ci-label .badge { - background-color: #5BC0DE; - color: #DFDFDF; } - #toolbarContainer.dark #debug-bar .tab { - background-color: #252525; - box-shadow: 0 -1px 4px #434343; - -moz-box-shadow: 0 -1px 4px #434343; - -webkit-box-shadow: 0 -1px 4px #434343; } - #toolbarContainer.dark #debug-bar .timeline th, - #toolbarContainer.dark #debug-bar .timeline td { - border-color: #434343; } - #toolbarContainer.dark #debug-bar .timeline .timer { - background-color: #DD8615; } -#toolbarContainer.dark .debug-view.show-view { - border-color: #DD8615; } -#toolbarContainer.dark .debug-view-path { - background-color: #FDC894; - color: #434343; } - -#toolbarContainer.light #debug-icon { - background-color: #FFFFFF; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #toolbarContainer.light #debug-icon a:active, #toolbarContainer.light #debug-icon a:link, #toolbarContainer.light #debug-icon a:visited { - color: #DD8615; } -#toolbarContainer.light #debug-bar { - background-color: #FFFFFF; - color: #434343; } - #toolbarContainer.light #debug-bar h1, - #toolbarContainer.light #debug-bar h2, - #toolbarContainer.light #debug-bar h3, - #toolbarContainer.light #debug-bar p, - #toolbarContainer.light #debug-bar a, - #toolbarContainer.light #debug-bar button, - #toolbarContainer.light #debug-bar table, - #toolbarContainer.light #debug-bar thead, - #toolbarContainer.light #debug-bar tr, - #toolbarContainer.light #debug-bar td, - #toolbarContainer.light #debug-bar button, - #toolbarContainer.light #debug-bar .toolbar { - background-color: transparent; - color: #434343; } - #toolbarContainer.light #debug-bar button { - background-color: #FFFFFF; } - #toolbarContainer.light #debug-bar table strong { - color: #FDC894; } - #toolbarContainer.light #debug-bar table tbody tr:hover { - background-color: #DFDFDF; } - #toolbarContainer.light #debug-bar table tbody tr.current { - background-color: #FDC894; } - #toolbarContainer.light #debug-bar table tbody tr.current:hover td { - background-color: #DD4814; - color: #FFFFFF; } - #toolbarContainer.light #debug-bar .toolbar { - background-color: #FFFFFF; - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #toolbarContainer.light #debug-bar .toolbar img { - filter: brightness(0) invert(0.4); } - #toolbarContainer.light #debug-bar.fixed-top .toolbar { - box-shadow: 0 0 4px #DFDFDF; - -moz-box-shadow: 0 0 4px #DFDFDF; - -webkit-box-shadow: 0 0 4px #DFDFDF; } - #toolbarContainer.light #debug-bar.fixed-top .tab { - box-shadow: 0 1px 4px #DFDFDF; - -moz-box-shadow: 0 1px 4px #DFDFDF; - -webkit-box-shadow: 0 1px 4px #DFDFDF; } - #toolbarContainer.light #debug-bar .muted { - color: #434343; } - #toolbarContainer.light #debug-bar .muted td { - color: #DFDFDF; } - #toolbarContainer.light #debug-bar .muted:hover td { - color: #434343; } - #toolbarContainer.light #debug-bar #toolbar-position, - #toolbarContainer.light #debug-bar #toolbar-theme { - filter: brightness(0) invert(0.6); } - #toolbarContainer.light #debug-bar .ci-label.active { - background-color: #DFDFDF; } - #toolbarContainer.light #debug-bar .ci-label:hover { - background-color: #DFDFDF; } - #toolbarContainer.light #debug-bar .ci-label .badge { - background-color: #5BC0DE; - color: #FFFFFF; } - #toolbarContainer.light #debug-bar .tab { - background-color: #FFFFFF; - box-shadow: 0 -1px 4px #DFDFDF; - -moz-box-shadow: 0 -1px 4px #DFDFDF; - -webkit-box-shadow: 0 -1px 4px #DFDFDF; } - #toolbarContainer.light #debug-bar .timeline th, - #toolbarContainer.light #debug-bar .timeline td { - border-color: #DFDFDF; } - #toolbarContainer.light #debug-bar .timeline .timer { - background-color: #DD8615; } -#toolbarContainer.light .debug-view.show-view { - border-color: #DD8615; } -#toolbarContainer.light .debug-view-path { - background-color: #FDC894; - color: #434343; } - -.debug-bar-width30 { - width: 30%; } - -.debug-bar-width10 { - width: 10%; } - -.debug-bar-width70p { - width: 70px; } - -.debug-bar-width140p { - width: 140px; } - -.debug-bar-width20e { - width: 20em; } - -.debug-bar-width6r { - width: 6rem; } - -.debug-bar-ndisplay { - display: none; } - -.debug-bar-alignRight { - text-align: right; } - -.debug-bar-alignLeft { - text-align: left; } - -.debug-bar-noverflow { - overflow: hidden; } - -#debug-bar td[data-debugbar-route] form { - display: none; } -#debug-bar td[data-debugbar-route]:hover form { - display: block; } -#debug-bar td[data-debugbar-route]:hover > div { - display: none; } -#debug-bar td[data-debugbar-route] input[type=text] { - padding: 2px; } -#toolbarContainer.dark td[data-debugbar-route] input[type=text] { - background: #000; - color: #fff; } diff --git a/system/Debug/Toolbar/Views/toolbar.js b/system/Debug/Toolbar/Views/toolbar.js deleted file mode 100644 index 15fa668f..00000000 --- a/system/Debug/Toolbar/Views/toolbar.js +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Functionality for the CodeIgniter Debug Toolbar. - */ - -var ciDebugBar = { - - toolbarContainer : null, - toolbar : null, - icon : null, - - //-------------------------------------------------------------------- - - init : function () { - this.toolbarContainer = document.getElementById('toolbarContainer'); - this.toolbar = document.getElementById('debug-bar'); - this.icon = document.getElementById('debug-icon'); - - ciDebugBar.createListeners(); - ciDebugBar.setToolbarState(); - ciDebugBar.setToolbarPosition(); - ciDebugBar.setToolbarTheme(); - ciDebugBar.toggleViewsHints(); - ciDebugBar.routerLink(); - - document.getElementById('debug-bar-link').addEventListener('click', ciDebugBar.toggleToolbar, true); - document.getElementById('debug-icon-link').addEventListener('click', ciDebugBar.toggleToolbar, true); - - // Allows to highlight the row of the current history request - var btn = document.querySelector('button[data-time="' + localStorage.getItem('debugbar-time') + '"]'); - ciDebugBar.addClass(btn.parentNode.parentNode, 'current'); - - historyLoad = document.getElementsByClassName('ci-history-load'); - - for (var i = 0; i < historyLoad.length; i++) - { - historyLoad[i].addEventListener('click', function () { - loadDoc(this.getAttribute('data-time')); - }, true); - } - - // Display the active Tab on page load - var tab = ciDebugBar.readCookie('debug-bar-tab'); - if (document.getElementById(tab)) - { - var el = document.getElementById(tab); - el.style.display = 'block'; - ciDebugBar.addClass(el, 'active'); - tab = document.querySelector('[data-tab=' + tab + ']'); - if (tab) - { - ciDebugBar.addClass(tab.parentNode, 'active'); - } - } - }, - - //-------------------------------------------------------------------- - - createListeners : function () { - var buttons = [].slice.call(document.querySelectorAll('#debug-bar .ci-label a')); - - for (var i = 0; i < buttons.length; i++) - { - buttons[i].addEventListener('click', ciDebugBar.showTab, true); - } - }, - - //-------------------------------------------------------------------- - - showTab: function () { - // Get the target tab, if any - var tab = document.getElementById(this.getAttribute('data-tab')); - - // If the label have not a tab stops here - if (! tab) - { - return; - } - - // Remove debug-bar-tab cookie - ciDebugBar.createCookie('debug-bar-tab', '', -1); - - // Check our current state. - var state = tab.style.display; - - // Hide all tabs - var tabs = document.querySelectorAll('#debug-bar .tab'); - - for (var i = 0; i < tabs.length; i++) - { - tabs[i].style.display = 'none'; - } - - // Mark all labels as inactive - var labels = document.querySelectorAll('#debug-bar .ci-label'); - - for (var i = 0; i < labels.length; i++) - { - ciDebugBar.removeClass(labels[i], 'active'); - } - - // Show/hide the selected tab - if (state != 'block') - { - tab.style.display = 'block'; - ciDebugBar.addClass(this.parentNode, 'active'); - // Create debug-bar-tab cookie to persistent state - ciDebugBar.createCookie('debug-bar-tab', this.getAttribute('data-tab'), 365); - } - }, - - //-------------------------------------------------------------------- - - addClass : function (el, className) { - if (el.classList) - { - el.classList.add(className); - } - else - { - el.className += ' ' + className; - } - }, - - //-------------------------------------------------------------------- - - removeClass : function (el, className) { - if (el.classList) - { - el.classList.remove(className); - } - else - { - el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); - } - }, - - //-------------------------------------------------------------------- - - /** - * Toggle display of a data table - * - * @param obj - */ - toggleDataTable : function (obj) { - if (typeof obj == 'string') - { - obj = document.getElementById(obj + '_table'); - } - - if (obj) - { - obj.style.display = obj.style.display == 'none' ? 'block' : 'none'; - } - }, - - //-------------------------------------------------------------------- - - /** - * Toggle tool bar from full to icon and icon to full - */ - toggleToolbar : function () { - var open = ciDebugBar.toolbar.style.display != 'none'; - - ciDebugBar.icon.style.display = open == true ? 'inline-block' : 'none'; - ciDebugBar.toolbar.style.display = open == false ? 'inline-block' : 'none'; - - // Remember it for other page loads on this site - ciDebugBar.createCookie('debug-bar-state', '', -1); - ciDebugBar.createCookie('debug-bar-state', open == true ? 'minimized' : 'open' , 365); - }, - - //-------------------------------------------------------------------- - - /** - * Sets the initial state of the toolbar (open or minimized) when - * the page is first loaded to allow it to remember the state between refreshes. - */ - setToolbarState: function () { - var open = ciDebugBar.readCookie('debug-bar-state'); - - ciDebugBar.icon.style.display = open != 'open' ? 'inline-block' : 'none'; - ciDebugBar.toolbar.style.display = open == 'open' ? 'inline-block' : 'none'; - }, - - //-------------------------------------------------------------------- - - toggleViewsHints: function () { - // Avoid toggle hints on history requests that are not the initial - if (localStorage.getItem('debugbar-time') != localStorage.getItem('debugbar-time-new')) - { - var a = document.querySelector('a[data-tab="ci-views"]'); - a.href = '#'; - return; - } - - var nodeList = []; // [ Element, NewElement( 1 )/OldElement( 0 ) ] - var sortedComments = []; - var comments = []; - - var getComments = function () { - var nodes = []; - var result = []; - var xpathResults = document.evaluate( "//comment()[starts-with(., ' DEBUG-VIEW')]", document, null, XPathResult.ANY_TYPE, null); - var nextNode = xpathResults.iterateNext(); - while ( nextNode ) - { - nodes.push( nextNode ); - nextNode = xpathResults.iterateNext(); - } - - // sort comment by opening and closing tags - for (var i = 0; i < nodes.length; ++i) - { - // get file path + name to use as key - var path = nodes[i].nodeValue.substring( 18, nodes[i].nodeValue.length - 1 ); - - if ( nodes[i].nodeValue[12] === 'S' ) // simple check for start comment - { - // create new entry - result[path] = [ nodes[i], null ]; - } - else if (result[path]) - { - // add to existing entry - result[path][1] = nodes[i]; - } - } - - return result; - }; - - // find node that has TargetNode as parentNode - var getParentNode = function ( node, targetNode ) { - if ( node.parentNode === null ) - { - return null; - } - - if ( node.parentNode !== targetNode ) - { - return getParentNode( node.parentNode, targetNode ); - } - - return node; - }; - - // define invalid & outer ( also invalid ) elements - const INVALID_ELEMENTS = [ 'NOSCRIPT', 'SCRIPT', 'STYLE' ]; - const OUTER_ELEMENTS = [ 'HTML', 'BODY', 'HEAD' ]; - - var getValidElementInner = function ( node, reverse ) { - // handle invalid tags - if ( OUTER_ELEMENTS.indexOf( node.nodeName ) !== -1 ) - { - for (var i = 0; i < document.body.children.length; ++i) - { - var index = reverse ? document.body.children.length - ( i + 1 ) : i; - var element = document.body.children[index]; - - // skip invalid tags - if ( INVALID_ELEMENTS.indexOf( element.nodeName ) !== -1 ) - { - continue; - } - - return [ element, reverse ]; - } - - return null; - } - - // get to next valid element - while ( node !== null && INVALID_ELEMENTS.indexOf( node.nodeName ) !== -1 ) - { - node = reverse ? node.previousElementSibling : node.nextElementSibling; - } - - // return non array if we couldnt find something - if ( node === null ) - { - return null; - } - - return [ node, reverse ]; - }; - - // get next valid element ( to be safe to add divs ) - // @return [ element, skip element ] or null if we couldnt find a valid place - var getValidElement = function ( nodeElement ) { - if (nodeElement) - { - if ( nodeElement.nextElementSibling !== null ) - { - return getValidElementInner( nodeElement.nextElementSibling, false ) - || getValidElementInner( nodeElement.previousElementSibling, true ); - } - if ( nodeElement.previousElementSibling !== null ) - { - return getValidElementInner( nodeElement.previousElementSibling, true ); - } - } - - // something went wrong! -> element is not in DOM - return null; - }; - - function showHints() - { - // Had AJAX? Reset view blocks - sortedComments = getComments(); - - for (var key in sortedComments) - { - var startElement = getValidElement( sortedComments[key][0] ); - var endElement = getValidElement( sortedComments[key][1] ); - - // skip if we couldnt get a valid element - if ( startElement === null || endElement === null ) - { - continue; - } - - // find element which has same parent as startelement - var jointParent = getParentNode( endElement[0], startElement[0].parentNode ); - if ( jointParent === null ) - { - // find element which has same parent as endelement - jointParent = getParentNode( startElement[0], endElement[0].parentNode ); - if ( jointParent === null ) - { - // both tries failed - continue; - } - else - { - startElement[0] = jointParent; - } - } - else - { - endElement[0] = jointParent; - } - - var debugDiv = document.createElement( 'div' ); // holder - var debugPath = document.createElement( 'div' ); // path - var childArray = startElement[0].parentNode.childNodes; // target child array - var parent = startElement[0].parentNode; - var start, end; - - // setup container - debugDiv.classList.add( 'debug-view' ); - debugDiv.classList.add( 'show-view' ); - debugPath.classList.add( 'debug-view-path' ); - debugPath.innerText = key; - debugDiv.appendChild( debugPath ); - - // calc distance between them - // start - for (var i = 0; i < childArray.length; ++i) - { - // check for comment ( start & end ) -> if its before valid start element - if ( childArray[i] === sortedComments[key][1] || - childArray[i] === sortedComments[key][0] || - childArray[i] === startElement[0] ) - { - start = i; - if ( childArray[i] === sortedComments[key][0] ) - { - start++; // increase to skip the start comment - } - break; - } - } - // adjust if we want to skip the start element - if ( startElement[1] ) - { - start++; - } - - // end - for (var i = start; i < childArray.length; ++i) - { - if ( childArray[i] === endElement[0] ) - { - end = i; - // dont break to check for end comment after end valid element - } - else if ( childArray[i] === sortedComments[key][1] ) - { - // if we found the end comment, we can break - end = i; - break; - } - } - - // move elements - var number = end - start; - if ( endElement[1] ) - { - number++; - } - for (var i = 0; i < number; ++i) - { - if ( INVALID_ELEMENTS.indexOf( childArray[start] ) !== -1 ) - { - // skip invalid childs that can cause problems if moved - start++; - continue; - } - debugDiv.appendChild( childArray[start] ); - } - - // add container to DOM - nodeList.push( parent.insertBefore( debugDiv, childArray[start] ) ); - } - - ciDebugBar.createCookie('debug-view', 'show', 365); - ciDebugBar.addClass(btn, 'active'); - } - - function hideHints() - { - for (var i = 0; i < nodeList.length; ++i) - { - var index; - - // find index - for (var j = 0; j < nodeList[i].parentNode.childNodes.length; ++j) - { - if ( nodeList[i].parentNode.childNodes[j] === nodeList[i] ) - { - index = j; - break; - } - } - - // move child back - while ( nodeList[i].childNodes.length !== 1 ) - { - nodeList[i].parentNode.insertBefore( nodeList[i].childNodes[1], nodeList[i].parentNode.childNodes[index].nextSibling ); - index++; - } - - nodeList[i].parentNode.removeChild( nodeList[i] ); - } - nodeList.length = 0; - - ciDebugBar.createCookie('debug-view', '', -1); - ciDebugBar.removeClass(btn, 'active'); - } - - var btn = document.querySelector('[data-tab=ci-views]'); - - // If the Views Collector is inactive stops here - if (! btn) - { - return; - } - - btn.parentNode.onclick = function () { - if (ciDebugBar.readCookie('debug-view')) - { - hideHints(); - } - else - { - showHints(); - } - }; - - // Determine Hints state on page load - if (ciDebugBar.readCookie('debug-view')) - { - showHints(); - } - }, - - //-------------------------------------------------------------------- - - setToolbarPosition: function () { - var btnPosition = document.getElementById('toolbar-position'); - - if (ciDebugBar.readCookie('debug-bar-position') === 'top') - { - ciDebugBar.addClass(ciDebugBar.icon, 'fixed-top'); - ciDebugBar.addClass(ciDebugBar.toolbar, 'fixed-top'); - } - - btnPosition.addEventListener('click', function () { - var position = ciDebugBar.readCookie('debug-bar-position'); - - ciDebugBar.createCookie('debug-bar-position', '', -1); - - if (!position || position === 'bottom') - { - ciDebugBar.createCookie('debug-bar-position', 'top', 365); - ciDebugBar.addClass(ciDebugBar.icon, 'fixed-top'); - ciDebugBar.addClass(ciDebugBar.toolbar, 'fixed-top'); - } - else - { - ciDebugBar.createCookie('debug-bar-position', 'bottom', 365); - ciDebugBar.removeClass(ciDebugBar.icon, 'fixed-top'); - ciDebugBar.removeClass(ciDebugBar.toolbar, 'fixed-top'); - } - }, true); - }, - - //-------------------------------------------------------------------- - - setToolbarTheme: function () { - var btnTheme = document.getElementById('toolbar-theme'); - var isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches; - var isLightMode = window.matchMedia("(prefers-color-scheme: light)").matches; - - // If a cookie is set with a value, we force the color scheme - if (ciDebugBar.readCookie('debug-bar-theme') === 'dark') - { - ciDebugBar.removeClass(ciDebugBar.toolbarContainer, 'light'); - ciDebugBar.addClass(ciDebugBar.toolbarContainer, 'dark'); - } - else if (ciDebugBar.readCookie('debug-bar-theme') === 'light') - { - ciDebugBar.removeClass(ciDebugBar.toolbarContainer, 'dark'); - ciDebugBar.addClass(ciDebugBar.toolbarContainer, 'light'); - } - - btnTheme.addEventListener('click', function () { - var theme = ciDebugBar.readCookie('debug-bar-theme'); - - if (!theme && window.matchMedia("(prefers-color-scheme: dark)").matches) - { - // If there is no cookie, and "prefers-color-scheme" is set to "dark" - // It means that the user wants to switch to light mode - ciDebugBar.createCookie('debug-bar-theme', 'light', 365); - ciDebugBar.removeClass(ciDebugBar.toolbarContainer, 'dark'); - ciDebugBar.addClass(ciDebugBar.toolbarContainer, 'light'); - } - else - { - if (theme === 'dark') - { - ciDebugBar.createCookie('debug-bar-theme', 'light', 365); - ciDebugBar.removeClass(ciDebugBar.toolbarContainer, 'dark'); - ciDebugBar.addClass(ciDebugBar.toolbarContainer, 'light'); - } - else - { - // In any other cases: if there is no cookie, or the cookie is set to - // "light", or the "prefers-color-scheme" is "light"... - ciDebugBar.createCookie('debug-bar-theme', 'dark', 365); - ciDebugBar.removeClass(ciDebugBar.toolbarContainer, 'light'); - ciDebugBar.addClass(ciDebugBar.toolbarContainer, 'dark'); - } - } - }, true); - }, - - //-------------------------------------------------------------------- - - /** - * Helper to create a cookie. - * - * @param name - * @param value - * @param days - */ - createCookie : function (name,value,days) { - if (days) - { - var date = new Date(); - - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - - var expires = "; expires=" + date.toGMTString(); - } - else - { - var expires = ""; - } - - document.cookie = name + "=" + value + expires + "; path=/"; - }, - - //-------------------------------------------------------------------- - - readCookie : function (name) { - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - - for (var i = 0; i < ca.length; i++) - { - var c = ca[i]; - while (c.charAt(0) == ' ') - { - c = c.substring(1,c.length); - } - if (c.indexOf(nameEQ) == 0) - { - return c.substring(nameEQ.length,c.length); - } - } - return null; - }, - - //-------------------------------------------------------------------- - - trimSlash: function(text) { - return text.replace(/^\/|\/$/g, ''); - }, - - routerLink: function() { - var row, _location; - var rowGet = document.querySelectorAll('#debug-bar td[data-debugbar-route="GET"]'); - var patt = /\((?:[^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)/; - - for (var i = 0; i < rowGet.length; i++) { - row = rowGet[i]; - if (!/\/\(.+?\)/.test(rowGet[i].innerText)) { - row.style = 'cursor: pointer;'; - row.setAttribute('title', location.origin + '/' + ciDebugBar.trimSlash(row.innerText)); - row.addEventListener('click', function(ev) { - _location = location.origin + '/' + ciDebugBar.trimSlash(ev.target.innerText); - var redirectWindow = window.open(_location, '_blank'); - redirectWindow.location; - }); - } - else { - row.innerHTML = '
' + row.innerText + '
' - + '
' - + row.innerText.replace(patt, '') - + '' - + '
'; - } - } - - rowGet = document.querySelectorAll('#debug-bar td[data-debugbar-route="GET"] form'); - for (var i = 0; i < rowGet.length; i++) { - row = rowGet[i]; - - row.addEventListener('submit', function(event) { - event.preventDefault() - var inputArray = [], t = 0; - var input = event.target.querySelectorAll('input[type=text]'); - var tpl = event.target.getAttribute('data-debugbar-route-tpl'); - - for (var n = 0; n < input.length; n++) { - if (input[n].value.length > 0) inputArray.push(input[n].value); - } - - if (inputArray.length > 0) { - _location = location.origin + '/' + tpl.replace(/\?/g, function() {return inputArray[t++]}); - var redirectWindow = window.open(_location, '_blank'); - redirectWindow.location; - } - }) - } - - } - -}; diff --git a/system/Debug/Toolbar/Views/toolbar.tpl.php b/system/Debug/Toolbar/Views/toolbar.tpl.php deleted file mode 100644 index 5f5d7c43..00000000 --- a/system/Debug/Toolbar/Views/toolbar.tpl.php +++ /dev/null @@ -1,307 +0,0 @@ - - - - - -
-
- - 🔅 - - - - ms   MB - - - - - - - - - - - - - - - - - - - - - - - Vars - - - -

- - - - - - - - - - -

- - - - - -
- - -
- - - - - - - - - - - - - renderTimeline($collectors, $startTime, $segmentCount, $segmentDuration, - $styles) ?> - -
NAMECOMPONENTDURATION ms
-
- - - - - -
-

- - setData($c['display'])->render("_{$c['titleSafe']}.tpl") ?> -
- - - - - -
- - - - $items) : ?> - - -

-
- - - - - - $value) : ?> - - - - - - -
- - -

No data to display.

- - - - - - -

Session User Data

-
- - - - - - $value) : ?> - - - - - - -
- -

No data to display.

- - -

Session doesn't seem to be active.

- - -

Request ( )

- - - -

$_GET

-
- - - - $value) : ?> - - - - - - -
- - - - -

$_POST

-
- - - - $value) : ?> - - - - - - -
- - - - -

Headers

-
- - - - $value) : ?> - - - - - - -
- - - - -

Cookies

-
- - - - $value) : ?> - - - - - - - - - -

Response - ( ) -

- - - -

Headers

-
- - - - $value) : ?> - - - - - - -
- -
- - -
-

System Configuration

- - setData($config)->render('_config.tpl') ?> -
-
- diff --git a/system/Debug/Toolbar/Views/toolbarloader.js.php b/system/Debug/Toolbar/Views/toolbarloader.js.php deleted file mode 100644 index af693381..00000000 --- a/system/Debug/Toolbar/Views/toolbarloader.js.php +++ /dev/null @@ -1,90 +0,0 @@ - -document.addEventListener('DOMContentLoaded', loadDoc, false); - -function loadDoc(time) { - if (isNaN(time)) { - time = document.getElementById("debugbar_loader").getAttribute("data-time"); - localStorage.setItem('debugbar-time', time); - } - - localStorage.setItem('debugbar-time-new', time); - - var url = ""; - - var xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function() { - if (this.readyState === 4 && this.status === 200) { - var toolbar = document.getElementById("toolbarContainer"); - if (!toolbar) { - toolbar = document.createElement('div'); - toolbar.setAttribute('id', 'toolbarContainer'); - document.body.appendChild(toolbar); - } - - // copy for easier manipulation - let responseText = this.responseText; - - // get csp blocked parts - // the style block is the first and starts at 0 - { - let PosBeg = responseText.indexOf( '>', responseText.indexOf( '', PosBeg ); - document.getElementById( 'debugbar_dynamic_style' ).innerHTML = responseText.substr( PosBeg, PosEnd - PosBeg ); - responseText = responseText.substr( PosEnd + 8 ); - } - // the script block starts right after style blocks ended - { - let PosBeg = responseText.indexOf( '>', responseText.indexOf( '' ); - document.getElementById( 'debugbar_dynamic_script' ).innerHTML = responseText.substr( PosBeg, PosEnd - PosBeg ); - responseText = responseText.substr( PosEnd + 9 ); - } - // check for last style block - { - let PosBeg = responseText.indexOf( '>', responseText.lastIndexOf( '', PosBeg ); - document.getElementById( 'debugbar_dynamic_style' ).innerHTML += responseText.substr( PosBeg, PosEnd - PosBeg ); - responseText = responseText.substr( 0, PosBeg + 8 ); - } - - toolbar.innerHTML = responseText; - if (typeof ciDebugBar === 'object') { - ciDebugBar.init(); - } - } else if (this.readyState === 4 && this.status === 404) { - console.log('CodeIgniter DebugBar: File "WRITEPATH/debugbar/debugbar_' + time + '" not found.'); - } - }; - - xhttp.open("GET", url + "?debugbar_time=" + time, true); - xhttp.send(); -} - -// Track all AJAX requests -if (window.ActiveXObject) { - var oldXHR = new ActiveXObject('Microsoft.XMLHTTP'); -} else { - var oldXHR = window.XMLHttpRequest; -} - -function newXHR() { - var realXHR = new oldXHR(); - realXHR.addEventListener("readystatechange", function() { - // Only success responses and URLs that do not contains "debugbar_time" are tracked - if (realXHR.readyState === 4 && realXHR.status.toString()[0] === '2' && realXHR.responseURL.indexOf('debugbar_time') === -1) { - var debugbarTime = realXHR.getResponseHeader('Debugbar-Time'); - if (debugbarTime) { - var h2 = document.querySelector('#ci-history > h2'); - if(h2) { - h2.innerHTML = 'History You have new debug data. '; - var badge = document.querySelector('a[data-tab="ci-history"] > span > .badge'); - badge.className += ' active'; - } - } - } - }, false); - return realXHR; -} - -window.XMLHttpRequest = newXHR; - diff --git a/system/Email/Email.php b/system/Email/Email.php deleted file mode 100644 index b3a3dcde..00000000 --- a/system/Email/Email.php +++ /dev/null @@ -1,2188 +0,0 @@ - '1 (Highest)', - 2 => '2 (High)', - 3 => '3 (Normal)', - 4 => '4 (Low)', - 5 => '5 (Lowest)', - ]; - /** - * mbstring.func_overload flag - * - * @var boolean - */ - protected static $func_overload; - //-------------------------------------------------------------------- - /** - * Constructor - Sets Email Preferences - * - * The constructor can be passed an array of config values - * - * @param array|null $config - */ - public function __construct($config = null) - { - $this->initialize($config); - isset(static::$func_overload) || static::$func_overload = (extension_loaded('mbstring') && ini_get('mbstring.func_overload')); - } - //-------------------------------------------------------------------- - /** - * Initialize preferences - * - * @param array|\Config\Email $config - * - * @return Email - */ - public function initialize($config) - { - $this->clear(); - if ($config instanceof \Config\Email) - { - $config = get_object_vars($config); - } - foreach (get_class_vars(get_class($this)) as $key => $value) - { - if (property_exists($this, $key) && isset($config[$key])) - { - $method = 'set' . ucfirst($key); - if (method_exists($this, $method)) - { - $this->$method($config[$key]); - } - else - { - $this->$key = $config[$key]; - } - } - } - $this->charset = strtoupper($this->charset); - $this->SMTPAuth = isset($this->SMTPUser[0], $this->SMTPPass[0]); - return $this; - } - //-------------------------------------------------------------------- - /** - * Initialize the Email Data - * - * @param boolean $clearAttachments - * - * @return Email - */ - public function clear($clearAttachments = false) - { - $this->subject = ''; - $this->body = ''; - $this->finalBody = ''; - $this->headerStr = ''; - $this->replyToFlag = false; - $this->recipients = []; - $this->CCArray = []; - $this->BCCArray = []; - $this->headers = []; - $this->debugMessage = []; - $this->setHeader('Date', $this->setDate()); - if ($clearAttachments !== false) - { - $this->attachments = []; - } - return $this; - } - //-------------------------------------------------------------------- - /** - * Set FROM - * - * @param string $from - * @param string $name - * @param string|null $returnPath Return-Path - * - * @return Email - */ - public function setFrom($from, $name = '', $returnPath = null) - { - if (preg_match('/\<(.*)\>/', $from, $match)) - { - $from = $match[1]; - } - if ($this->validate) - { - $this->validateEmail($this->stringToArray($from)); - if ($returnPath) - { - $this->validateEmail($this->stringToArray($returnPath)); - } - } - - // Store the plain text values - $this->tmpArchive['fromEmail'] = $from; - $this->tmpArchive['fromName'] = $name; - - // prepare the display name - if ($name !== '') - { - // only use Q encoding if there are characters that would require it - if (! preg_match('/[\200-\377]/', $name)) - { - // add slashes for non-printing characters, slashes, and double quotes, and surround it in double quotes - $name = '"' . addcslashes($name, "\0..\37\177'\"\\") . '"'; - } - else - { - $name = $this->prepQEncoding($name); - } - } - $this->setHeader('From', $name . ' <' . $from . '>'); - isset($returnPath) || $returnPath = $from; - $this->setHeader('Return-Path', '<' . $returnPath . '>'); - $this->tmpArchive['returnPath'] = $returnPath; - - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Reply-to - * - * @param string $replyto - * @param string $name - * - * @return Email - */ - public function setReplyTo($replyto, $name = '') - { - if (preg_match('/\<(.*)\>/', $replyto, $match)) - { - $replyto = $match[1]; - } - if ($this->validate) - { - $this->validateEmail($this->stringToArray($replyto)); - } - if ($name !== '') - { - $this->tmpArchive['replyName'] = $name; - - // only use Q encoding if there are characters that would require it - if (! preg_match('/[\200-\377]/', $name)) - { - // add slashes for non-printing characters, slashes, and double quotes, and surround it in double quotes - $name = '"' . addcslashes($name, "\0..\37\177'\"\\") . '"'; - } - else - { - $name = $this->prepQEncoding($name); - } - } - $this->setHeader('Reply-To', $name . ' <' . $replyto . '>'); - $this->replyToFlag = true; - $this->tmpArchive['replyTo'] = $replyto; - - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Recipients - * - * @param string|array $to - * - * @return Email - */ - public function setTo($to) - { - $to = $this->stringToArray($to); - $to = $this->cleanEmail($to); - if ($this->validate) - { - $this->validateEmail($to); - } - if ($this->getProtocol() !== 'mail') - { - $this->setHeader('To', implode(', ', $to)); - } - $this->recipients = $to; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set CC - * - * @param string $cc - * - * @return Email - */ - public function setCC($cc) - { - $cc = $this->cleanEmail($this->stringToArray($cc)); - if ($this->validate) - { - $this->validateEmail($cc); - } - $this->setHeader('Cc', implode(', ', $cc)); - if ($this->getProtocol() === 'smtp') - { - $this->CCArray = $cc; - } - $this->tmpArchive['CCArray'] = $cc; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set BCC - * - * @param string $bcc - * @param string $limit - * - * @return Email - */ - public function setBCC($bcc, $limit = '') - { - if ($limit !== '' && is_numeric($limit)) - { - $this->BCCBatchMode = true; - $this->BCCBatchSize = $limit; - } - $bcc = $this->cleanEmail($this->stringToArray($bcc)); - if ($this->validate) - { - $this->validateEmail($bcc); - } - if ($this->getProtocol() === 'smtp' || ($this->BCCBatchMode && count($bcc) > $this->BCCBatchSize)) - { - $this->BCCArray = $bcc; - } - else - { - $this->setHeader('Bcc', implode(', ', $bcc)); - $this->tmpArchive['BCCArray'] = $bcc; - } - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Email Subject - * - * @param string $subject - * - * @return Email - */ - public function setSubject($subject) - { - $this->tmpArchive['subject'] = $subject; - - $subject = $this->prepQEncoding($subject); - $this->setHeader('Subject', $subject); - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Body - * - * @param string $body - * - * @return Email - */ - public function setMessage($body) - { - $this->body = rtrim(str_replace("\r", '', $body)); - return $this; - } - //-------------------------------------------------------------------- - /** - * Assign file attachments - * - * @param string $file Can be local path, URL or buffered content - * @param string $disposition 'attachment' - * @param string|null $newname - * @param string $mime - * - * @return Email - */ - public function attach($file, $disposition = '', $newname = null, $mime = '') - { - if ($mime === '') - { - if (strpos($file, '://') === false && ! is_file($file)) - { - $this->setErrorMessage(lang('Email.attachmentMissing', [$file])); - return false; - } - if (! $fp = @fopen($file, 'rb')) - { - $this->setErrorMessage(lang('Email.attachmentUnreadable', [$file])); - return false; - } - $fileContent = stream_get_contents($fp); - $mime = $this->mimeTypes(pathinfo($file, PATHINFO_EXTENSION)); - fclose($fp); - } - else - { - $fileContent = & $file; // buffered file - } - // declare names on their own, to make phpcbf happy - $namesAttached = [ - $file, - $newname, - ]; - $this->attachments[] = [ - 'name' => $namesAttached, - 'disposition' => empty($disposition) ? 'attachment' : $disposition, - // Can also be 'inline' Not sure if it matters - 'type' => $mime, - 'content' => chunk_split(base64_encode($fileContent)), - 'multipart' => 'mixed', - ]; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set and return attachment Content-ID - * - * Useful for attached inline pictures - * - * @param string $filename - * - * @return string - */ - public function setAttachmentCID($filename) - { - for ($i = 0, $c = count($this->attachments); $i < $c; $i ++) - { - if ($this->attachments[$i]['name'][0] === $filename) - { - $this->attachments[$i]['multipart'] = 'related'; - $this->attachments[$i]['cid'] = uniqid(basename($this->attachments[$i]['name'][0]) . '@', true); - return $this->attachments[$i]['cid']; - } - } - return false; - } - //-------------------------------------------------------------------- - /** - * Add a Header Item - * - * @param string $header - * @param string $value - * - * @return Email - */ - public function setHeader($header, $value) - { - $this->headers[$header] = str_replace(["\n", "\r"], '', $value); - return $this; - } - //-------------------------------------------------------------------- - /** - * Convert a String to an Array - * - * @param string $email - * - * @return array - */ - protected function stringToArray($email) - { - if (! is_array($email)) - { - return (strpos($email, ',') !== false) ? preg_split('/[\s,]/', $email, -1, PREG_SPLIT_NO_EMPTY) : (array) trim($email); - } - return $email; - } - //-------------------------------------------------------------------- - /** - * Set Multipart Value - * - * @param string $str - * - * @return Email - */ - public function setAltMessage($str) - { - $this->altMessage = (string) $str; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Mailtype - * - * @param string $type - * - * @return Email - */ - public function setMailType($type = 'text') - { - $this->mailType = ($type === 'html') ? 'html' : 'text'; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Wordwrap - * - * @param boolean $wordWrap - * - * @return Email - */ - public function setWordWrap($wordWrap = true) - { - $this->wordWrap = (bool) $wordWrap; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Protocol - * - * @param string $protocol - * - * @return Email - */ - public function setProtocol($protocol = 'mail') - { - $this->protocol = in_array($protocol, $this->protocols, true) ? strtolower($protocol) : 'mail'; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Priority - * - * @param integer $n - * - * @return Email - */ - public function setPriority($n = 3) - { - $this->priority = preg_match('/^[1-5]$/', $n) ? (int) $n : 3; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set Newline Character - * - * @param string $newline - * - * @return Email - */ - public function setNewline($newline = "\n") - { - $this->newline = in_array($newline, ["\n", "\r\n", "\r"]) ? $newline : "\n"; - return $this; - } - //-------------------------------------------------------------------- - /** - * Set CRLF - * - * @param string $CRLF - * - * @return Email - */ - public function setCRLF($CRLF = "\n") - { - $this->CRLF = ($CRLF !== "\n" && $CRLF !== "\r\n" && $CRLF !== "\r") ? "\n" : $CRLF; - return $this; - } - //-------------------------------------------------------------------- - /** - * Get the Message ID - * - * @return string - */ - protected function getMessageID() - { - $from = str_replace(['>', '<'], '', $this->headers['Return-Path']); - return '<' . uniqid('', true) . strstr($from, '@') . '>'; - } - //-------------------------------------------------------------------- - /** - * Get Mail Protocol - * - * @return string - */ - protected function getProtocol() - { - $this->protocol = strtolower($this->protocol); - in_array($this->protocol, $this->protocols, true) || $this->protocol = 'mail'; - return $this->protocol; - } - //-------------------------------------------------------------------- - /** - * Get Mail Encoding - * - * @return string - */ - protected function getEncoding() - { - in_array($this->encoding, $this->bitDepths) || $this->encoding = '8bit'; - foreach ($this->baseCharsets as $charset) - { - if (strpos($this->charset, $charset) === 0) - { - $this->encoding = '7bit'; - break; - } - } - return $this->encoding; - } - //-------------------------------------------------------------------- - /** - * Get content type (text/html/attachment) - * - * @return string - */ - protected function getContentType() - { - if ($this->mailType === 'html') - { - return empty($this->attachments) ? 'html' : 'html-attach'; - } - elseif ($this->mailType === 'text' && ! empty($this->attachments)) - { - return 'plain-attach'; - } - else - { - return 'plain'; - } - } - //-------------------------------------------------------------------- - /** - * Set RFC 822 Date - * - * @return string - */ - protected function setDate() - { - $timezone = date('Z'); - $operator = ($timezone[0] === '-') ? '-' : '+'; - $timezone = abs($timezone); - $timezone = floor($timezone / 3600) * 100 + ($timezone % 3600) / 60; - return sprintf('%s %s%04d', date('D, j M Y H:i:s'), $operator, $timezone); - } - //-------------------------------------------------------------------- - /** - * Mime message - * - * @return string - */ - protected function getMimeMessage() - { - return 'This is a multi-part message in MIME format.' . $this->newline . 'Your email application may not support this format.'; - } - //-------------------------------------------------------------------- - /** - * Validate Email Address - * - * @param string|array $email - * - * @return boolean - */ - public function validateEmail($email) - { - if (! is_array($email)) - { - $this->setErrorMessage(lang('Email.mustBeArray')); - return false; - } - foreach ($email as $val) - { - if (! $this->isValidEmail($val)) - { - $this->setErrorMessage(lang('Email.invalidAddress', [$val])); - return false; - } - } - return true; - } - //-------------------------------------------------------------------- - /** - * Email Validation - * - * @param string $email - * - * @return boolean - */ - public function isValidEmail($email) - { - if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46') && $atpos = strpos($email, '@')) - { - $email = static::substr($email, 0, ++ $atpos) . idn_to_ascii( - static::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46 - ); - } - return (bool) filter_var($email, FILTER_VALIDATE_EMAIL); - } - //-------------------------------------------------------------------- - /** - * Clean Extended Email Address: Joe Smith - * - * @param string $email - * - * @return string - */ - public function cleanEmail($email) - { - if (! is_array($email)) - { - return preg_match('/\<(.*)\>/', $email, $match) ? $match[1] : $email; - } - $cleanEmail = []; - foreach ($email as $addy) - { - $cleanEmail[] = preg_match('/\<(.*)\>/', $addy, $match) ? $match[1] : $addy; - } - return $cleanEmail; - } - //-------------------------------------------------------------------- - /** - * Build alternative plain text message - * - * Provides the raw message for use in plain-text headers of - * HTML-formatted emails. - * If the user hasn't specified his own alternative message - * it creates one by stripping the HTML - * - * @return string - */ - protected function getAltMessage() - { - if (! empty($this->altMessage)) - { - return ($this->wordWrap) ? $this->wordWrap($this->altMessage, 76) : $this->altMessage; - } - $body = preg_match('/\(.*)\<\/body\>/si', $this->body, $match) ? $match[1] : $this->body; - $body = str_replace("\t", '', preg_replace('# ' . $message . "\n"; - - flock($fp, LOCK_EX); - - for ($written = 0, $length = strlen($msg); $written < $length; $written += $result) - { - if (($result = fwrite($fp, substr($msg, $written))) === false) - { - // if we get this far, we'll never see this during travis-ci - // @codeCoverageIgnoreStart - break; - // @codeCoverageIgnoreEnd - } - } - - flock($fp, LOCK_UN); - fclose($fp); - - if (isset($newfile) && $newfile === true) - { - chmod($filepath, $this->filePermissions); - } - - return is_int($result); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Log/Handlers/HandlerInterface.php b/system/Log/Handlers/HandlerInterface.php deleted file mode 100644 index 6778a46f..00000000 --- a/system/Log/Handlers/HandlerInterface.php +++ /dev/null @@ -1,85 +0,0 @@ - 1, - 'alert' => 2, - 'critical' => 3, - 'error' => 4, - 'warning' => 5, - 'notice' => 6, - 'info' => 7, - 'debug' => 8, - ]; - - /** - * Array of levels to be logged. - * The rest will be ignored. - * Set in Config/logger.php - * - * @var array - */ - protected $loggableLevels = []; - - /** - * File permissions - * - * @var integer - */ - protected $filePermissions = 0644; - - /** - * Format of the timestamp for log files. - * - * @var string - */ - protected $dateFormat = 'Y-m-d H:i:s'; - - /** - * Filename Extension - * - * @var string - */ - protected $fileExt; - - /** - * Caches instances of the handlers. - * - * @var array - */ - protected $handlers = []; - - /** - * Holds the configuration for each handler. - * The key is the handler's class name. The - * value is an associative array of configuration - * items. - * - * @var array - */ - protected $handlerConfig = []; - - /** - * Caches logging calls for debugbar. - * - * @var array - */ - public $logCache; - - /** - * Should we cache our logged items? - * - * @var boolean - */ - protected $cacheLogs = false; - - //-------------------------------------------------------------------- - - /** - * Constructor. - * - * @param \Config\Logger $config - * @param boolean $debug - * @throws \RuntimeException - */ - public function __construct($config, bool $debug = CI_DEBUG) - { - $this->loggableLevels = is_array($config->threshold) ? $config->threshold : range(1, (int) $config->threshold); - - // Now convert loggable levels to strings. - // We only use numbers to make the threshold setting convenient for users. - if ($this->loggableLevels) - { - $temp = []; - foreach ($this->loggableLevels as $level) - { - $temp[] = array_search((int) $level, $this->logLevels); - } - - $this->loggableLevels = $temp; - unset($temp); - } - - $this->dateFormat = $config->dateFormat ?? $this->dateFormat; - - if (! is_array($config->handlers) || empty($config->handlers)) - { - throw LogException::forNoHandlers('LoggerConfig'); - } - - // Save the handler configuration for later. - // Instances will be created on demand. - $this->handlerConfig = $config->handlers; - - $this->cacheLogs = $debug; - if ($this->cacheLogs) - { - $this->logCache = []; - } - } - - //-------------------------------------------------------------------- - - /** - * System is unusable. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function emergency($message, array $context = []): bool - { - return $this->log('emergency', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function alert($message, array $context = []): bool - { - return $this->log('alert', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function critical($message, array $context = []): bool - { - return $this->log('critical', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function error($message, array $context = []): bool - { - return $this->log('error', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function warning($message, array $context = []): bool - { - return $this->log('warning', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function notice($message, array $context = []): bool - { - return $this->log('notice', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function info($message, array $context = []): bool - { - return $this->log('info', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * - * @return boolean - */ - public function debug($message, array $context = []): bool - { - return $this->log('debug', $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * - * @return boolean - */ - public function log($level, $message, array $context = []): bool - { - if (is_numeric($level)) - { - $level = array_search((int) $level, $this->logLevels); - } - - // Is the level a valid level? - if (! array_key_exists($level, $this->logLevels)) - { - throw LogException::forInvalidLogLevel($level); - } - - // Does the app want to log this right now? - if (! in_array($level, $this->loggableLevels)) - { - return false; - } - - // Parse our placeholders - $message = $this->interpolate($message, $context); - - if (! is_string($message)) - { - $message = print_r($message, true); - } - - if ($this->cacheLogs) - { - $this->logCache[] = [ - 'level' => $level, - 'msg' => $message, - ]; - } - - foreach ($this->handlerConfig as $className => $config) - { - if (! array_key_exists($className, $this->handlers)) - { - $this->handlers[$className] = new $className($config); - } - - /** - * @var \CodeIgniter\Log\Handlers\HandlerInterface - */ - $handler = $this->handlers[$className]; - - if (! $handler->canHandle($level)) - { - continue; - } - - // If the handler returns false, then we - // don't execute any other handlers. - if (! $handler->setDateFormat($this->dateFormat)->handle($level, $message)) - { - break; - } - } - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Replaces any placeholders in the message with variables - * from the context, as well as a few special items like: - * - * {session_vars} - * {post_vars} - * {get_vars} - * {env} - * {env:foo} - * {file} - * {line} - * - * @param mixed $message - * @param array $context - * - * @return mixed - */ - protected function interpolate($message, array $context = []) - { - if (! is_string($message)) - { - return $message; - } - - // build a replacement array with braces around the context keys - $replace = []; - - foreach ($context as $key => $val) - { - // Verify that the 'exception' key is actually an exception - // or error, both of which implement the 'Throwable' interface. - if ($key === 'exception' && $val instanceof \Throwable) - { - $val = $val->getMessage() . ' ' . $this->cleanFileNames($val->getFile()) . ':' . $val->getLine(); - } - - // todo - sanitize input before writing to file? - $replace['{' . $key . '}'] = $val; - } - - // Add special placeholders - $replace['{post_vars}'] = '$_POST: ' . print_r($_POST, true); - $replace['{get_vars}'] = '$_GET: ' . print_r($_GET, true); - $replace['{env}'] = ENVIRONMENT; - - // Allow us to log the file/line that we are logging from - if (strpos($message, '{file}') !== false) - { - list($file, $line) = $this->determineFile(); - - $replace['{file}'] = $file; - $replace['{line}'] = $line; - } - - // Match up environment variables in {env:foo} tags. - if (strpos($message, 'env:') !== false) - { - preg_match('/env:[^}]+/', $message, $matches); - - if ($matches) - { - foreach ($matches as $str) - { - $key = str_replace('env:', '', $str); - $replace["{{$str}}"] = $_ENV[$key] ?? 'n/a'; - } - } - } - - if (isset($_SESSION)) - { - $replace['{session_vars}'] = '$_SESSION: ' . print_r($_SESSION, true); - } - - // interpolate replacement values into the message and return - return strtr($message, $replace); - } - - /** - * Determines the file and line that the logging call - * was made from by analyzing the backtrace. - * Find the earliest stack frame that is part of our logging system. - * - * @return array - */ - public function determineFile(): array - { - $logFunctions = [ - 'log_message', - 'log', - 'error', - 'debug', - 'info', - 'warning', - 'critical', - 'emergency', - 'alert', - 'notice', - ]; - - // Generate Backtrace info - $trace = \debug_backtrace(false); - - // So we search from the bottom (earliest) of the stack frames - $stackFrames = \array_reverse($trace); - - // Find the first reference to a Logger class method - foreach ($stackFrames as $frame) - { - if (\in_array($frame['function'], $logFunctions)) - { - $file = isset($frame['file']) ? $this->cleanFileNames($frame['file']) : 'unknown'; - $line = $frame['line'] ?? 'unknown'; - return [ - $file, - $line, - ]; - } - } - - return [ - 'unknown', - 'unknown', - ]; - } - - //-------------------------------------------------------------------- - - /** - * Cleans the paths of filenames by replacing APPPATH, SYSTEMPATH, FCPATH - * with the actual var. i.e. - * - * /var/www/site/app/Controllers/Home.php - * becomes: - * APPPATH/Controllers/Home.php - * - * @param $file - * - * @return string - */ - protected function cleanFileNames(string $file): string - { - $file = str_replace(APPPATH, 'APPPATH/', $file); - $file = str_replace(SYSTEMPATH, 'SYSTEMPATH/', $file); - - return str_replace(FCPATH, 'FCPATH/', $file); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Model.php b/system/Model.php deleted file mode 100644 index 8245fba5..00000000 --- a/system/Model.php +++ /dev/null @@ -1,1842 +0,0 @@ -paginate() - * - * @var Pager - */ - public $pager; - - /** - * Name of database table - * - * @var string - */ - protected $table; - - /** - * The table's primary key. - * - * @var string - */ - protected $primaryKey = 'id'; - - /** - * Last insert ID - * - * @var integer - */ - protected $insertID = 0; - - /** - * The Database connection group that - * should be instantiated. - * - * @var string - */ - protected $DBGroup; - - /** - * The format that the results should be returned as. - * Will be overridden if the as* methods are used. - * - * @var string - */ - protected $returnType = 'array'; - - /** - * If this model should use "softDeletes" and - * simply set a date when rows are deleted, or - * do hard deletes. - * - * @var boolean - */ - protected $useSoftDeletes = false; - - /** - * An array of field names that are allowed - * to be set by the user in inserts/updates. - * - * @var array - */ - protected $allowedFields = []; - - /** - * If true, will set created_at, and updated_at - * values during insert and update routines. - * - * @var boolean - */ - protected $useTimestamps = false; - - /** - * The type of column that created_at and updated_at - * are expected to. - * - * Allowed: 'datetime', 'date', 'int' - * - * @var string - */ - protected $dateFormat = 'datetime'; - - //-------------------------------------------------------------------- - - /** - * The column used for insert timestamps - * - * @var string - */ - protected $createdField = 'created_at'; - - /** - * The column used for update timestamps - * - * @var string - */ - protected $updatedField = 'updated_at'; - - /** - * Used by withDeleted to override the - * model's softDelete setting. - * - * @var boolean - */ - protected $tempUseSoftDeletes; - - /** - * The column used to save soft delete state - * - * @var string - */ - protected $deletedField = 'deleted_at'; - - /** - * Used by asArray and asObject to provide - * temporary overrides of model default. - * - * @var string - */ - protected $tempReturnType; - - /** - * Whether we should limit fields in inserts - * and updates to those available in $allowedFields or not. - * - * @var boolean - */ - protected $protectFields = true; - - /** - * Database Connection - * - * @var ConnectionInterface - */ - protected $db; - - /** - * Query Builder object - * - * @var BaseBuilder - */ - protected $builder; - - /** - * Rules used to validate data in insert, update, and save methods. - * The array must match the format of data passed to the Validation - * library. - * - * @var array - */ - protected $validationRules = []; - - /** - * Contains any custom error messages to be - * used during data validation. - * - * @var array - */ - protected $validationMessages = []; - - /** - * Skip the model's validation. Used in conjunction with skipValidation() - * to skip data validation for any future calls. - * - * @var boolean - */ - protected $skipValidation = false; - - /** - * Whether rules should be removed that do not exist - * in the passed in data. Used between inserts/updates. - * - * @var boolean - */ - protected $cleanValidationRules = true; - - /** - * Our validator instance. - * - * @var \CodeIgniter\Validation\Validation - */ - protected $validation; - - /* - * Callbacks. Each array should contain the method - * names (within the model) that should be called - * when those events are triggered. With the exception - * of 'afterFind', all methods are passed the same - * items that are given to the update/insert method. - * 'afterFind' will also include the results that were found. - */ - - /** - * Whether to trigger the defined callbacks - * - * @var boolean - */ - protected $allowCallbacks = true; - - /** - * Used by allowCallbacks() to override the - * model's allowCallbacks setting. - * - * @var boolean - */ - protected $tempAllowCallbacks; - - /** - * Callbacks for beforeInsert - * - * @var array - */ - protected $beforeInsert = []; - /** - * Callbacks for afterInsert - * - * @var array - */ - protected $afterInsert = []; - /** - * Callbacks for beforeUpdate - * - * @var array - */ - protected $beforeUpdate = []; - /** - * Callbacks for afterUpdate - * - * @var array - */ - protected $afterUpdate = []; - /** - * Callbacks for afterFind - * - * @var array - */ - protected $afterFind = []; - /** - * Callbacks for beforeDelete - * - * @var array - */ - protected $beforeDelete = []; - /** - * Callbacks for afterDelete - * - * @var array - */ - protected $afterDelete = []; - - /** - * Holds information passed in via 'set' - * so that we can capture it (not the builder) - * and ensure it gets validated first. - * - * @var array - */ - protected $tempData = []; - - //-------------------------------------------------------------------- - - /** - * Model constructor. - * - * @param ConnectionInterface $db - * @param ValidationInterface $validation - */ - public function __construct(ConnectionInterface &$db = null, ValidationInterface $validation = null) - { - if ($db instanceof ConnectionInterface) - { - $this->db = & $db; - } - else - { - $this->db = Database::connect($this->DBGroup); - } - - $this->tempReturnType = $this->returnType; - $this->tempUseSoftDeletes = $this->useSoftDeletes; - $this->tempAllowCallbacks = $this->allowCallbacks; - - if (is_null($validation)) - { - $validation = \Config\Services::validation(null, false); - } - - $this->validation = $validation; - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // CRUD & FINDERS - //-------------------------------------------------------------------- - - /** - * Fetches the row of database from $this->table with a primary key - * matching $id. - * - * @param mixed|array|null $id One primary key or an array of primary keys - * - * @return array|object|null The resulting row of data, or null. - */ - public function find($id = null) - { - $builder = $this->builder(); - - if ($this->tempUseSoftDeletes === true) - { - $builder->where($this->table . '.' . $this->deletedField, null); - } - - if (is_array($id)) - { - $row = $builder->whereIn($this->table . '.' . $this->primaryKey, $id) - ->get(); - $row = $row->getResult($this->tempReturnType); - } - elseif (is_numeric($id) || is_string($id)) - { - $row = $builder->where($this->table . '.' . $this->primaryKey, $id) - ->get(); - - $row = $row->getFirstRow($this->tempReturnType); - } - else - { - $row = $builder->get(); - - $row = $row->getResult($this->tempReturnType); - } - - $eventData = $this->trigger('afterFind', ['id' => $id, 'data' => $row]); - - $this->tempReturnType = $this->returnType; - $this->tempUseSoftDeletes = $this->useSoftDeletes; - - return $eventData['data']; - } - - //-------------------------------------------------------------------- - - /** - * Fetches the column of database from $this->table - * - * @param string $columnName - * - * @return array|null The resulting row of data, or null if no data found. - * @throws \CodeIgniter\Database\Exceptions\DataException - */ - public function findColumn(string $columnName) - { - if (strpos($columnName, ',') !== false) - { - throw DataException::forFindColumnHaveMultipleColumns(); - } - - $resultSet = $this->select($columnName) - ->asArray() - ->find(); - - return (! empty($resultSet)) ? array_column($resultSet, $columnName) : null; - } - - //-------------------------------------------------------------------- - - /** - * Works with the current Query Builder instance to return - * all results, while optionally limiting them. - * - * @param integer $limit - * @param integer $offset - * - * @return array - */ - public function findAll(int $limit = 0, int $offset = 0) - { - $builder = $this->builder(); - - if ($this->tempUseSoftDeletes === true) - { - $builder->where($this->table . '.' . $this->deletedField, null); - } - - $row = $builder->limit($limit, $offset) - ->get(); - - $row = $row->getResult($this->tempReturnType); - - $eventData = $this->trigger('afterFind', ['data' => $row, 'limit' => $limit, 'offset' => $offset]); - - $this->tempReturnType = $this->returnType; - $this->tempUseSoftDeletes = $this->useSoftDeletes; - - return $eventData['data']; - } - - //-------------------------------------------------------------------- - - /** - * Returns the first row of the result set. Will take any previous - * Query Builder calls into account when determining the result set. - * - * @return array|object|null - */ - public function first() - { - $builder = $this->builder(); - - if ($this->tempUseSoftDeletes === true) - { - $builder->where($this->table . '.' . $this->deletedField, null); - } - else - { - if ($this->useSoftDeletes === true && empty($builder->QBGroupBy) && ! empty($this->primaryKey)) - { - $builder->groupBy($this->table . '.' . $this->primaryKey); - } - } - - // Some databases, like PostgreSQL, need order - // information to consistently return correct results. - if (! empty($builder->QBGroupBy) && empty($builder->QBOrderBy) && ! empty($this->primaryKey)) - { - $builder->orderBy($this->table . '.' . $this->primaryKey, 'asc'); - } - - $row = $builder->limit(1, 0) - ->get(); - - $row = $row->getFirstRow($this->tempReturnType); - - $eventData = $this->trigger('afterFind', ['data' => $row]); - - $this->tempReturnType = $this->returnType; - $this->tempUseSoftDeletes = $this->useSoftDeletes; - - return $eventData['data']; - } - - //-------------------------------------------------------------------- - - /** - * Captures the builder's set() method so that we can validate the - * data here. This allows it to be used with any of the other - * builder methods and still get validated data, like replace. - * - * @param mixed $key Field name, or an array of field/value pairs - * @param string $value Field value, if $key is a single field - * @param boolean $escape Whether to escape values and identifiers - * - * @return $this - */ - public function set($key, ?string $value = '', bool $escape = null) - { - $data = is_array($key) - ? $key - : [$key => $value]; - - $this->tempData['escape'] = $escape; - $this->tempData['data'] = array_merge($this->tempData['data'] ?? [], $data); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * A convenience method that will attempt to determine whether the - * data should be inserted or updated. Will work with either - * an array or object. When using with custom class objects, - * you must ensure that the class will provide access to the class - * variables, even if through a magic method. - * - * @param array|object $data - * - * @return boolean - * @throws \ReflectionException - */ - public function save($data): bool - { - if (empty($data)) - { - return true; - } - - if (is_object($data) && isset($data->{$this->primaryKey})) - { - $response = $this->update($data->{$this->primaryKey}, $data); - } - elseif (is_array($data) && ! empty($data[$this->primaryKey])) - { - $response = $this->update($data[$this->primaryKey], $data); - } - else - { - $response = $this->insert($data, false); - - if ($response instanceof BaseResult) - { - $response = $response->resultID !== false; - } - elseif ($response !== false) - { - $response = true; - } - } - - return $response; - } - - /** - * Takes a class an returns an array of it's public and protected - * properties as an array suitable for use in creates and updates. - * - * @param string|object $data - * @param string|null $primaryKey - * @param string $dateFormat - * @param boolean $onlyChanged - * - * @return array - * @throws \ReflectionException - */ - public static function classToArray($data, $primaryKey = null, string $dateFormat = 'datetime', bool $onlyChanged = true): array - { - if (method_exists($data, 'toRawArray')) - { - $properties = $data->toRawArray($onlyChanged); - - // Always grab the primary key otherwise updates will fail. - if (! empty($properties) && ! empty($primaryKey) && ! in_array($primaryKey, $properties) && ! empty($data->{$primaryKey})) - { - $properties[$primaryKey] = $data->{$primaryKey}; - } - } - else - { - $mirror = new ReflectionClass($data); - $props = $mirror->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED); - - $properties = []; - - // Loop over each property, - // saving the name/value in a new array we can return. - foreach ($props as $prop) - { - // Must make protected values accessible. - $prop->setAccessible(true); - $propName = $prop->getName(); - $properties[$propName] = $prop->getValue($data); - } - } - - // Convert any Time instances to appropriate $dateFormat - if ($properties) - { - foreach ($properties as $key => $value) - { - if ($value instanceof Time) - { - switch ($dateFormat) - { - case 'datetime': - $converted = $value->format('Y-m-d H:i:s'); - break; - case 'date': - $converted = $value->format('Y-m-d'); - break; - case 'int': - $converted = $value->getTimestamp(); - break; - default: - $converted = (string)$value; - } - - $properties[$key] = $converted; - } - } - } - - return $properties; - } - - //-------------------------------------------------------------------- - - /** - * Returns last insert ID or 0. - * - * @return integer - */ - public function getInsertID(): int - { - return $this->insertID; - } - - //-------------------------------------------------------------------- - - /** - * Inserts data into the current table. If an object is provided, - * it will attempt to convert it to an array. - * - * @param array|object $data - * @param boolean $returnID Whether insert ID should be returned or not. - * - * @return BaseResult|integer|string|false - * @throws \ReflectionException - */ - public function insert($data = null, bool $returnID = true) - { - $escape = null; - - $this->insertID = 0; - - if (empty($data)) - { - $data = $this->tempData['data'] ?? null; - $escape = $this->tempData['escape'] ?? null; - $this->tempData = []; - } - - if (empty($data)) - { - throw DataException::forEmptyDataset('insert'); - } - - // If $data is using a custom class with public or protected - // properties representing the table elements, we need to grab - // them as an array. - if (is_object($data) && ! $data instanceof stdClass) - { - $data = static::classToArray($data, $this->primaryKey, $this->dateFormat, false); - } - - // If it's still a stdClass, go ahead and convert to - // an array so doProtectFields and other model methods - // don't have to do special checks. - if (is_object($data)) - { - $data = (array) $data; - } - - if (empty($data)) - { - throw DataException::forEmptyDataset('insert'); - } - - // Validate data before saving. - if ($this->skipValidation === false) - { - if ($this->cleanRules()->validate($data) === false) - { - return false; - } - } - - // Must be called first so we don't - // strip out created_at values. - $data = $this->doProtectFields($data); - - // Set created_at and updated_at with same time - $date = $this->setDate(); - - if ($this->useTimestamps && ! empty($this->createdField) && ! array_key_exists($this->createdField, $data)) - { - $data[$this->createdField] = $date; - } - - if ($this->useTimestamps && ! empty($this->updatedField) && ! array_key_exists($this->updatedField, $data)) - { - $data[$this->updatedField] = $date; - } - - $eventData = $this->trigger('beforeInsert', ['data' => $data]); - - // Must use the set() method to ensure objects get converted to arrays - $result = $this->builder() - ->set($eventData['data'], '', $escape) - ->insert(); - - // If insertion succeeded then save the insert ID - if ($result->resultID) - { - $this->insertID = $this->db->insertID(); - } - - // Trigger afterInsert events with the inserted data and new ID - $this->trigger('afterInsert', ['id' => $this->insertID, 'data' => $eventData['data'], 'result' => $result]); - - // If insertion failed, get out of here - if (! $result) - { - return $result; - } - - // otherwise return the insertID, if requested. - return $returnID ? $this->insertID : $result; - } - - //-------------------------------------------------------------------- - - /** - * Compiles batch insert strings and runs the queries, validating each row prior. - * - * @param array $set An associative array of insert values - * @param boolean $escape Whether to escape values and identifiers - * @param integer $batchSize The size of the batch to run - * @param boolean $testing True means only number of records is returned, false will execute the query - * - * @return integer|boolean Number of rows inserted or FALSE on failure - */ - public function insertBatch(array $set = null, bool $escape = null, int $batchSize = 100, bool $testing = false) - { - if (is_array($set) && $this->skipValidation === false) - { - foreach ($set as $row) - { - if ($this->cleanRules()->validate($row) === false) - { - return false; - } - } - } - - return $this->builder()->testMode($testing)->insertBatch($set, $escape, $batchSize); - } - - //-------------------------------------------------------------------- - - /** - * Updates a single record in $this->table. If an object is provided, - * it will attempt to convert it into an array. - * - * @param integer|array|string $id - * @param array|object $data - * - * @return boolean - * @throws \ReflectionException - */ - public function update($id = null, $data = null): bool - { - $escape = null; - - if (is_numeric($id) || is_string($id)) - { - $id = [$id]; - } - - if (empty($data)) - { - $data = $this->tempData['data'] ?? null; - $escape = $this->tempData['escape'] ?? null; - $this->tempData = []; - } - - if (empty($data)) - { - throw DataException::forEmptyDataset('update'); - } - - // If $data is using a custom class with public or protected - // properties representing the table elements, we need to grab - // them as an array. - if (is_object($data) && ! $data instanceof stdClass) - { - $data = static::classToArray($data, $this->primaryKey, $this->dateFormat); - } - - // If it's still a stdClass, go ahead and convert to - // an array so doProtectFields and other model methods - // don't have to do special checks. - if (is_object($data)) - { - $data = (array) $data; - } - - // If it's still empty here, means $data is no change or is empty object - if (empty($data)) - { - throw DataException::forEmptyDataset('update'); - } - - // Validate data before saving. - if ($this->skipValidation === false) - { - if ($this->cleanRules(true)->validate($data) === false) - { - return false; - } - } - - // Must be called first so we don't - // strip out updated_at values. - $data = $this->doProtectFields($data); - - if ($this->useTimestamps && ! empty($this->updatedField) && ! array_key_exists($this->updatedField, $data)) - { - $data[$this->updatedField] = $this->setDate(); - } - - $eventData = $this->trigger('beforeUpdate', ['id' => $id, 'data' => $data]); - - $builder = $this->builder(); - - if ($id) - { - $builder = $builder->whereIn($this->table . '.' . $this->primaryKey, $id); - } - - // Must use the set() method to ensure objects get converted to arrays - $result = $builder - ->set($eventData['data'], '', $escape) - ->update(); - - $this->trigger('afterUpdate', ['id' => $id, 'data' => $eventData['data'], 'result' => $result]); - - return $result; - } - - //-------------------------------------------------------------------- - - /** - * Update_Batch - * - * Compiles an update string and runs the query - * - * @param array $set An associative array of update values - * @param string $index The where key - * @param integer $batchSize The size of the batch to run - * @param boolean $returnSQL True means SQL is returned, false will execute the query - * - * @return mixed Number of rows affected or FALSE on failure - * @throws \CodeIgniter\Database\Exceptions\DatabaseException - */ - public function updateBatch(array $set = null, string $index = null, int $batchSize = 100, bool $returnSQL = false) - { - if (is_array($set) && $this->skipValidation === false) - { - foreach ($set as $row) - { - if ($this->cleanRules(true)->validate($row) === false) - { - return false; - } - } - } - - return $this->builder()->testMode($returnSQL)->updateBatch($set, $index, $batchSize); - } - - //-------------------------------------------------------------------- - - /** - * Deletes a single record from $this->table where $id matches - * the table's primaryKey - * - * @param integer|string|array|null $id The rows primary key(s) - * @param boolean $purge Allows overriding the soft deletes setting. - * - * @return BaseResult|boolean - * @throws \CodeIgniter\Database\Exceptions\DatabaseException - */ - public function delete($id = null, bool $purge = false) - { - if (! empty($id) && (is_numeric($id) || is_string($id))) - { - $id = [$id]; - } - - $builder = $this->builder(); - if (! empty($id)) - { - $builder = $builder->whereIn($this->primaryKey, $id); - } - - $this->trigger('beforeDelete', ['id' => $id, 'purge' => $purge]); - - if ($this->useSoftDeletes && ! $purge) - { - if (empty($builder->getCompiledQBWhere())) - { - if (CI_DEBUG) - { - throw new DatabaseException('Deletes are not allowed unless they contain a "where" or "like" clause.'); - } - // @codeCoverageIgnoreStart - return false; - // @codeCoverageIgnoreEnd - } - $set[$this->deletedField] = $this->setDate(); - - if ($this->useTimestamps && ! empty($this->updatedField)) - { - $set[$this->updatedField] = $this->setDate(); - } - - $result = $builder->update($set); - } - else - { - $result = $builder->delete(); - } - - $this->trigger('afterDelete', ['id' => $id, 'purge' => $purge, 'result' => $result, 'data' => null]); - - return $result; - } - - //-------------------------------------------------------------------- - - /** - * Permanently deletes all rows that have been marked as deleted - * through soft deletes (deleted = 1) - * - * @return boolean|mixed - */ - public function purgeDeleted() - { - if (! $this->useSoftDeletes) - { - return true; - } - - return $this->builder() - ->where($this->table . '.' . $this->deletedField . ' IS NOT NULL') - ->delete(); - } - - //-------------------------------------------------------------------- - - /** - * Sets $useSoftDeletes value so that we can temporarily override - * the softdeletes settings. Can be used for all find* methods. - * - * @param boolean $val - * - * @return Model - */ - public function withDeleted($val = true) - { - $this->tempUseSoftDeletes = ! $val; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Works with the find* methods to return only the rows that - * have been deleted. - * - * @return Model - */ - public function onlyDeleted() - { - $this->tempUseSoftDeletes = false; - - $this->builder() - ->where($this->table . '.' . $this->deletedField . ' IS NOT NULL'); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Replace - * - * Compiles an replace into string and runs the query - * - * @param null $data - * @param boolean $returnSQL - * - * @return mixed - */ - public function replace($data = null, bool $returnSQL = false) - { - // Validate data before saving. - if (! empty($data) && $this->skipValidation === false) - { - if ($this->cleanRules(true)->validate($data) === false) - { - return false; - } - } - - return $this->builder()->replace($data, $returnSQL); - } - - //-------------------------------------------------------------------- - // Utility - //-------------------------------------------------------------------- - - /** - * Sets the return type of the results to be as an associative array. - * - * @return Model - */ - public function asArray() - { - $this->tempReturnType = 'array'; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the return type to be of the specified type of object. - * Defaults to a simple object, but can be any class that has - * class vars with the same name as the table columns, or at least - * allows them to be created. - * - * @param string $class - * - * @return Model - */ - public function asObject(string $class = 'object') - { - $this->tempReturnType = $class; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Loops over records in batches, allowing you to operate on them. - * Works with $this->builder to get the Compiled select to - * determine the rows to operate on. - * - * @param integer $size - * @param \Closure $userFunc - * - * @throws \CodeIgniter\Database\Exceptions\DataException - */ - public function chunk(int $size, Closure $userFunc) - { - $total = $this->builder() - ->countAllResults(false); - - $offset = 0; - - while ($offset <= $total) - { - $builder = clone($this->builder()); - - $rows = $builder->get($size, $offset); - - if ($rows === false) - { - throw DataException::forEmptyDataset('chunk'); - } - - $rows = $rows->getResult($this->tempReturnType); - - $offset += $size; - - if (empty($rows)) - { - continue; - } - - foreach ($rows as $row) - { - if ($userFunc($row) === false) - { - return; - } - } - } - } - - //-------------------------------------------------------------------- - - /** - * Works with $this->builder to get the Compiled Select to operate on. - * Expects a GET variable (?page=2) that specifies the page of results - * to display. - * - * @param integer $perPage - * @param string $group Will be used by the pagination library - * to identify a unique pagination set. - * @param integer $page Optional page number (useful when the page number is provided in different way) - * @param integer $segment Optional URI segment number (if page number is provided by URI segment) - * - * @return array|null - */ - public function paginate(int $perPage = null, string $group = 'default', int $page = null, int $segment = 0) - { - $pager = \Config\Services::pager(null, null, false); - - if ($segment) - { - $pager->setSegment($segment); - } - - $page = $page >= 1 ? $page : $pager->getCurrentPage($group); - - $total = $this->countAllResults(false); - - // Store it in the Pager library so it can be - // paginated in the views. - $this->pager = $pager->store($group, $page, $perPage, $total, $segment); - $perPage = $this->pager->getPerPage($group); - $offset = ($page - 1) * $perPage; - - return $this->findAll($perPage, $offset); - } - - //-------------------------------------------------------------------- - - /** - * Sets whether or not we should whitelist data set during - * updates or inserts against $this->availableFields. - * - * @param boolean $protect - * - * @return Model - */ - public function protect(bool $protect = true) - { - $this->protectFields = $protect; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Provides a shared instance of the Query Builder. - * - * @param string $table - * - * @return BaseBuilder - * @throws \CodeIgniter\Exceptions\ModelException; - */ - protected function builder(string $table = null) - { - if ($this->builder instanceof BaseBuilder) - { - return $this->builder; - } - - // We're going to force a primary key to exist - // so we don't have overly convoluted code, - // and future features are likely to require them. - if (empty($this->primaryKey)) - { - throw ModelException::forNoPrimaryKey(get_class($this)); - } - - $table = empty($table) ? $this->table : $table; - - // Ensure we have a good db connection - if (! $this->db instanceof BaseConnection) - { - $this->db = Database::connect($this->DBGroup); - } - - $this->builder = $this->db->table($table); - - return $this->builder; - } - - //-------------------------------------------------------------------- - - /** - * Ensures that only the fields that are allowed to be updated - * are in the data array. - * - * Used by insert() and update() to protect against mass assignment - * vulnerabilities. - * - * @param array $data - * - * @return array - * @throws \CodeIgniter\Database\Exceptions\DataException - */ - protected function doProtectFields(array $data): array - { - if ($this->protectFields === false) - { - return $data; - } - - if (empty($this->allowedFields)) - { - throw DataException::forInvalidAllowedFields(get_class($this)); - } - - if (is_array($data) && count($data)) - { - foreach ($data as $key => $val) - { - if (! in_array($key, $this->allowedFields)) - { - unset($data[$key]); - } - } - } - - return $data; - } - - //-------------------------------------------------------------------- - - /** - * A utility function to allow child models to use the type of - * date/time format that they prefer. This is primarily used for - * setting created_at, updated_at and deleted_at values, but can be - * used by inheriting classes. - * - * The available time formats are: - * - 'int' - Stores the date as an integer timestamp - * - 'datetime' - Stores the data in the SQL datetime format - * - 'date' - Stores the date (only) in the SQL date format. - * - * @param integer $userData An optional PHP timestamp to be converted. - * - * @return mixed - * @throws \CodeIgniter\Exceptions\ModelException; - */ - protected function setDate(int $userData = null) - { - $currentDate = is_numeric($userData) ? (int) $userData : time(); - - switch ($this->dateFormat) - { - case 'int': - return $currentDate; - case 'datetime': - return date('Y-m-d H:i:s', $currentDate); - case 'date': - return date('Y-m-d', $currentDate); - default: - throw ModelException::forNoDateFormat(get_class($this)); - } - } - - //-------------------------------------------------------------------- - - /** - * Specify the table associated with a model - * - * @param string $table - * - * @return Model - */ - public function setTable(string $table) - { - $this->table = $table; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Grabs the last error(s) that occurred. If data was validated, - * it will first check for errors there, otherwise will try to - * grab the last error from the Database connection. - * - * @param boolean $forceDB Always grab the db error, not validation - * - * @return array|null - */ - public function errors(bool $forceDB = false) - { - // Do we have validation errors? - if ($forceDB === false && $this->skipValidation === false) - { - $errors = $this->validation->getErrors(); - - if (! empty($errors)) - { - return $errors; - } - } - - // Still here? Grab the database-specific error, if any. - $error = $this->db->error(); - - return $error['message'] ?? null; - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Validation - //-------------------------------------------------------------------- - - /** - * Set the value of the skipValidation flag. - * - * @param boolean $skip - * - * @return Model - */ - public function skipValidation(bool $skip = true) - { - $this->skipValidation = $skip; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Allows to set validation messages. - * It could be used when you have to change default or override current validate messages. - * - * @param array $validationMessages - * - * @return void - */ - public function setValidationMessages(array $validationMessages) - { - $this->validationMessages = $validationMessages; - } - //-------------------------------------------------------------------- - - /** - * Allows to set field wise validation message. - * It could be used when you have to change default or override current validate messages. - * - * @param string $field - * @param array $fieldMessages - * - * @return void - */ - public function setValidationMessage(string $field, array $fieldMessages) - { - $this->validationMessages[$field] = $fieldMessages; - } - - //-------------------------------------------------------------------- - - /** - * Allows to set validation rules. - * It could be used when you have to change default or override current validate rules. - * - * @param array $validationRules - * - * @return void - */ - public function setValidationRules(array $validationRules) - { - $this->validationRules = $validationRules; - } - - //-------------------------------------------------------------------- - - /** - * Allows to set field wise validation rules. - * It could be used when you have to change default or override current validate rules. - * - * @param string $field - * @param string|array $fieldRules - * - * @return void - */ - public function setValidationRule(string $field, $fieldRules) - { - $this->validationRules[$field] = $fieldRules; - } - - //-------------------------------------------------------------------- - - /** - * Should validation rules be removed before saving? - * Most handy when doing updates. - * - * @param boolean $choice - * - * @return $this - */ - public function cleanRules(bool $choice = false) - { - $this->cleanValidationRules = $choice; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Validate the data against the validation rules (or the validation group) - * specified in the class property, $validationRules. - * - * @param array|object $data - * - * @return boolean - */ - public function validate($data): bool - { - $rules = $this->getValidationRules(); - - if ($this->skipValidation === true || empty($rules) || empty($data)) - { - return true; - } - - // Query Builder works with objects as well as arrays, - // but validation requires array, so cast away. - if (is_object($data)) - { - $data = (array) $data; - } - - // ValidationRules can be either a string, which is the group name, - // or an array of rules. - if (is_string($rules)) - { - $rules = $this->validation->loadRuleGroup($rules); - } - - $rules = $this->cleanValidationRules - ? $this->cleanValidationRules($rules, $data) - : $rules; - - // If no data existed that needs validation - // our job is done here. - if (empty($rules)) - { - return true; - } - - $this->validation->setRules($rules, $this->validationMessages); - $valid = $this->validation->run($data, null, $this->DBGroup); - - return (bool) $valid; - } - - //-------------------------------------------------------------------- - - /** - * Removes any rules that apply to fields that have not been set - * currently so that rules don't block updating when only updating - * a partial row. - * - * @param array $rules - * - * @param array|null $data - * - * @return array - */ - protected function cleanValidationRules(array $rules, array $data = null): array - { - if (empty($data)) - { - return []; - } - - foreach ($rules as $field => $rule) - { - if (! array_key_exists($field, $data)) - { - unset($rules[$field]); - } - } - - return $rules; - } - - /** - * Replace any placeholders within the rules with the values that - * match the 'key' of any properties being set. For example, if - * we had the following $data array: - * - * [ 'id' => 13 ] - * - * and the following rule: - * - * 'required|is_unique[users,email,id,{id}]' - * - * The value of {id} would be replaced with the actual id in the form data: - * - * 'required|is_unique[users,email,id,13]' - * - * @codeCoverageIgnore - * - * @deprecated use fillPlaceholders($rules, $data) from Validation instead - * - * @param array $rules - * @param array $data - * - * @return array - */ - protected function fillPlaceholders(array $rules, array $data): array - { - $replacements = []; - - foreach ($data as $key => $value) - { - $replacements["{{$key}}"] = $value; - } - - if (! empty($replacements)) - { - foreach ($rules as &$rule) - { - if (is_array($rule)) - { - foreach ($rule as &$row) - { - // Should only be an `errors` array - // which doesn't take placeholders. - if (is_array($row)) - { - continue; - } - - $row = strtr($row, $replacements); - } - continue; - } - - $rule = strtr($rule, $replacements); - } - } - - return $rules; - } - - //-------------------------------------------------------------------- - - /** - * Returns the model's defined validation rules so that they - * can be used elsewhere, if needed. - * - * @param array $options - * - * @return array - */ - public function getValidationRules(array $options = []): array - { - $rules = $this->validationRules; - - // ValidationRules can be either a string, which is the group name, - // or an array of rules. - if (is_string($rules)) - { - $rules = $this->validation->loadRuleGroup($rules); - } - - if (isset($options['except'])) - { - $rules = array_diff_key($rules, array_flip($options['except'])); - } - elseif (isset($options['only'])) - { - $rules = array_intersect_key($rules, array_flip($options['only'])); - } - - return $rules; - } - - //-------------------------------------------------------------------- - - /** - * Returns the model's define validation messages so they - * can be used elsewhere, if needed. - * - * @return array - */ - public function getValidationMessages(): array - { - return $this->validationMessages; - } - - //-------------------------------------------------------------------- - - /** - * Override countAllResults to account for soft deleted accounts. - * - * @param boolean $reset - * @param boolean $test - * - * @return mixed - */ - public function countAllResults(bool $reset = true, bool $test = false) - { - if ($this->tempUseSoftDeletes === true) - { - $this->builder()->where($this->table . '.' . $this->deletedField, null); - } - - // When $reset === false, the $tempUseSoftDeletes will be - // dependant on $useSoftDeletes value because we don't - // want to add the same "where" condition for the second time - $this->tempUseSoftDeletes = ($reset === true) - ? $this->useSoftDeletes - : ($this->useSoftDeletes === true - ? false - : $this->useSoftDeletes); - - return $this->builder()->testMode($test)->countAllResults($reset); - } - - /** - * Sets $tempAllowCallbacks value so that we can temporarily override - * the setting. Resets after the next trigger. - * - * @param boolean $val - * - * @return Model - */ - public function allowCallbacks(bool $val = true) - { - $this->tempAllowCallbacks = $val; - - return $this; - } - - /** - * A simple event trigger for Model Events that allows additional - * data manipulation within the model. Specifically intended for - * usage by child models this can be used to format data, - * save/load related classes, etc. - * - * It is the responsibility of the callback methods to return - * the data itself. - * - * Each $eventData array MUST have a 'data' key with the relevant - * data for callback methods (like an array of key/value pairs to insert - * or update, an array of results, etc) - * - * If callbacks are not allowed then returns $eventData immediately. - * - * @param string $event - * @param array $eventData - * - * @return mixed - * @throws \CodeIgniter\Database\Exceptions\DataException - */ - protected function trigger(string $event, array $eventData) - { - $allowed = $this->tempAllowCallbacks; - $this->tempAllowCallbacks = $this->allowCallbacks; - - if (! $allowed) - { - return $eventData; - } - - // Ensure it's a valid event - if (! isset($this->{$event}) || empty($this->{$event})) - { - return $eventData; - } - - foreach ($this->{$event} as $callback) - { - if (! method_exists($this, $callback)) - { - throw DataException::forInvalidMethodTriggered($callback); - } - - $eventData = $this->{$callback}($eventData); - } - - return $eventData; - } - - //-------------------------------------------------------------------- - - //-------------------------------------------------------------------- - // Magic - //-------------------------------------------------------------------- - - /** - * Provides/instantiates the builder/db connection and model's table/primary key names and return type. - * - * @param string $name - * - * @return mixed - */ - public function __get(string $name) - { - if (property_exists($this, $name)) - { - return $this->{$name}; - } - elseif (isset($this->db->$name)) - { - return $this->db->$name; - } - elseif (isset($this->builder()->$name)) - { - return $this->builder()->$name; - } - - return null; - } - - /** - * Checks for the existence of properties across this model, builder, and db connection. - * - * @param string $name - * - * @return boolean - */ - public function __isset(string $name): bool - { - if (property_exists($this, $name)) - { - return true; - } - elseif (isset($this->db->$name)) - { - return true; - } - elseif (isset($this->builder()->$name)) - { - return true; - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Provides direct access to method in the builder (if available) - * and the database connection. - * - * @param string $name - * @param array $params - * - * @return Model|null - */ - public function __call(string $name, array $params) - { - $result = null; - - if (method_exists($this->db, $name)) - { - $result = $this->db->$name(...$params); - } - elseif (method_exists($builder = $this->builder(), $name)) - { - $result = $builder->$name(...$params); - } - - // Don't return the builder object unless specifically requested - //, since that will interrupt the usability flow - // and break intermingling of model and builder methods. - if ($name !== 'builder' && empty($result)) - { - if (! method_exists($this->builder(), $name)) - { - $className = get_class($this); - throw new \BadMethodCallException("Call to undefined method $className::$name"); - } - return $result; - } - if ($name !== 'builder' && ! $result instanceof BaseBuilder) - { - return $result; - } - - return $this; - } - - //-------------------------------------------------------------------- -} diff --git a/system/Pager/Exceptions/PagerException.php b/system/Pager/Exceptions/PagerException.php deleted file mode 100644 index fe2b62c8..00000000 --- a/system/Pager/Exceptions/PagerException.php +++ /dev/null @@ -1,17 +0,0 @@ -config = $config; - $this->view = $view; - } - - //-------------------------------------------------------------------- - - /** - * Handles creating and displaying the - * - * @param string $group - * @param string $template The output template alias to render. - * - * @return string - */ - public function links(string $group = 'default', string $template = 'default_full'): string - { - $this->ensureGroup($group); - - return $this->displayLinks($group, $template); - } - - //-------------------------------------------------------------------- - - /** - * Creates simple Next/Previous links, instead of full pagination. - * - * @param string $group - * @param string $template - * - * @return string - */ - public function simpleLinks(string $group = 'default', string $template = 'default_simple'): string - { - $this->ensureGroup($group); - - return $this->displayLinks($group, $template); - } - - //-------------------------------------------------------------------- - - /** - * Allows for a simple, manual, form of pagination where all of the data - * is provided by the user. The URL is the current URI. - * - * @param integer $page - * @param integer $perPage - * @param integer $total - * @param string $template The output template alias to render. - * @param integer $segment (if page number is provided by URI segment) - * - * @param string $group optional group (i.e. if we'd like to define custom path) - * @return string - */ - public function makeLinks(int $page, int $perPage = null, int $total, string $template = 'default_full', int $segment = 0, ?string $group = 'default'): string - { - $group = $group === '' ? 'default' : $group; - - $this->store($group, $page, $perPage ?? $this->config->perPage, $total, $segment); - - return $this->displayLinks($group, $template); - } - - //-------------------------------------------------------------------- - - /** - * Does the actual work of displaying the view file. Used internally - * by links(), simpleLinks(), and makeLinks(). - * - * @param string $group - * @param string $template - * - * @return string - */ - protected function displayLinks(string $group, string $template): string - { - $pager = new PagerRenderer($this->getDetails($group)); - - if (! array_key_exists($template, $this->config->templates)) - { - throw PagerException::forInvalidTemplate($template); - } - - return $this->view->setVar('pager', $pager) - ->render($this->config->templates[$template]); - } - - //-------------------------------------------------------------------- - - /** - * Stores a set of pagination data for later display. Most commonly used - * by the model to automate the process. - * - * @param string $group - * @param integer $page - * @param integer $perPage - * @param integer $total - * @param integer $segment - * - * @return $this - */ - public function store(string $group, int $page, int $perPage = null, int $total, int $segment = 0) - { - if ($segment) - { - $this->setSegment($segment, $group); - } - - $this->ensureGroup($group, $perPage); - - if ($segment > 0 && $this->groups[$group]['currentPage'] > 0) - { - $page = $this->groups[$group]['currentPage']; - } - - $perPage = $perPage ?? $this->config->perPage; - $pageCount = (int)ceil($total / $perPage); - $this->groups[$group]['currentPage'] = $page > $pageCount ? $pageCount : $page; - $this->groups[$group]['perPage'] = $perPage; - $this->groups[$group]['total'] = $total; - $this->groups[$group]['pageCount'] = $pageCount; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets segment for a group. - * - * @param integer $number - * @param string $group - * - * @return mixed - */ - public function setSegment(int $number, string $group = 'default') - { - $this->segment[$group] = $number; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the path that an aliased group of links will use. - * - * @param string $path - * @param string $group - * - * @return mixed - */ - public function setPath(string $path, string $group = 'default') - { - $this->ensureGroup($group); - - $this->groups[$group]['uri']->setPath($path); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the total number of pages. - * - * @param string|null $group - * - * @return integer - */ - public function getPageCount(string $group = 'default'): int - { - $this->ensureGroup($group); - - return $this->groups[$group]['pageCount']; - } - - //-------------------------------------------------------------------- - - /** - * Returns the number of the current page of results. - * - * @param string|null $group - * - * @return integer - */ - public function getCurrentPage(string $group = 'default'): int - { - $this->ensureGroup($group); - - return $this->groups[$group]['currentPage'] ?: 1; - } - - //-------------------------------------------------------------------- - - /** - * Tells whether this group of results has any more pages of results. - * - * @param string|null $group - * - * @return boolean - */ - public function hasMore(string $group = 'default'): bool - { - $this->ensureGroup($group); - - return ($this->groups[$group]['currentPage'] * $this->groups[$group]['perPage']) < $this->groups[$group]['total']; - } - - //-------------------------------------------------------------------- - - /** - * Returns the last page, if we have a total that we can calculate with. - * - * @param string $group - * - * @return integer|null - */ - public function getLastPage(string $group = 'default') - { - $this->ensureGroup($group); - - if (! is_numeric($this->groups[$group]['total']) || ! is_numeric($this->groups[$group]['perPage'])) - { - return null; - } - - return (int)ceil($this->groups[$group]['total'] / $this->groups[$group]['perPage']); - } - - //-------------------------------------------------------------------- - - /** - * Determines the first page # that should be shown. - * - * @param string $group - * - * @return integer - */ - public function getFirstPage(string $group = 'default'): int - { - $this->ensureGroup($group); - - // @todo determine based on a 'surroundCount' value - return 1; - } - - //-------------------------------------------------------------------- - - /** - * Returns the URI for a specific page for the specified group. - * - * @param integer|null $page - * @param string $group - * @param boolean $returnObject - * - * @return string|\CodeIgniter\HTTP\URI - */ - public function getPageURI(int $page = null, string $group = 'default', bool $returnObject = false) - { - $this->ensureGroup($group); - - /** - * @var \CodeIgniter\HTTP\URI $uri - */ - $uri = $this->groups[$group]['uri']; - - $segment = $this->segment[$group] ?? 0; - - if ($segment) - { - $uri->setSegment($segment, $page); - } - else - { - $uri->addQuery($this->groups[$group]['pageSelector'], $page); - } - - if ($this->only) - { - $query = array_intersect_key($_GET, array_flip($this->only)); - - if (! $segment) - { - $query[$this->groups[$group]['pageSelector']] = $page; - } - - $uri->setQueryArray($query); - } - - return $returnObject === true ? $uri : (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Returns the full URI to the next page of results, or null. - * - * @param string $group - * @param boolean $returnObject - * - * @return string|null - */ - public function getNextPageURI(string $group = 'default', bool $returnObject = false) - { - $this->ensureGroup($group); - - $last = $this->getLastPage($group); - $curr = $this->getCurrentPage($group); - $page = null; - - if (! empty($last) && ! empty($curr) && $last === $curr) - { - return null; - } - - if ($last > $curr) - { - $page = $curr + 1; - } - - return $this->getPageURI($page, $group, $returnObject); - } - - //-------------------------------------------------------------------- - - /** - * Returns the full URL to the previous page of results, or null. - * - * @param string $group - * @param boolean $returnObject - * - * @return string|null - */ - public function getPreviousPageURI(string $group = 'default', bool $returnObject = false) - { - $this->ensureGroup($group); - - $first = $this->getFirstPage($group); - $curr = $this->getCurrentPage($group); - $page = null; - - if (! empty($first) && ! empty($curr) && $first === $curr) - { - return null; - } - - if ($first < $curr) - { - $page = $curr - 1; - } - - return $this->getPageURI($page, $group, $returnObject); - } - - //-------------------------------------------------------------------- - - /** - * Returns the number of results per page that should be shown. - * - * @param string $group - * - * @return integer - */ - public function getPerPage(string $group = 'default'): int - { - $this->ensureGroup($group); - - return (int) $this->groups[$group]['perPage']; - } - - //-------------------------------------------------------------------- - - /** - * Returns an array with details about the results, including - * total, per_page, current_page, last_page, next_url, prev_url, from, to. - * Does not include the actual data. This data is suitable for adding - * a 'data' object to with the result set and converting to JSON. - * - * @param string $group - * - * @return array - */ - public function getDetails(string $group = 'default'): array - { - if (! array_key_exists($group, $this->groups)) - { - throw PagerException::forInvalidPaginationGroup($group); - } - - $newGroup = $this->groups[$group]; - - $newGroup['next'] = $this->getNextPageURI($group); - $newGroup['previous'] = $this->getPreviousPageURI($group); - $newGroup['segment'] = $this->segment[$group] ?? 0; - - return $newGroup; - } - - //-------------------------------------------------------------------- - - /** - * Sets only allowed queries on pagination links. - * - * @param array $queries - * - * @return Pager - */ - public function only(array $queries):Pager - { - $this->only = $queries; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Ensures that an array exists for the group specified. - * - * @param string $group - * @param integer $perPage - */ - protected function ensureGroup(string $group, int $perPage = null) - { - if (array_key_exists($group, $this->groups)) - { - return; - } - - $this->groups[$group] = [ - 'uri' => clone current_url(true), - 'hasMore' => false, - 'total' => null, - 'perPage' => $perPage ?? $this->config->perPage, - 'pageCount' => 1, - 'pageSelector' => $group === 'default' ? 'page' : 'page_' . $group, - ]; - - $this->calculateCurrentPage($group); - - if ($_GET) - { - $this->groups[$group]['uri'] = $this->groups[$group]['uri']->setQueryArray($_GET); - } - } - - //-------------------------------------------------------------------- - - /** - * Calculating the current page - * - * @param string $group - */ - protected function calculateCurrentPage(string $group) - { - if (array_key_exists($group, $this->segment)) - { - try - { - $this->groups[$group]['currentPage'] = (int) $this->groups[$group]['uri']->setSilent(false)->getSegment($this->segment[$group]); - } - catch (\CodeIgniter\HTTP\Exceptions\HTTPException $e) - { - $this->groups[$group]['currentPage'] = 1; - } - } - else - { - $pageSelector = $this->groups[$group]['pageSelector']; - - $page = (int) ($_GET[$pageSelector] ?? 1); - - $this->groups[$group]['currentPage'] = $page < 1 ? 1 : $page; - } - } - - //-------------------------------------------------------------------- -} diff --git a/system/Pager/PagerInterface.php b/system/Pager/PagerInterface.php deleted file mode 100644 index 9f975b5a..00000000 --- a/system/Pager/PagerInterface.php +++ /dev/null @@ -1,228 +0,0 @@ -first = 1; - $this->last = $details['pageCount']; - $this->current = $details['currentPage']; - $this->total = $details['total']; - $this->uri = $details['uri']; - $this->pageCount = $details['pageCount']; - $this->segment = $details['segment'] ?? 0; - $this->pageSelector = $details['pageSelector'] ?? 'page'; - } - - //-------------------------------------------------------------------- - - /** - * Sets the total number of links that should appear on either - * side of the current page. Adjusts the first and last counts - * to reflect it. - * - * @param integer|null $count - * - * @return PagerRenderer - */ - public function setSurroundCount(int $count = null) - { - $this->updatePages($count); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Checks to see if there is a "previous" page before our "first" page. - * - * @return boolean - */ - public function hasPrevious(): bool - { - return $this->first > 1; - } - - //-------------------------------------------------------------------- - - /** - * Returns a URL to the "previous" page. The previous page is NOT the - * page before the current page, but is the page just before the - * "first" page. - * - * You MUST call hasPrevious() first, or this value may be invalid. - * - * @return string|null - */ - public function getPrevious() - { - if (! $this->hasPrevious()) - { - return null; - } - - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->first - 1); - } - else - { - $uri->setSegment($this->segment, $this->first - 1); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Checks to see if there is a "next" page after our "last" page. - * - * @return boolean - */ - public function hasNext(): bool - { - return $this->pageCount > $this->last; - } - - //-------------------------------------------------------------------- - - /** - * Returns a URL to the "next" page. The next page is NOT, the - * page after the current page, but is the page that follows the - * "last" page. - * - * You MUST call hasNext() first, or this value may be invalid. - * - * @return string|null - */ - public function getNext() - { - if (! $this->hasNext()) - { - return null; - } - - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->last + 1); - } - else - { - $uri->setSegment($this->segment, $this->last + 1); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Returns the URI of the first page. - * - * @return string - */ - public function getFirst(): string - { - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, 1); - } - else - { - $uri->setSegment($this->segment, 1); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Returns the URI of the last page. - * - * @return string - */ - public function getLast(): string - { - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->pageCount); - } - else - { - $uri->setSegment($this->segment, $this->pageCount); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Returns the URI of the current page. - * - * @return string - */ - public function getCurrent(): string - { - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->current); - } - else - { - $uri->setSegment($this->segment, $this->current); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Returns an array of links that should be displayed. Each link - * is represented by another array containing of the URI the link - * should go to, the title (number) of the link, and a boolean - * value representing whether this link is active or not. - * - * @return array - */ - public function links(): array - { - $links = []; - - $uri = clone $this->uri; - - for ($i = $this->first; $i <= $this->last; $i ++) - { - $links[] = [ - 'uri' => (string) ($this->segment === 0 ? $uri->addQuery($this->pageSelector, $i) : $uri->setSegment($this->segment, $i)), - 'title' => (int) $i, - 'active' => ($i === $this->current), - ]; - } - - return $links; - } - - //-------------------------------------------------------------------- - - /** - * Updates the first and last pages based on $surroundCount, - * which is the number of links surrounding the active page - * to show. - * - * @param integer|null $count The new "surroundCount" - */ - protected function updatePages(int $count = null) - { - if (is_null($count)) - { - return; - } - - $this->first = $this->current - $count > 0 ? (int) ($this->current - $count) : 1; - $this->last = $this->current + $count <= $this->pageCount ? (int) ($this->current + $count) : (int) $this->pageCount; - } - - //-------------------------------------------------------------------- - - /** - * Checks to see if there is a "previous" page before our "first" page. - * - * @return boolean - */ - public function hasPreviousPage(): bool - { - return $this->current > 1; - } - - //-------------------------------------------------------------------- - - /** - * Returns a URL to the "previous" page. - * - * You MUST call hasPreviousPage() first, or this value may be invalid. - * - * @return string|null - */ - public function getPreviousPage() - { - if (! $this->hasPreviousPage()) - { - return null; - } - - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->current - 1); - } - else - { - $uri->setSegment($this->segment, $this->current - 1); - } - - return (string) $uri; - } - - //-------------------------------------------------------------------- - - /** - * Checks to see if there is a "next" page after our "last" page. - * - * @return boolean - */ - public function hasNextPage(): bool - { - return $this->current < $this->last; - } - - //-------------------------------------------------------------------- - - /** - * Returns a URL to the "next" page. - * - * You MUST call hasNextPage() first, or this value may be invalid. - * - * @return string|null - */ - public function getNextPage() - { - if (! $this->hasNextPage()) - { - return null; - } - - $uri = clone $this->uri; - - if ($this->segment === 0) - { - $uri->addQuery($this->pageSelector, $this->current + 1); - } - else - { - $uri->setSegment($this->segment, $this->current + 1); - } - - return (string) $uri; - } -} diff --git a/system/Pager/Views/default_full.php b/system/Pager/Views/default_full.php deleted file mode 100644 index ef446e99..00000000 --- a/system/Pager/Views/default_full.php +++ /dev/null @@ -1,46 +0,0 @@ -setSurroundCount(2); -?> - - diff --git a/system/Pager/Views/default_head.php b/system/Pager/Views/default_head.php deleted file mode 100644 index 8f9dc692..00000000 --- a/system/Pager/Views/default_head.php +++ /dev/null @@ -1,18 +0,0 @@ -setSurroundCount(0); - -if ($pager->hasPrevious()) -{ - echo '' . PHP_EOL; -} - -echo '' . PHP_EOL; - -if ($pager->hasNext()) -{ - echo '' . PHP_EOL; -} diff --git a/system/Pager/Views/default_simple.php b/system/Pager/Views/default_simple.php deleted file mode 100644 index 3bfa8d9d..00000000 --- a/system/Pager/Views/default_simple.php +++ /dev/null @@ -1,21 +0,0 @@ -setSurroundCount(0); -?> - diff --git a/system/RESTful/ResourceController.php b/system/RESTful/ResourceController.php deleted file mode 100644 index d13218ca..00000000 --- a/system/RESTful/ResourceController.php +++ /dev/null @@ -1,203 +0,0 @@ -setModel($this->modelName); - } - - //-------------------------------------------------------------------- - - /** - * Return an array of resource objects, themselves in array format - * - * @return array an array - */ - public function index() - { - return $this->fail(lang('RESTful.notImplemented', ['index']), 501); - } - - /** - * Return the properties of a resource object - * - * @return array an array - */ - public function show($id = null) - { - return $this->fail(lang('RESTful.notImplemented', ['show']), 501); - } - - /** - * Return a new resource object, with default properties - * - * @return array an array - */ - public function new() - { - return $this->fail(lang('RESTful.notImplemented', ['new']), 501); - } - - /** - * Create a new resource object, from "posted" parameters - * - * @return array an array - */ - public function create() - { - return $this->fail(lang('RESTful.notImplemented', ['create']), 501); - } - - /** - * Return the editable properties of a resource object - * - * @return array an array - */ - public function edit($id = null) - { - return $this->fail(lang('RESTful.notImplemented', ['edit']), 501); - } - - /** - * Add or update a model resource, from "posted" properties - * - * @return array an array - */ - public function update($id = null) - { - return $this->fail(lang('RESTful.notImplemented', ['update']), 501); - } - - /** - * Delete the designated resource object from the model - * - * @return array an array - */ - public function delete($id = null) - { - return $this->fail(lang('RESTful.notImplemented', ['delete']), 501); - } - - //-------------------------------------------------------------------- - - /** - * Set or change the model this controller is bound to. - * Given either the name or the object, determine the other. - * - * @param string|object $which - */ - public function setModel($which = null) - { - // save what we have been given - if (! empty($which)) - { - if (is_object($which)) - { - $this->model = $which; - } - else - { - $this->modelName = $which; - } - } - - // make a model object if needed - if (empty($this->model) && ! empty($this->modelName)) - { - if (class_exists($this->modelName)) - { - $this->model = model($this->modelName); - } - } - - // determine model name if needed - if (empty($this->modelName) && ! empty($this->model)) - { - $this->modelName = get_class($this->model); - } - } - - /** - * Set/change the expected response representation for returned objects - * - * @param string $format - */ - public function setFormat(string $format = 'json') - { - if (in_array($format, ['json', 'xml'])) - { - $this->format = $format; - } - } - -} diff --git a/system/RESTful/ResourcePresenter.php b/system/RESTful/ResourcePresenter.php deleted file mode 100644 index 91fdeb04..00000000 --- a/system/RESTful/ResourcePresenter.php +++ /dev/null @@ -1,206 +0,0 @@ -setModel($this->modelName); - } - - //-------------------------------------------------------------------- - - /** - * Present a view of resource objects - * - * @return string - */ - public function index() - { - return lang('RESTful.notImplemented', ['index']); - } - - /** - * Present a view to present a specific resource object - * - * @param type $id - * @return string - */ - public function show($id = null) - { - return lang('RESTful.notImplemented', ['show']); - } - - /** - * Present a view to present a new single resource object - * - * @return string - */ - public function new() - { - return lang('RESTful.notImplemented', ['new']); - } - - /** - * Process the creation/insertion of a new resource object. - * This should be a POST. - * - * @return string - */ - public function create() - { - return lang('RESTful.notImplemented', ['create']); - } - - /** - * Present a view to confirm the deletion of a specific resource object - * - * @param type $id - * @return string - */ - public function remove($id = null) - { - return lang('RESTful.notImplemented', ['remove']); - } - - /** - * Process the deletion of a specific resource object - * - * @param type $id - * @return string - */ - public function delete($id = null) - { - return lang('RESTful.notImplemented', ['delete']); - } - - /** - * Present a view to edit the properties of a specific resource object - * - * @param type $id - * @return string - */ - public function edit($id = null) - { - return lang('RESTful.notImplemented', ['edit']); - } - - /** - * Process the updating, full or partial, of a specific resource object. - * This should be a POST. - * - * @param type $id - * @return string - */ - public function update($id = null) - { - return lang('RESTful.notImplemented', ['update']); - } - - //-------------------------------------------------------------------- - - /** - * Set or change the model this controller is bound to. - * Given either the name or the object, determine the other. - * - * @param string|object $which - */ - public function setModel($which = null) - { - // save what we have been given - if (! empty($which)) - { - if (is_object($which)) - { - $this->model = $which; - $this->modelName = null; - } - else - { - $this->model = null; - $this->modelName = $which; - } - } - - // make a model object if needed - if (empty($this->model) && ! empty($this->modelName)) - { - if (class_exists($this->modelName)) - { - $this->model = model($this->modelName); - } - } - - // determine model name if needed - if (empty($this->modelName) && ! empty($this->model)) - { - $this->modelName = get_class($this->model); - } - } - -} diff --git a/system/Router/RouteCollection.php b/system/Router/RouteCollection.php deleted file mode 100644 index bce96c01..00000000 --- a/system/Router/RouteCollection.php +++ /dev/null @@ -1,1588 +0,0 @@ - '.*', - 'segment' => '[^/]+', - 'alphanum' => '[a-zA-Z0-9]+', - 'num' => '[0-9]+', - 'alpha' => '[a-zA-Z]+', - 'hash' => '[^/]+', - ]; - - /** - * An array of all routes and their mappings. - * - * @var array - */ - protected $routes = [ - '*' => [], - 'options' => [], - 'get' => [], - 'head' => [], - 'post' => [], - 'put' => [], - 'delete' => [], - 'trace' => [], - 'connect' => [], - 'cli' => [], - ]; - - /** - * Array of routes options - * - * @var array - */ - protected $routesOptions = []; - - /** - * The current method that the script is being called by. - * - * @var string - */ - protected $HTTPVerb; - - /** - * The default list of HTTP methods (and CLI for command line usage) - * that is allowed if no other method is provided. - * - * @var array - */ - protected $defaultHTTPMethods = [ - 'options', - 'get', - 'head', - 'post', - 'put', - 'delete', - 'trace', - 'connect', - 'cli', - ]; - - /** - * The name of the current group, if any. - * - * @var string - */ - protected $group; - - /** - * The current subdomain. - * - * @var string - */ - protected $currentSubdomain; - - /** - * Stores copy of current options being - * applied during creation. - * - * @var null - */ - protected $currentOptions; - - /** - * A little performance booster. - * - * @var boolean - */ - protected $didDiscover = false; - - /** - * Handle to the file locator to use. - * - * @var \CodeIgniter\Autoloader\FileLocator - */ - protected $fileLocator; - - /** - * Handle to the modules config. - * - * @var \Config\Modules - */ - protected $moduleConfig; - - //-------------------------------------------------------------------- - - /** - * Constructor - * - * @param \CodeIgniter\Autoloader\FileLocator $locator - * @param \Config\Modules $moduleConfig - */ - public function __construct(FileLocator $locator, $moduleConfig) - { - $this->fileLocator = $locator; - $this->moduleConfig = $moduleConfig; - } - - //-------------------------------------------------------------------- - - /** - * Registers a new constraint with the system. Constraints are used - * by the routes as placeholders for regular expressions to make defining - * the routes more human-friendly. - * - * You can pass an associative array as $placeholder, and have - * multiple placeholders added at once. - * - * @param string|array $placeholder - * @param string $pattern - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function addPlaceholder($placeholder, string $pattern = null): RouteCollectionInterface - { - if (! is_array($placeholder)) - { - $placeholder = [$placeholder => $pattern]; - } - - $this->placeholders = array_merge($this->placeholders, $placeholder); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the default namespace to use for Controllers when no other - * namespace has been specified. - * - * @param string $value - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function setDefaultNamespace(string $value): RouteCollectionInterface - { - $this->defaultNamespace = filter_var($value, FILTER_SANITIZE_STRING); - $this->defaultNamespace = rtrim($this->defaultNamespace, '\\') . '\\'; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the default controller to use when no other controller has been - * specified. - * - * @param string $value - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function setDefaultController(string $value): RouteCollectionInterface - { - $this->defaultController = filter_var($value, FILTER_SANITIZE_STRING); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the default method to call on the controller when no other - * method has been set in the route. - * - * @param string $value - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function setDefaultMethod(string $value): RouteCollectionInterface - { - $this->defaultMethod = filter_var($value, FILTER_SANITIZE_STRING); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Tells the system whether to convert dashes in URI strings into - * underscores. In some search engines, including Google, dashes - * create more meaning and make it easier for the search engine to - * find words and meaning in the URI for better SEO. But it - * doesn't work well with PHP method names.... - * - * @param boolean $value - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function setTranslateURIDashes(bool $value): RouteCollectionInterface - { - $this->translateURIDashes = $value; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * If TRUE, the system will attempt to match the URI against - * Controllers by matching each segment against folders/files - * in APPPATH/Controllers, when a match wasn't found against - * defined routes. - * - * If FALSE, will stop searching and do NO automatic routing. - * - * @param boolean $value - * - * @return RouteCollectionInterface - */ - public function setAutoRoute(bool $value): RouteCollectionInterface - { - $this->autoRoute = $value; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets the class/method that should be called if routing doesn't - * find a match. It can be either a closure or the controller/method - * name exactly like a route is defined: Users::index - * - * This setting is passed to the Router class and handled there. - * - * @param callable|null $callable - * - * @return RouteCollectionInterface - */ - public function set404Override($callable = null): RouteCollectionInterface - { - $this->override404 = $callable; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the 404 Override setting, which can be null, a closure - * or the controller/string. - * - * @return string|\Closure|null - */ - public function get404Override() - { - return $this->override404; - } - - //-------------------------------------------------------------------- - - /** - * Will attempt to discover any additional routes, either through - * the local PSR4 namespaces, or through selected Composer packages. - */ - protected function discoverRoutes() - { - if ($this->didDiscover) - { - return; - } - - // We need this var in local scope - // so route files can access it. - $routes = $this; - - if ($this->moduleConfig->shouldDiscover('routes')) - { - $files = $this->fileLocator->search('Config/Routes.php'); - - foreach ($files as $file) - { - // Don't include our main file again... - if ($file === APPPATH . 'Config/Routes.php') - { - continue; - } - - include $file; - } - } - - $this->didDiscover = true; - } - - //-------------------------------------------------------------------- - - /** - * Sets the default constraint to be used in the system. Typically - * for use with the 'resource' method. - * - * @param string $placeholder - * - * @return RouteCollectionInterface - */ - public function setDefaultConstraint(string $placeholder): RouteCollectionInterface - { - if (array_key_exists($placeholder, $this->placeholders)) - { - $this->defaultPlaceholder = $placeholder; - } - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the name of the default controller. With Namespace. - * - * @return string - */ - public function getDefaultController(): string - { - return $this->defaultController; - } - - //-------------------------------------------------------------------- - - /** - * Returns the name of the default method to use within the controller. - * - * @return string - */ - public function getDefaultMethod(): string - { - return $this->defaultMethod; - } - - //-------------------------------------------------------------------- - - /** - * Returns the default namespace as set in the Routes config file. - * - * @return string - */ - public function getDefaultNamespace(): string - { - return $this->defaultNamespace; - } - - //-------------------------------------------------------------------- - - /** - * Returns the current value of the translateURIDashes setting. - * - * @return boolean - */ - public function shouldTranslateURIDashes(): bool - { - return $this->translateURIDashes; - } - - //-------------------------------------------------------------------- - - /** - * Returns the flag that tells whether to autoRoute URI against Controllers. - * - * @return boolean - */ - public function shouldAutoRoute(): bool - { - return $this->autoRoute; - } - - //-------------------------------------------------------------------- - - /** - * Returns the raw array of available routes. - * - * @param mixed $verb - * - * @return array - */ - public function getRoutes($verb = null): array - { - if (empty($verb)) - { - $verb = $this->getHTTPVerb(); - } - - // Since this is the entry point for the Router, - // take a moment to do any route discovery - // we might need to do. - $this->discoverRoutes(); - - $routes = []; - - if (isset($this->routes[$verb])) - { - // Keep current verb's routes at the beginning so they're matched - // before any of the generic, "add" routes. - if (isset($this->routes['*'])) - { - $extraRules = array_diff_key($this->routes['*'], $this->routes[$verb]); - $collection = array_merge($this->routes[$verb], $extraRules); - } - foreach ($collection as $r) - { - $key = key($r['route']); - $routes[$key] = $r['route'][$key]; - } - } - - return $routes; - } - - //-------------------------------------------------------------------- - - /** - * Returns one or all routes options - * - * @param string $from - * - * @return array - */ - public function getRoutesOptions(string $from = null): array - { - return $from ? $this->routesOptions[$from] ?? [] : $this->routesOptions; - } - - //-------------------------------------------------------------------- - - /** - * Returns the current HTTP Verb being used. - * - * @return string - */ - public function getHTTPVerb(): string - { - return $this->HTTPVerb; - } - - //-------------------------------------------------------------------- - - /** - * Sets the current HTTP verb. - * Used primarily for testing. - * - * @param string $verb - * - * @return $this - */ - public function setHTTPVerb(string $verb) - { - $this->HTTPVerb = $verb; - - return $this; - } - - /** - * A shortcut method to add a number of routes at a single time. - * It does not allow any options to be set on the route, or to - * define the method used. - * - * @param array $routes - * @param array $options - * - * @return RouteCollectionInterface - */ - public function map(array $routes = [], array $options = null): RouteCollectionInterface - { - foreach ($routes as $from => $to) - { - $this->add($from, $to, $options); - } - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Adds a single route to the collection. - * - * Example: - * $routes->add('news', 'Posts::index'); - * - * @param string $from - * @param array|string $to - * @param array|null $options - * - * @return RouteCollectionInterface - */ - public function add(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('*', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Adds a temporary redirect from one route to another. Used for - * redirecting traffic from old, non-existing routes to the new - * moved routes. - * - * @param string $from The pattern to match against - * @param string $to Either a route name or a URI to redirect to - * @param integer $status The HTTP status code that should be returned with this redirect - * - * @return RouteCollection - */ - public function addRedirect(string $from, string $to, int $status = 302) - { - // Use the named route's pattern if this is a named route. - if (array_key_exists($to, $this->routes['*'])) - { - $to = $this->routes['*'][$to]['route']; - } - elseif (array_key_exists($to, $this->routes['get'])) - { - $to = $this->routes['get'][$to]['route']; - } - - $this->create('*', $from, $to, ['redirect' => $status]); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Determines if the route is a redirecting route. - * - * @param string $from - * - * @return boolean - */ - public function isRedirect(string $from): bool - { - foreach ($this->routes['*'] as $name => $route) - { - // Named route? - if ($name === $from || key($route['route']) === $from) - { - return isset($route['redirect']) && is_numeric($route['redirect']); - } - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Grabs the HTTP status code from a redirecting Route. - * - * @param string $from - * - * @return integer - */ - public function getRedirectCode(string $from): int - { - foreach ($this->routes['*'] as $name => $route) - { - // Named route? - if ($name === $from || key($route['route']) === $from) - { - return $route['redirect'] ?? 0; - } - } - - return 0; - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Grouping Routes - //-------------------------------------------------------------------- - - /** - * Group a series of routes under a single URL segment. This is handy - * for grouping items into an admin area, like: - * - * Example: - * // Creates route: admin/users - * $route->group('admin', function() { - * $route->resource('users'); - * }); - * - * @param string $name The name to group/prefix the routes with. - * @param array ...$params - * - * @return void - */ - public function group(string $name, ...$params) - { - $oldGroup = $this->group; - $oldOptions = $this->currentOptions; - - // To register a route, we'll set a flag so that our router - // so it will see the group name. - $this->group = ltrim($oldGroup . '/' . $name, '/'); - - $callback = array_pop($params); - - if ($params && is_array($params[0])) - { - $this->currentOptions = array_shift($params); - } - - if (is_callable($callback)) - { - $callback($this); - } - - $this->group = $oldGroup; - $this->currentOptions = $oldOptions; - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // HTTP Verb-based routing - //-------------------------------------------------------------------- - // Routing works here because, as the routes Config file is read in, - // the various HTTP verb-based routes will only be added to the in-memory - // routes if it is a call that should respond to that verb. - // - // The options array is typically used to pass in an 'as' or var, but may - // be expanded in the future. See the docblock for 'add' method above for - // current list of globally available options. - // - - /** - * Creates a collections of HTTP-verb based routes for a controller. - * - * Possible Options: - * 'controller' - Customize the name of the controller used in the 'to' route - * 'placeholder' - The regex used by the Router. Defaults to '(:any)' - * 'websafe' - - '1' if only GET and POST HTTP verbs are supported - * - * Example: - * - * $route->resource('photos'); - * - * // Generates the following routes: - * HTTP Verb | Path | Action | Used for... - * ----------+-------------+---------------+----------------- - * GET /photos index an array of photo objects - * GET /photos/new new an empty photo object, with default properties - * GET /photos/{id}/edit edit a specific photo object, editable properties - * GET /photos/{id} show a specific photo object, all properties - * POST /photos create a new photo object, to add to the resource - * DELETE /photos/{id} delete deletes the specified photo object - * PUT/PATCH /photos/{id} update replacement properties for existing photo - * - * If 'websafe' option is present, the following paths are also available: - * - * POST /photos/{id}/delete delete - * POST /photos/{id} update - * - * @param string $name The name of the resource/controller to route to. - * @param array|null $options An list of possible ways to customize the routing. - * - * @return RouteCollectionInterface - */ - public function resource(string $name, array $options = null): RouteCollectionInterface - { - // In order to allow customization of the route the - // resources are sent to, we need to have a new name - // to store the values in. - $new_name = ucfirst($name); - - // If a new controller is specified, then we replace the - // $name value with the name of the new controller. - if (isset($options['controller'])) - { - $new_name = ucfirst(filter_var($options['controller'], FILTER_SANITIZE_STRING)); - } - - // In order to allow customization of allowed id values - // we need someplace to store them. - $id = $this->placeholders[$this->defaultPlaceholder] ?? '(:segment)'; - - if (isset($options['placeholder'])) - { - $id = $options['placeholder']; - } - - // Make sure we capture back-references - $id = '(' . trim($id, '()') . ')'; - - $methods = isset($options['only']) ? (is_string($options['only']) ? explode(',', $options['only']) : $options['only']) : ['index', 'show', 'create', 'update', 'delete', 'new', 'edit']; - - if (isset($options['except'])) - { - $options['except'] = is_array($options['except']) ? $options['except'] : explode(',', $options['except']); - foreach ($methods as $i => $method) - { - if (in_array($method, $options['except'])) - { - unset($methods[$i]); - } - } - } - - if (in_array('index', $methods)) - { - $this->get($name, $new_name . '::index', $options); - } - if (in_array('new', $methods)) - { - $this->get($name . '/new', $new_name . '::new', $options); - } - if (in_array('edit', $methods)) - { - $this->get($name . '/' . $id . '/edit', $new_name . '::edit/$1', $options); - } - if (in_array('show', $methods)) - { - $this->get($name . '/' . $id, $new_name . '::show/$1', $options); - } - if (in_array('create', $methods)) - { - $this->post($name, $new_name . '::create', $options); - } - if (in_array('update', $methods)) - { - $this->put($name . '/' . $id, $new_name . '::update/$1', $options); - $this->patch($name . '/' . $id, $new_name . '::update/$1', $options); - } - if (in_array('delete', $methods)) - { - $this->delete($name . '/' . $id, $new_name . '::delete/$1', $options); - } - - // Web Safe? delete needs checking before update because of method name - if (isset($options['websafe'])) - { - if (in_array('delete', $methods)) - { - $this->post($name . '/' . $id . '/delete', $new_name . '::delete/$1', $options); - } - if (in_array('update', $methods)) - { - $this->post($name . '/' . $id, $new_name . '::update/$1', $options); - } - } - - return $this; - } - - /** - * Creates a collections of HTTP-verb based routes for a presenter controller. - * - * Possible Options: - * 'controller' - Customize the name of the controller used in the 'to' route - * 'placeholder' - The regex used by the Router. Defaults to '(:any)' - * - * Example: - * - * $route->presenter('photos'); - * - * // Generates the following routes: - * HTTP Verb | Path | Action | Used for... - * ----------+-------------+---------------+----------------- - * GET /photos index showing all array of photo objects - * GET /photos/show/{id} show showing a specific photo object, all properties - * GET /photos/new new showing a form for an empty photo object, with default properties - * POST /photos/create create processing the form for a new photo - * GET /photos/edit/{id} edit show an editing form for a specific photo object, editable properties - * POST /photos/update/{id} update process the editing form data - * GET /photos/remove/{id} remove show a form to confirm deletion of a specific photo object - * POST /photos/delete/{id} delete deleting the specified photo object - * - * @param string $name The name of the controller to route to. - * @param array|null $options An list of possible ways to customize the routing. - * - * @return RouteCollectionInterface - */ - public function presenter(string $name, array $options = null): RouteCollectionInterface - { - // In order to allow customization of the route the - // resources are sent to, we need to have a new name - // to store the values in. - $newName = ucfirst($name); - - // If a new controller is specified, then we replace the - // $name value with the name of the new controller. - if (isset($options['controller'])) - { - $newName = ucfirst(filter_var($options['controller'], FILTER_SANITIZE_STRING)); - } - - // In order to allow customization of allowed id values - // we need someplace to store them. - $id = $this->placeholders[$this->defaultPlaceholder] ?? '(:segment)'; - - if (isset($options['placeholder'])) - { - $id = $options['placeholder']; - } - - // Make sure we capture back-references - $id = '(' . trim($id, '()') . ')'; - - $methods = isset($options['only']) ? (is_string($options['only']) ? explode(',', $options['only']) : $options['only']) : ['index', 'show', 'new', 'create', 'edit', 'update', 'remove', 'delete']; - - if (isset($options['except'])) - { - $options['except'] = is_array($options['except']) ? $options['except'] : explode(',', $options['except']); - foreach ($methods as $i => $method) - { - if (in_array($method, $options['except'])) - { - unset($methods[$i]); - } - } - } - - if (in_array('index', $methods)) - { - $this->get($name, $newName . '::index', $options); - } - if (in_array('show', $methods)) - { - $this->get($name . '/show/' . $id, $newName . '::show/$1', $options); - } - if (in_array('new', $methods)) - { - $this->get($name . '/new', $newName . '::new', $options); - } - if (in_array('create', $methods)) - { - $this->post($name . '/create', $newName . '::create', $options); - } - if (in_array('edit', $methods)) - { - $this->get($name . '/edit/' . $id, $newName . '::edit/$1', $options); - } - if (in_array('update', $methods)) - { - $this->post($name . '/update/' . $id, $newName . '::update/$1', $options); - } - if (in_array('remove', $methods)) - { - $this->get($name . '/remove/' . $id, $newName . '::remove/$1', $options); - } - if (in_array('delete', $methods)) - { - $this->post($name . '/delete/' . $id, $newName . '::delete/$1', $options); - } - if (in_array('show', $methods)) - { - $this->get($name . '/' . $id, $newName . '::show/$1', $options); - } - if (in_array('create', $methods)) - { - $this->post($name, $newName . '::create', $options); - } - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a single route to match for multiple HTTP Verbs. - * - * Example: - * $route->match( ['get', 'post'], 'users/(:num)', 'users/$1); - * - * @param array $verbs - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function match(array $verbs = [], string $from, $to, array $options = null): RouteCollectionInterface - { - foreach ($verbs as $verb) - { - $verb = strtolower($verb); - - $this->{$verb}($from, $to, $options); - } - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to GET requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function get(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('get', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to POST requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function post(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('post', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to PUT requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function put(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('put', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to DELETE requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function delete(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('delete', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to HEAD requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function head(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('head', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to PATCH requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function patch(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('patch', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to OPTIONS requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function options(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('options', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Specifies a route that is only available to command-line requests. - * - * @param string $from - * @param string|array $to - * @param array|null $options - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function cli(string $from, $to, array $options = null): RouteCollectionInterface - { - $this->create('cli', $from, $to, $options); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Limits the routes to a specified ENVIRONMENT or they won't run. - * - * @param string $env - * @param \Closure $callback - * - * @return \CodeIgniter\Router\RouteCollectionInterface - */ - public function environment(string $env, \Closure $callback): RouteCollectionInterface - { - if (ENVIRONMENT === $env) - { - $callback($this); - } - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Attempts to look up a route based on its destination. - * - * If a route exists: - * - * 'path/(:any)/(:any)' => 'Controller::method/$1/$2' - * - * This method allows you to know the Controller and method - * and get the route that leads to it. - * - * // Equals 'path/$param1/$param2' - * reverseRoute('Controller::method', $param1, $param2); - * - * @param string $search - * @param array ...$params - * - * @return string|false - */ - public function reverseRoute(string $search, ...$params) - { - // Named routes get higher priority. - foreach ($this->routes as $collection) - { - if (array_key_exists($search, $collection)) - { - $route = $this->fillRouteParams(key($collection[$search]['route']), $params); - return $this->localizeRoute($route); - } - } - - // If it's not a named route, then loop over - // all routes to find a match. - foreach ($this->routes as $collection) - { - foreach ($collection as $route) - { - $from = key($route['route']); - $to = $route['route'][$from]; - - // ignore closures - if (! is_string($to)) - { - continue; - } - - // Lose any namespace slash at beginning of strings - // to ensure more consistent match. - $to = ltrim($to, '\\'); - $search = ltrim($search, '\\'); - - // If there's any chance of a match, then it will - // be with $search at the beginning of the $to string. - if (strpos($to, $search) !== 0) - { - continue; - } - - // Ensure that the number of $params given here - // matches the number of back-references in the route - if (substr_count($to, '$') !== count($params)) - { - continue; - } - - $route = $this->fillRouteParams($from, $params); - return $this->localizeRoute($route); - } - } - - // If we're still here, then we did not find a match. - return false; - } - - //-------------------------------------------------------------------- - - /** - * Replaces the {locale} tag with the current application locale - * - * @param string $route - * - * @return string - */ - protected function localizeRoute(string $route) :string - { - return strtr($route, ['{locale}' => Services::request()->getLocale()]); - } - - //-------------------------------------------------------------------- - - /** - * Checks a route (using the "from") to see if it's filtered or not. - * - * @param string $search - * - * @return boolean - */ - public function isFiltered(string $search): bool - { - return isset($this->routesOptions[$search]['filter']); - } - - //-------------------------------------------------------------------- - - /** - * Returns the filter that should be applied for a single route, along - * with any parameters it might have. Parameters are found by splitting - * the parameter name on a colon to separate the filter name from the parameter list, - * and the splitting the result on commas. So: - * - * 'role:admin,manager' - * - * has a filter of "role", with parameters of ['admin', 'manager']. - * - * @param string $search - * - * @return string - */ - public function getFilterForRoute(string $search): string - { - if (! $this->isFiltered($search)) - { - return ''; - } - - return $this->routesOptions[$search]['filter']; - } - - //-------------------------------------------------------------------- - - /** - * Given a - * - * @param string $from - * @param array|null $params - * - * @return string - * @throws \CodeIgniter\Router\Exceptions\RouterException - */ - protected function fillRouteParams(string $from, array $params = null): string - { - // Find all of our back-references in the original route - preg_match_all('/\(([^)]+)\)/', $from, $matches); - - if (empty($matches[0])) - { - return '/' . ltrim($from, '/'); - } - - // Build our resulting string, inserting the $params in - // the appropriate places. - foreach ($matches[0] as $index => $pattern) - { - // Ensure that the param we're inserting matches - // the expected param type. - $pos = strpos($from, $pattern); - - if (preg_match('#^' . $pattern . '$#u', $params[$index])) - { - $from = substr_replace($from, $params[$index], $pos, strlen($pattern)); - } - else - { - throw RouterException::forInvalidParameterType(); - } - } - - return '/' . ltrim($from, '/'); - } - - //-------------------------------------------------------------------- - - /** - * Does the heavy lifting of creating an actual route. You must specify - * the request method(s) that this route will work for. They can be separated - * by a pipe character "|" if there is more than one. - * - * @param string $verb - * @param string $from - * @param string|array $to - * @param array|null $options - */ - protected function create(string $verb, string $from, $to, array $options = null) - { - $overwrite = false; - $prefix = is_null($this->group) ? '' : $this->group . '/'; - - $from = filter_var($prefix . $from, FILTER_SANITIZE_STRING); - - // While we want to add a route within a group of '/', - // it doesn't work with matching, so remove them... - if ($from !== '/') - { - $from = trim($from, '/'); - } - - $options = array_merge((array) $this->currentOptions, (array) $options); - - // Hostname limiting? - if (! empty($options['hostname'])) - { - // @todo determine if there's a way to whitelist hosts? - if (isset($_SERVER['HTTP_HOST']) && strtolower($_SERVER['HTTP_HOST']) !== strtolower($options['hostname'])) - { - return; - } - - $overwrite = true; - } - - // Limiting to subdomains? - else if (! empty($options['subdomain'])) - { - // If we don't match the current subdomain, then - // we don't need to add the route. - if (! $this->checkSubdomains($options['subdomain'])) - { - return; - } - - $overwrite = true; - } - - // Are we offsetting the binds? - // If so, take care of them here in one - // fell swoop. - if (isset($options['offset']) && is_string($to)) - { - // Get a constant string to work with. - $to = preg_replace('/(\$\d+)/', '$X', $to); - - for ($i = (int) $options['offset'] + 1; $i < (int) $options['offset'] + 7; $i ++) - { - $to = preg_replace_callback( - '/\$X/', function ($m) use ($i) { - return '$' . $i; - }, $to, 1 - ); - } - } - - // Replace our regex pattern placeholders with the actual thing - // so that the Router doesn't need to know about any of this. - foreach ($this->placeholders as $tag => $pattern) - { - $from = str_ireplace(':' . $tag, $pattern, $from); - } - - //If is redirect, No processing - if (! isset($options['redirect'])) - { - // If no namespace found, add the default namespace - if (is_string($to) && (strpos($to, '\\') === false || strpos($to, '\\') > 0)) - { - $namespace = $options['namespace'] ?? $this->defaultNamespace; - $to = trim($namespace, '\\') . '\\' . $to; - } - - // Always ensure that we escape our namespace so we're not pointing to - // \CodeIgniter\Routes\Controller::method. - if (is_string($to)) - { - $to = '\\' . ltrim($to, '\\'); - } - } - - $name = $options['as'] ?? $from; - - // Don't overwrite any existing 'froms' so that auto-discovered routes - // do not overwrite any app/Config/Routes settings. The app - // routes should always be the "source of truth". - // this works only because discovered routes are added just prior - // to attempting to route the request. - if (isset($this->routes[$verb][$name]) && ! $overwrite) - { - return; - } - - $this->routes[$verb][$name] = [ - 'route' => [$from => $to], - ]; - - $this->routesOptions[$from] = $options; - - // Is this a redirect? - if (isset($options['redirect']) && is_numeric($options['redirect'])) - { - $this->routes['*'][$name]['redirect'] = $options['redirect']; - } - } - - //-------------------------------------------------------------------- - - /** - * Compares the subdomain(s) passed in against the current subdomain - * on this page request. - * - * @param mixed $subdomains - * - * @return boolean - */ - private function checkSubdomains($subdomains): bool - { - // CLI calls can't be on subdomain. - if (! isset($_SERVER['HTTP_HOST'])) - { - return false; - } - - if (is_null($this->currentSubdomain)) - { - $this->currentSubdomain = $this->determineCurrentSubdomain(); - } - - if (! is_array($subdomains)) - { - $subdomains = [$subdomains]; - } - - // Routes can be limited to any sub-domain. In that case, though, - // it does require a sub-domain to be present. - if (! empty($this->currentSubdomain) && in_array('*', $subdomains)) - { - return true; - } - - return in_array($this->currentSubdomain, $subdomains, true); - } - - //-------------------------------------------------------------------- - - /** - * Examines the HTTP_HOST to get a best match for the subdomain. It - * won't be perfect, but should work for our needs. - * - * It's especially not perfect since it's possible to register a domain - * with a period (.) as part of the domain name. - * - * @return mixed - */ - private function determineCurrentSubdomain() - { - // We have to ensure that a scheme exists - // on the URL else parse_url will mis-interpret - // 'host' as the 'path'. - $url = $_SERVER['HTTP_HOST']; - if (strpos($url, 'http') !== 0) - { - $url = 'http://' . $url; - } - - $parsedUrl = parse_url($url); - - $host = explode('.', $parsedUrl['host']); - - if ($host[0] === 'www') - { - unset($host[0]); - } - - // Get rid of any domains, which will be the last - unset($host[count($host)]); - - // Account for .co.uk, .co.nz, etc. domains - if (end($host) === 'co') - { - $host = array_slice($host, 0, -1); - } - - // If we only have 1 part left, then we don't have a sub-domain. - if (count($host) === 1) - { - // Set it to false so we don't make it back here again. - return false; - } - - return array_shift($host); - } - - //-------------------------------------------------------------------- - - /** - * Reset the routes, so that a FeatureTestCase can provide the - * explicit ones needed for it. - */ - public function resetRoutes() - { - $this->routes = ['*' => []]; - foreach ($this->defaultHTTPMethods as $verb) - { - $this->routes[$verb] = []; - } - } - -} diff --git a/system/Router/RouteCollectionInterface.php b/system/Router/RouteCollectionInterface.php deleted file mode 100644 index b25e93db..00000000 --- a/system/Router/RouteCollectionInterface.php +++ /dev/null @@ -1,276 +0,0 @@ - 'Controller::method/$1/$2' - * - * This method allows you to know the Controller and method - * and get the route that leads to it. - * - * // Equals 'path/$param1/$param2' - * reverseRoute('Controller::method', $param1, $param2); - * - * @param string $search - * @param array ...$params - * - * @return string|false - */ - public function reverseRoute(string $search, ...$params); - - //-------------------------------------------------------------------- - - /** - * Determines if the route is a redirecting route. - * - * @param string $from - * - * @return boolean - */ - public function isRedirect(string $from): bool; - - //-------------------------------------------------------------------- - - /** - * Grabs the HTTP status code from a redirecting Route. - * - * @param string $from - * - * @return integer - */ - public function getRedirectCode(string $from): int; - - //-------------------------------------------------------------------- -} diff --git a/system/Router/Router.php b/system/Router/Router.php deleted file mode 100644 index 3ef91505..00000000 --- a/system/Router/Router.php +++ /dev/null @@ -1,725 +0,0 @@ -collection = $routes; - - $this->controller = $this->collection->getDefaultController(); - $this->method = $this->collection->getDefaultMethod(); - - $this->collection->setHTTPVerb($request->getMethod() ?? strtolower($_SERVER['REQUEST_METHOD'])); - } - - //-------------------------------------------------------------------- - - /** - * @param string|null $uri - * - * @return mixed|string - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \CodeIgniter\Exceptions\PageNotFoundException - */ - public function handle(string $uri = null) - { - $this->translateURIDashes = $this->collection->shouldTranslateURIDashes(); - - // If we cannot find a URI to match against, then - // everything runs off of it's default settings. - if ($uri === null || $uri === '') - { - return strpos($this->controller, '\\') === false - ? $this->collection->getDefaultNamespace() . $this->controller - : $this->controller; - } - - // Decode URL-encoded string - $uri = urldecode($uri); - - if ($this->checkRoutes($uri)) - { - if ($this->collection->isFiltered($this->matchedRoute[0])) - { - $this->filterInfo = $this->collection->getFilterForRoute($this->matchedRoute[0]); - } - - return $this->controller; - } - - // Still here? Then we can try to match the URI against - // Controllers/directories, but the application may not - // want this, like in the case of API's. - if (! $this->collection->shouldAutoRoute()) - { - throw new PageNotFoundException("Can't find a route for '{$uri}'."); - } - - $this->autoRoute($uri); - - return $this->controllerName(); - } - - //-------------------------------------------------------------------- - - /** - * Returns the filter info for the matched route, if any. - * - * @return string - */ - public function getFilter() - { - return $this->filterInfo; - } - - //-------------------------------------------------------------------- - - /** - * Returns the name of the matched controller. - * - * @return mixed - */ - public function controllerName() - { - return $this->translateURIDashes - ? str_replace('-', '_', $this->controller) - : $this->controller; - } - - //-------------------------------------------------------------------- - - /** - * Returns the name of the method to run in the - * chosen container. - * - * @return mixed - */ - public function methodName(): string - { - return $this->translateURIDashes - ? str_replace('-', '_', $this->method) - : $this->method; - } - - //-------------------------------------------------------------------- - - /** - * Returns the 404 Override settings from the Collection. - * If the override is a string, will split to controller/index array. - */ - public function get404Override() - { - $route = $this->collection->get404Override(); - - if (is_string($route)) - { - $routeArray = explode('::', $route); - - return [ - $routeArray[0], // Controller - $routeArray[1] ?? 'index', // Method - ]; - } - - if (is_callable($route)) - { - return $route; - } - - return null; - } - - //-------------------------------------------------------------------- - - /** - * Returns the binds that have been matched and collected - * during the parsing process as an array, ready to send to - * instance->method(...$params). - * - * @return mixed - */ - public function params(): array - { - return $this->params; - } - - //-------------------------------------------------------------------- - - /** - * Returns the name of the sub-directory the controller is in, - * if any. Relative to APPPATH.'Controllers'. - * - * Only used when auto-routing is turned on. - * - * @return string - */ - public function directory(): string - { - return ! empty($this->directory) ? $this->directory : ''; - } - - //-------------------------------------------------------------------- - - /** - * Returns the routing information that was matched for this - * request, if a route was defined. - * - * @return array|null - */ - public function getMatchedRoute() - { - return $this->matchedRoute; - } - - //-------------------------------------------------------------------- - - /** - * Returns all options set for the matched route - * - * @return array|null - */ - public function getMatchedRouteOptions() - { - return $this->matchedRouteOptions; - } - - //-------------------------------------------------------------------- - - /** - * Sets the value that should be used to match the index.php file. Defaults - * to index.php but this allows you to modify it in case your are using - * something like mod_rewrite to remove the page. This allows you to set - * it a blank. - * - * @param $page - * - * @return mixed - */ - public function setIndexPage($page): self - { - $this->indexPage = $page; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Tells the system whether we should translate URI dashes or not - * in the URI from a dash to an underscore. - * - * @param boolean|false $val - * - * @return $this - */ - public function setTranslateURIDashes(bool $val = false): self - { - $this->translateURIDashes = $val; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns true/false based on whether the current route contained - * a {locale} placeholder. - * - * @return boolean - */ - public function hasLocale() - { - return (bool) $this->detectedLocale; - } - - //-------------------------------------------------------------------- - - /** - * Returns the detected locale, if any, or null. - * - * @return string - */ - public function getLocale() - { - return $this->detectedLocale; - } - - //-------------------------------------------------------------------- - - /** - * Compares the uri string against the routes that the - * RouteCollection class defined for us, attempting to find a match. - * This method will modify $this->controller, etal as needed. - * - * @param string $uri The URI path to compare against the routes - * - * @return boolean Whether the route was matched or not. - * @throws \CodeIgniter\Router\Exceptions\RedirectException - */ - protected function checkRoutes(string $uri): bool - { - $routes = $this->collection->getRoutes($this->collection->getHTTPVerb()); - - $uri = $uri === '/' - ? $uri - : ltrim($uri, '/ '); - - // Don't waste any time - if (empty($routes)) - { - return false; - } - - // Loop through the route array looking for wildcards - foreach ($routes as $key => $val) - { - $key = $key === '/' - ? $key - : ltrim($key, '/ '); - - $matchedKey = $key; - - // Are we dealing with a locale? - if (strpos($key, '{locale}') !== false) - { - $localeSegment = array_search('{locale}', preg_split('/[\/]*((^[a-zA-Z0-9])|\(([^()]*)\))*[\/]+/m', $key)); - - // Replace it with a regex so it - // will actually match. - $key = str_replace('/', '\/', $key); - $key = str_replace('{locale}', '[^\/]+', $key); - } - - // Does the RegEx match? - if (preg_match('#^' . $key . '$#u', $uri, $matches)) - { - // Is this route supposed to redirect to another? - if ($this->collection->isRedirect($key)) - { - throw new RedirectException(is_array($val) ? key($val) : $val, $this->collection->getRedirectCode($key)); - } - // Store our locale so CodeIgniter object can - // assign it to the Request. - if (isset($localeSegment)) - { - // The following may be inefficient, but doesn't upset NetBeans :-/ - $temp = (explode('/', $uri)); - $this->detectedLocale = $temp[$localeSegment]; - unset($localeSegment); - } - - // Are we using Closures? If so, then we need - // to collect the params into an array - // so it can be passed to the controller method later. - if (! is_string($val) && is_callable($val)) - { - $this->controller = $val; - - // Remove the original string from the matches array - array_shift($matches); - - $this->params = $matches; - - $this->matchedRoute = [ - $matchedKey, - $val, - ]; - - $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey); - - return true; - } - // Are we using the default method for back-references? - - // Support resource route when function with subdirectory - // ex: $routes->resource('Admin/Admins'); - if (strpos($val, '$') !== false && strpos($key, '(') !== false && strpos($key, '/') !== false) - { - $replacekey = str_replace('/(.*)', '', $key); - $val = preg_replace('#^' . $key . '$#u', $val, $uri); - $val = str_replace($replacekey, str_replace('/', '\\', $replacekey), $val); - } - elseif (strpos($val, '$') !== false && strpos($key, '(') !== false) - { - $val = preg_replace('#^' . $key . '$#u', $val, $uri); - } - elseif (strpos($val, '/') !== false) - { - [ - $controller, - $method, - ] = explode( '::', $val ); - - // Only replace slashes in the controller, not in the method. - $controller = str_replace('/', '\\', $controller); - - $val = $controller . '::' . $method; - } - - $this->setRequest(explode('/', $val)); - - $this->matchedRoute = [ - $matchedKey, - $val, - ]; - - $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey); - - return true; - } - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Attempts to match a URI path against Controllers and directories - * found in APPPATH/Controllers, to find a matching route. - * - * @param string $uri - */ - public function autoRoute(string $uri) - { - $segments = explode('/', $uri); - - $segments = $this->validateRequest($segments); - - // If we don't have any segments left - try the default controller; - // WARNING: Directories get shifted out of the segments array. - if (empty($segments)) - { - $this->setDefaultController(); - } - // If not empty, then the first segment should be the controller - else - { - $this->controller = ucfirst(array_shift($segments)); - } - - // Use the method name if it exists. - // If it doesn't, no biggie - the default method name - // has already been set. - if (! empty($segments)) - { - $this->method = array_shift($segments) ?: $this->method; - } - - if (! empty($segments)) - { - $this->params = $segments; - } - - $defaultNamespace = $this->collection->getDefaultNamespace(); - $controllerName = $this->controllerName(); - if ($this->collection->getHTTPVerb() !== 'cli') - { - $controller = '\\' . $defaultNamespace; - $controller .= $this->directory ? str_replace('/', '\\', $this->directory) : ''; - $controller .= $controllerName; - $controller = strtolower($controller); - $methodName = strtolower($this->methodName()); - - foreach ($this->collection->getRoutes('cli') as $route) - { - if (is_string($route)) - { - $route = strtolower($route); - if (strpos($route, $controller . '::' . $methodName) === 0) - { - throw new PageNotFoundException(); - } - - if ($route === $controller) - { - throw new PageNotFoundException(); - } - } - } - } - - // Load the file so that it's available for CodeIgniter. - $file = APPPATH . 'Controllers/' . $this->directory . $controllerName . '.php'; - if (is_file($file)) - { - include_once $file; - } - - // Ensure the controller stores the fully-qualified class name - // We have to check for a length over 1, since by default it will be '\' - if (strpos($this->controller, '\\') === false && strlen($defaultNamespace) > 1) - { - $this->controller = '\\' . ltrim(str_replace('/', '\\', $defaultNamespace . $this->directory . $controllerName), '\\'); - } - } - - //-------------------------------------------------------------------- - - /** - * Attempts to validate the URI request and determine the controller path. - * - * @param array $segments URI segments - * - * @return array URI segments - */ - protected function validateRequest(array $segments): array - { - $segments = array_filter($segments, function ($segment) { - return ! empty($segment) || ($segment !== '0' || $segment !== 0); - }); - $segments = array_values($segments); - - $c = count($segments); - $directory_override = isset($this->directory); - - // Loop through our segments and return as soon as a controller - // is found or when such a directory doesn't exist - while ($c-- > 0) - { - $test = $this->directory . ucfirst($this->translateURIDashes === true ? str_replace('-', '_', $segments[0]) : $segments[0]); - - if (! is_file(APPPATH . 'Controllers/' . $test . '.php') && $directory_override === false && is_dir(APPPATH . 'Controllers/' . $this->directory . ucfirst($segments[0]))) - { - $this->setDirectory(array_shift($segments), true); - continue; - } - - return $segments; - } - - // This means that all segments were actually directories - return $segments; - } - - //-------------------------------------------------------------------- - - /** - * Sets the sub-directory that the controller is in. - * - * @param string|null $dir - * @param boolean|false $append - */ - public function setDirectory(string $dir = null, bool $append = false) - { - if (empty($dir)) - { - $this->directory = null; - return; - } - - $dir = ucfirst($dir); - - if ($append !== true || empty($this->directory)) - { - $this->directory = str_replace('.', '', trim($dir, '/')) . '/'; - } - else - { - $this->directory .= str_replace('.', '', trim($dir, '/')) . '/'; - } - } - - //-------------------------------------------------------------------- - - /** - * Set request route - * - * Takes an array of URI segments as input and sets the class/method - * to be called. - * - * @param array $segments URI segments - */ - protected function setRequest(array $segments = []) - { - // If we don't have any segments - try the default controller; - if (empty($segments)) - { - $this->setDefaultController(); - - return; - } - - list($controller, $method) = array_pad(explode('::', $segments[0]), 2, null); - - $this->controller = $controller; - - // $this->method already contains the default method name, - // so don't overwrite it with emptiness. - if (! empty($method)) - { - $this->method = $method; - } - - array_shift($segments); - - $this->params = $segments; - } - - //-------------------------------------------------------------------- - - /** - * Sets the default controller based on the info set in the RouteCollection. - */ - protected function setDefaultController() - { - if (empty($this->controller)) - { - throw RouterException::forMissingDefaultRoute(); - } - - // Is the method being specified? - if (sscanf($this->controller, '%[^/]/%s', $class, $this->method) !== 2) - { - $this->method = 'index'; - } - - if (! is_file(APPPATH . 'Controllers/' . $this->directory . ucfirst($class) . '.php')) - { - return; - } - - $this->controller = ucfirst($class); - - log_message('info', 'Used the default controller.'); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Router/RouterInterface.php b/system/Router/RouterInterface.php deleted file mode 100644 index 46cb2853..00000000 --- a/system/Router/RouterInterface.php +++ /dev/null @@ -1,115 +0,0 @@ -method(...$params). - * - * @return mixed - */ - public function params(); - - //-------------------------------------------------------------------- - - /** - * Sets the value that should be used to match the index.php file. Defaults - * to index.php but this allows you to modify it in case your are using - * something like mod_rewrite to remove the page. This allows you to set - * it a blank. - * - * @param $page - * - * @return mixed - */ - public function setIndexPage($page); - - //-------------------------------------------------------------------- -} diff --git a/system/Security/Exceptions/SecurityException.php b/system/Security/Exceptions/SecurityException.php deleted file mode 100644 index dda6a9d5..00000000 --- a/system/Security/Exceptions/SecurityException.php +++ /dev/null @@ -1,12 +0,0 @@ -', - '<', - '>', - "'", - '"', - '&', - '$', - '#', - '{', - '}', - '[', - ']', - '=', - ';', - '?', - '%20', - '%22', - '%3c', // < - '%253c', // < - '%3e', // > - '%0e', // > - '%28', // ( - '%29', // ) - '%2528', // ( - '%26', // & - '%24', // $ - '%3f', // ? - '%3b', // ; - '%3d', // = - ]; - - //-------------------------------------------------------------------- - - /** - * Security constructor. - * - * Stores our configuration and fires off the init() method to - * setup initial state. - * - * @param \Config\App $config - * - * @throws \Exception - */ - public function __construct($config) - { - // Store our CSRF-related settings - $this->CSRFExpire = $config->CSRFExpire; - $this->CSRFTokenName = $config->CSRFTokenName; - $this->CSRFHeaderName = $config->CSRFHeaderName; - $this->CSRFCookieName = $config->CSRFCookieName; - $this->CSRFRegenerate = $config->CSRFRegenerate; - - if (isset($config->cookiePrefix)) - { - $this->CSRFCookieName = $config->cookiePrefix . $this->CSRFCookieName; - } - - // Store cookie-related settings - $this->cookiePath = $config->cookiePath; - $this->cookieDomain = $config->cookieDomain; - $this->cookieSecure = $config->cookieSecure; - - $this->CSRFSetHash(); - - unset($config); - } - - //-------------------------------------------------------------------- - - /** - * CSRF Verify - * - * @param RequestInterface $request - * - * @return $this|false - * @throws \Exception - */ - public function CSRFVerify(RequestInterface $request) - { - // If it's not a POST request we will set the CSRF cookie - if (strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST') - { - return $this->CSRFSetCookie($request); - } - - // Do the tokens exist in _POST, HEADER or optionally php:://input - json data - $CSRFTokenValue = $_POST[$this->CSRFTokenName] ?? - (! is_null($request->getHeader($this->CSRFHeaderName)) && ! empty($request->getHeader($this->CSRFHeaderName)->getValue()) ? - $request->getHeader($this->CSRFHeaderName)->getValue() : - (! empty($request->getBody()) && ! empty($json = json_decode($request->getBody())) && json_last_error() === JSON_ERROR_NONE ? - ($json->{$this->CSRFTokenName} ?? null) : - null)); - - // Do the tokens exist in both the _POST/POSTed JSON and _COOKIE arrays? - if (! isset($CSRFTokenValue, $_COOKIE[$this->CSRFCookieName]) || $CSRFTokenValue !== $_COOKIE[$this->CSRFCookieName] - ) // Do the tokens match? - { - throw SecurityException::forDisallowedAction(); - } - - // We kill this since we're done and we don't want to pollute the _POST array - if (isset($_POST[$this->CSRFTokenName])) - { - unset($_POST[$this->CSRFTokenName]); - $request->setGlobal('post', $_POST); - } - // We kill this since we're done and we don't want to pollute the JSON data - elseif (isset($json->{$this->CSRFTokenName})) - { - unset($json->{$this->CSRFTokenName}); - $request->setBody(json_encode($json)); - } - - // Regenerate on every submission? - if ($this->CSRFRegenerate) - { - // Nothing should last forever - $this->CSRFHash = null; - unset($_COOKIE[$this->CSRFCookieName]); - } - - $this->CSRFSetHash(); - $this->CSRFSetCookie($request); - - log_message('info', 'CSRF token verified'); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * CSRF Set Cookie - * - * @codeCoverageIgnore - * - * @param RequestInterface|\CodeIgniter\HTTP\IncomingRequest $request - * - * @return Security|false - */ - public function CSRFSetCookie(RequestInterface $request) - { - $expire = time() + $this->CSRFExpire; - $secure_cookie = (bool) $this->cookieSecure; - - if ($secure_cookie && ! $request->isSecure()) - { - return false; - } - - setcookie( - $this->CSRFCookieName, $this->CSRFHash, $expire, $this->cookiePath, $this->cookieDomain, $secure_cookie, true // Enforce HTTP only cookie for security - ); - - log_message('info', 'CSRF cookie sent'); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the current CSRF Hash. - * - * @return string - */ - public function getCSRFHash(): string - { - return $this->CSRFHash; - } - - //-------------------------------------------------------------------- - - /** - * Returns the CSRF Token Name. - * - * @return string - */ - public function getCSRFTokenName(): string - { - return $this->CSRFTokenName; - } - - //-------------------------------------------------------------------- - - /** - * Sets the CSRF Hash and cookie. - * - * @return string - * @throws \Exception - */ - protected function CSRFSetHash(): string - { - if ($this->CSRFHash === null) - { - // If the cookie exists we will use its value. - // We don't necessarily want to regenerate it with - // each page load since a page could contain embedded - // sub-pages causing this feature to fail - if (isset($_COOKIE[$this->CSRFCookieName]) && is_string($_COOKIE[$this->CSRFCookieName]) && preg_match('#^[0-9a-f]{32}$#iS', $_COOKIE[$this->CSRFCookieName]) === 1 - ) - { - return $this->CSRFHash = $_COOKIE[$this->CSRFCookieName]; - } - - $rand = random_bytes(16); - $this->CSRFHash = bin2hex($rand); - } - - return $this->CSRFHash; - } - - //-------------------------------------------------------------------- - - /** - * Sanitize Filename - * - * Tries to sanitize filenames in order to prevent directory traversal attempts - * and other security threats, which is particularly useful for files that - * were supplied via user input. - * - * If it is acceptable for the user input to include relative paths, - * e.g. file/in/some/approved/folder.txt, you can set the second optional - * parameter, $relative_path to TRUE. - * - * @param string $str Input file name - * @param boolean $relative_path Whether to preserve paths - * - * @return string - */ - public function sanitizeFilename(string $str, bool $relative_path = false): string - { - $bad = $this->filenameBadChars; - - if (! $relative_path) - { - $bad[] = './'; - $bad[] = '/'; - } - - $str = remove_invisible_characters($str, false); - - do - { - $old = $str; - $str = str_replace($bad, '', $str); - } - while ($old !== $str); - - return stripslashes($str); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Session/Exceptions/SessionException.php b/system/Session/Exceptions/SessionException.php deleted file mode 100644 index f4733c0e..00000000 --- a/system/Session/Exceptions/SessionException.php +++ /dev/null @@ -1,32 +0,0 @@ -cookiePrefix = $config->cookiePrefix; - $this->cookieDomain = $config->cookieDomain; - $this->cookiePath = $config->cookiePath; - $this->cookieSecure = $config->cookieSecure; - $this->cookieName = $config->sessionCookieName; - $this->matchIP = $config->sessionMatchIP; - $this->savePath = $config->sessionSavePath; - $this->ipAddress = $ipAddress; - } - - //-------------------------------------------------------------------- - - /** - * Internal method to force removal of a cookie by the client - * when session_destroy() is called. - * - * @return boolean - */ - protected function destroyCookie(): bool - { - return setcookie( - $this->cookieName, null, 1, $this->cookiePath, $this->cookieDomain, $this->cookieSecure, true - ); - } - - //-------------------------------------------------------------------- - - /** - * A dummy method allowing drivers with no locking functionality - * (databases other than PostgreSQL and MySQL) to act as if they - * do acquire a lock. - * - * @param string $sessionID - * - * @return boolean - */ - protected function lockSession(string $sessionID): bool - { - $this->lock = true; - return true; - } - - //-------------------------------------------------------------------- - - /** - * Releases the lock, if any. - * - * @return boolean - */ - protected function releaseLock(): bool - { - $this->lock = false; - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Fail - * - * Drivers other than the 'files' one don't (need to) use the - * session.save_path INI setting, but that leads to confusing - * error messages emitted by PHP when open() or write() fail, - * as the message contains session.save_path ... - * To work around the problem, the drivers will call this method - * so that the INI is set just in time for the error message to - * be properly generated. - * - * @return boolean - */ - protected function fail(): bool - { - ini_set('session.save_path', $this->savePath); - - return false; - } -} diff --git a/system/Session/Handlers/DatabaseHandler.php b/system/Session/Handlers/DatabaseHandler.php deleted file mode 100644 index 71ecbde5..00000000 --- a/system/Session/Handlers/DatabaseHandler.php +++ /dev/null @@ -1,430 +0,0 @@ -table = $config->sessionSavePath; - - if (empty($this->table)) - { - throw SessionException::forMissingDatabaseTable(); - } - - // Get DB Connection - $this->DBGroup = $config->sessionDBGroup ?? config(Database::class)->defaultGroup; - - $this->db = Database::connect($this->DBGroup); - - // Determine Database type - $driver = strtolower(get_class($this->db)); - if (strpos($driver, 'mysql') !== false) - { - $this->platform = 'mysql'; - } - elseif (strpos($driver, 'postgre') !== false) - { - $this->platform = 'postgre'; - } - } - - //-------------------------------------------------------------------- - - /** - * Open - * - * Ensures we have an initialized database connection. - * - * @param string $savePath Path to session files' directory - * @param string $name Session cookie name - * - * @return boolean - * @throws \Exception - */ - public function open($savePath, $name): bool - { - if (empty($this->db->connID)) - { - $this->db->initialize(); - } - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Read - * - * Reads session data and acquires a lock - * - * @param string $sessionID Session ID - * - * @return string Serialized session data - */ - public function read($sessionID): string - { - if ($this->lockSession($sessionID) === false) - { - $this->fingerprint = md5(''); - return ''; - } - - // Needed by write() to detect session_regenerate_id() calls - if (is_null($this->sessionID)) - { - $this->sessionID = $sessionID; - } - - $builder = $this->db->table($this->table) - ->select('data') - ->where('id', $sessionID); - - if ($this->matchIP) - { - $builder = $builder->where('ip_address', $this->ipAddress); - } - - $result = $builder->get()->getRow(); - - if ($result === null) - { - // PHP7 will reuse the same SessionHandler object after - // ID regeneration, so we need to explicitly set this to - // FALSE instead of relying on the default ... - $this->rowExists = false; - $this->fingerprint = md5(''); - - return ''; - } - - // PostgreSQL's variant of a BLOB datatype is Bytea, which is a - // PITA to work with, so we use base64-encoded data in a TEXT - // field instead. - if (is_bool($result)) - { - $result = ''; - } - else - { - $result = ($this->platform === 'postgre') ? base64_decode(rtrim($result->data)) : $result->data; - } - - $this->fingerprint = md5($result); - $this->rowExists = true; - - return $result; - } - - //-------------------------------------------------------------------- - - /** - * Write - * - * Writes (create / update) session data - * - * @param string $sessionID Session ID - * @param string $sessionData Serialized session data - * - * @return boolean - */ - public function write($sessionID, $sessionData): bool - { - if ($this->lock === false) - { - return $this->fail(); - } - - // Was the ID regenerated? - elseif ($sessionID !== $this->sessionID) - { - $this->rowExists = false; - $this->sessionID = $sessionID; - } - - if ($this->rowExists === false) - { - $insertData = [ - 'id' => $sessionID, - 'ip_address' => $this->ipAddress, - 'timestamp' => time(), - 'data' => $this->platform === 'postgre' ? base64_encode($sessionData) : $sessionData, - ]; - - if (! $this->db->table($this->table)->insert($insertData)) - { - return $this->fail(); - } - - $this->fingerprint = md5($sessionData); - $this->rowExists = true; - - return true; - } - - $builder = $this->db->table($this->table)->where('id', $sessionID); - - if ($this->matchIP) - { - $builder = $builder->where('ip_address', $this->ipAddress); - } - - $updateData = [ - 'timestamp' => time(), - ]; - - if ($this->fingerprint !== md5($sessionData)) - { - $updateData['data'] = ($this->platform === 'postgre') ? base64_encode($sessionData) : $sessionData; - } - - if (! $builder->update($updateData)) - { - return $this->fail(); - } - - $this->fingerprint = md5($sessionData); - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Close - * - * Releases locks and closes file descriptor. - * - * @return boolean - */ - public function close(): bool - { - return ($this->lock && ! $this->releaseLock()) ? $this->fail() : true; - } - - //-------------------------------------------------------------------- - - /** - * Destroy - * - * Destroys the current session. - * - * @param string $sessionID - * - * @return boolean - */ - public function destroy($sessionID): bool - { - if ($this->lock) - { - $builder = $this->db->table($this->table)->where('id', $sessionID); - - if ($this->matchIP) - { - $builder = $builder->where('ip_address', $this->ipAddress); - } - - if (! $builder->delete()) - { - return $this->fail(); - } - } - - if ($this->close()) - { - $this->destroyCookie(); - - return true; - } - - return $this->fail(); - } - - //-------------------------------------------------------------------- - - /** - * Garbage Collector - * - * Deletes expired sessions - * - * @param integer $maxlifetime Maximum lifetime of sessions - * - * @return boolean - */ - public function gc($maxlifetime): bool - { - return ($this->db->table($this->table)->delete('timestamp < ' . (time() - $maxlifetime))) ? true : $this->fail(); - } - - //-------------------------------------------------------------------- - - /** - * Lock the session. - * - * @param string $sessionID - * @return boolean - */ - protected function lockSession(string $sessionID): bool - { - if ($this->platform === 'mysql') - { - $arg = md5($sessionID . ($this->matchIP ? '_' . $this->ipAddress : '')); - if ($this->db->query("SELECT GET_LOCK('{$arg}', 300) AS ci_session_lock")->getRow()->ci_session_lock) - { - $this->lock = $arg; - return true; - } - - return $this->fail(); - } - elseif ($this->platform === 'postgre') - { - $arg = "hashtext('{$sessionID}')" . ($this->matchIP ? ", hashtext('{$this->ipAddress}')" : ''); - if ($this->db->simpleQuery("SELECT pg_advisory_lock({$arg})")) - { - $this->lock = $arg; - return true; - } - - return $this->fail(); - } - - // Unsupported DB? Let the parent handle the simplified version. - return parent::lockSession($sessionID); - } - - //-------------------------------------------------------------------- - - /** - * Releases the lock, if any. - * - * @return boolean - */ - protected function releaseLock(): bool - { - if (! $this->lock) - { - return true; - } - - if ($this->platform === 'mysql') - { - if ($this->db->query("SELECT RELEASE_LOCK('{$this->lock}') AS ci_session_lock")->getRow()->ci_session_lock) - { - $this->lock = false; - return true; - } - - return $this->fail(); - } - elseif ($this->platform === 'postgre') - { - if ($this->db->simpleQuery("SELECT pg_advisory_unlock({$this->lock})")) - { - $this->lock = false; - return true; - } - - return $this->fail(); - } - - // Unsupported DB? Let the parent handle the simple version. - return parent::releaseLock(); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Session/Handlers/FileHandler.php b/system/Session/Handlers/FileHandler.php deleted file mode 100644 index 19fc57f0..00000000 --- a/system/Session/Handlers/FileHandler.php +++ /dev/null @@ -1,422 +0,0 @@ -sessionSavePath)) - { - $this->savePath = rtrim($config->sessionSavePath, '/\\'); - ini_set('session.save_path', $config->sessionSavePath); - } - else - { - $sessionPath = rtrim(ini_get('session.save_path'), '/\\'); - - if (! $sessionPath) - { - $sessionPath = WRITEPATH . 'session'; - } - - $this->savePath = $sessionPath; - } - - $this->matchIP = $config->sessionMatchIP; - - $this->configureSessionIDRegex(); - } - - //-------------------------------------------------------------------- - - /** - * Open - * - * Sanitizes the save_path directory. - * - * @param string $savePath Path to session files' directory - * @param string $name Session cookie name - * - * @return boolean - * @throws \Exception - */ - public function open($savePath, $name): bool - { - if (! is_dir($savePath)) - { - if (! mkdir($savePath, 0700, true)) - { - throw SessionException::forInvalidSavePath($this->savePath); - } - } - elseif (! is_writable($savePath)) - { - throw SessionException::forWriteProtectedSavePath($this->savePath); - } - - $this->savePath = $savePath; - $this->filePath = $this->savePath . '/' - . $name // we'll use the session cookie name as a prefix to avoid collisions - . ($this->matchIP ? md5($this->ipAddress) : ''); - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Read - * - * Reads session data and acquires a lock - * - * @param string $sessionID Session ID - * - * @return string Serialized session data - */ - public function read($sessionID): string - { - // This might seem weird, but PHP 5.6 introduced session_reset(), - // which re-reads session data - if ($this->fileHandle === null) - { - $this->fileNew = ! is_file($this->filePath . $sessionID); - - if (($this->fileHandle = fopen($this->filePath . $sessionID, 'c+b')) === false) - { - $this->logger->error("Session: Unable to open file '" . $this->filePath . $sessionID . "'."); - - return false; - } - - if (flock($this->fileHandle, LOCK_EX) === false) - { - $this->logger->error("Session: Unable to obtain lock for file '" . $this->filePath . $sessionID . "'."); - fclose($this->fileHandle); - $this->fileHandle = null; - - return false; - } - - // Needed by write() to detect session_regenerate_id() calls - if (is_null($this->sessionID)) - { - $this->sessionID = $sessionID; - } - - if ($this->fileNew) - { - chmod($this->filePath . $sessionID, 0600); - $this->fingerprint = md5(''); - - return ''; - } - } - else - { - rewind($this->fileHandle); - } - - $session_data = ''; - clearstatcache(); // Address https://github.com/codeigniter4/CodeIgniter4/issues/2056 - for ($read = 0, $length = filesize($this->filePath . $sessionID); $read < $length; $read += strlen($buffer)) - { - if (($buffer = fread($this->fileHandle, $length - $read)) === false) - { - break; - } - - $session_data .= $buffer; - } - - $this->fingerprint = md5($session_data); - - return $session_data; - } - - //-------------------------------------------------------------------- - - /** - * Write - * - * Writes (create / update) session data - * - * @param string $sessionID Session ID - * @param string $sessionData Serialized session data - * - * @return boolean - */ - public function write($sessionID, $sessionData): bool - { - // If the two IDs don't match, we have a session_regenerate_id() call - if ($sessionID !== $this->sessionID) - { - $this->sessionID = $sessionID; - } - - if (! is_resource($this->fileHandle)) - { - return false; - } - elseif ($this->fingerprint === md5($sessionData)) - { - return ($this->fileNew) ? true : touch($this->filePath . $sessionID); - } - - if (! $this->fileNew) - { - ftruncate($this->fileHandle, 0); - rewind($this->fileHandle); - } - - if (($length = strlen($sessionData)) > 0) - { - for ($written = 0; $written < $length; $written += $result) - { - if (($result = fwrite($this->fileHandle, substr($sessionData, $written))) === false) - { - break; - } - } - - if (! is_int($result)) - { - $this->fingerprint = md5(substr($sessionData, 0, $written)); - $this->logger->error('Session: Unable to write data.'); - - return false; - } - } - - $this->fingerprint = md5($sessionData); - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Close - * - * Releases locks and closes file descriptor. - * - * @return boolean - */ - public function close(): bool - { - if (is_resource($this->fileHandle)) - { - flock($this->fileHandle, LOCK_UN); - fclose($this->fileHandle); - - $this->fileHandle = $this->fileNew = null; - - return true; - } - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Destroy - * - * Destroys the current session. - * - * @param string $session_id Session ID - * - * @return boolean - */ - public function destroy($session_id): bool - { - if ($this->close()) - { - return is_file($this->filePath . $session_id) - ? (unlink($this->filePath . $session_id) && $this->destroyCookie()) : true; - } - elseif ($this->filePath !== null) - { - clearstatcache(); - - return is_file($this->filePath . $session_id) - ? (unlink($this->filePath . $session_id) && $this->destroyCookie()) : true; - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Garbage Collector - * - * Deletes expired sessions - * - * @param integer $maxlifetime Maximum lifetime of sessions - * - * @return boolean - */ - public function gc($maxlifetime): bool - { - if (! is_dir($this->savePath) || ($directory = opendir($this->savePath)) === false) - { - $this->logger->debug("Session: Garbage collector couldn't list files under directory '" . $this->savePath . "'."); - - return false; - } - - $ts = time() - $maxlifetime; - - $pattern = $this->matchIP === true - ? '[0-9a-f]{32}' - : ''; - - $pattern = sprintf( - '#\A%s' . $pattern . $this->sessionIDRegex . '\z#', - preg_quote($this->cookieName) - ); - - while (($file = readdir($directory)) !== false) - { - // If the filename doesn't match this pattern, it's either not a session file or is not ours - if (! preg_match($pattern, $file) - || ! is_file($this->savePath . DIRECTORY_SEPARATOR . $file) - || ($mtime = filemtime($this->savePath . DIRECTORY_SEPARATOR . $file)) === false - || $mtime > $ts - ) - { - continue; - } - - unlink($this->savePath . DIRECTORY_SEPARATOR . $file); - } - - closedir($directory); - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Configure Session ID regular expression - */ - protected function configureSessionIDRegex() - { - $bitsPerCharacter = (int)ini_get('session.sid_bits_per_character'); - $SIDLength = (int)ini_get('session.sid_length'); - - if (($bits = $SIDLength * $bitsPerCharacter) < 160) - { - // Add as many more characters as necessary to reach at least 160 bits - $SIDLength += (int)ceil((160 % $bits) / $bitsPerCharacter); - ini_set('session.sid_length', $SIDLength); - } - - // Yes, 4,5,6 are the only known possible values as of 2016-10-27 - switch ($bitsPerCharacter) - { - case 4: - $this->sessionIDRegex = '[0-9a-f]'; - break; - case 5: - $this->sessionIDRegex = '[0-9a-v]'; - break; - case 6: - $this->sessionIDRegex = '[0-9a-zA-Z,-]'; - break; - } - - $this->sessionIDRegex .= '{' . $SIDLength . '}'; - } -} diff --git a/system/Session/Handlers/MemcachedHandler.php b/system/Session/Handlers/MemcachedHandler.php deleted file mode 100644 index f35405e4..00000000 --- a/system/Session/Handlers/MemcachedHandler.php +++ /dev/null @@ -1,405 +0,0 @@ -savePath)) - { - throw SessionException::forEmptySavepath(); - } - - if ($this->matchIP === true) - { - $this->keyPrefix .= $this->ipAddress . ':'; - } - - if (! empty($this->keyPrefix)) - { - ini_set('memcached.sess_prefix', $this->keyPrefix); - } - - $this->sessionExpiration = $config->sessionExpiration; - } - - //-------------------------------------------------------------------- - - /** - * Open - * - * Sanitizes save_path and initializes connections. - * - * @param string $save_path Server path(s) - * @param string $name Session cookie name, unused - * - * @return boolean - */ - public function open($save_path, $name): bool - { - $this->memcached = new \Memcached(); - $this->memcached->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); // required for touch() usage - - $server_list = []; - - foreach ($this->memcached->getServerList() as $server) - { - $server_list[] = $server['host'] . ':' . $server['port']; - } - - if (! preg_match_all('#,?([^,:]+)\:(\d{1,5})(?:\:(\d+))?#', $this->savePath, $matches, PREG_SET_ORDER) - ) - { - $this->memcached = null; - $this->logger->error('Session: Invalid Memcached save path format: ' . $this->savePath); - - return false; - } - - foreach ($matches as $match) - { - // If Memcached already has this server (or if the port is invalid), skip it - if (in_array($match[1] . ':' . $match[2], $server_list, true)) - { - $this->logger->debug('Session: Memcached server pool already has ' . $match[1] . ':' . $match[2]); - continue; - } - - if (! $this->memcached->addServer($match[1], $match[2], $match[3] ?? 0)) - { - $this->logger->error('Could not add ' . $match[1] . ':' . $match[2] . ' to Memcached server pool.'); - } - else - { - $server_list[] = $match[1] . ':' . $match[2]; - } - } - - if (empty($server_list)) - { - $this->logger->error('Session: Memcached server pool is empty.'); - - return false; - } - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Read - * - * Reads session data and acquires a lock - * - * @param string $sessionID Session ID - * - * @return string Serialized session data - */ - public function read($sessionID): string - { - if (isset($this->memcached) && $this->lockSession($sessionID)) - { - // Needed by write() to detect session_regenerate_id() calls - if (is_null($this->sessionID)) - { - $this->sessionID = $sessionID; - } - - $session_data = (string) $this->memcached->get($this->keyPrefix . $sessionID); - $this->fingerprint = md5($session_data); - - return $session_data; - } - - return ''; - } - - //-------------------------------------------------------------------- - - /** - * Write - * - * Writes (create / update) session data - * - * @param string $sessionID Session ID - * @param string $sessionData Serialized session data - * - * @return boolean - */ - public function write($sessionID, $sessionData): bool - { - if (! isset($this->memcached)) - { - return false; - } - // Was the ID regenerated? - elseif ($sessionID !== $this->sessionID) - { - if (! $this->releaseLock() || ! $this->lockSession($sessionID)) - { - return false; - } - - $this->fingerprint = md5(''); - $this->sessionID = $sessionID; - } - - if (isset($this->lockKey)) - { - $this->memcached->replace($this->lockKey, time(), 300); - - if ($this->fingerprint !== ($fingerprint = md5($sessionData))) - { - if ($this->memcached->set($this->keyPrefix . $sessionID, $sessionData, $this->sessionExpiration)) - { - $this->fingerprint = $fingerprint; - - return true; - } - - return false; - } - - return $this->memcached->touch($this->keyPrefix . $sessionID, $this->sessionExpiration); - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Close - * - * Releases locks and closes connection. - * - * @return boolean - */ - public function close(): bool - { - if (isset($this->memcached)) - { - isset($this->lockKey) && $this->memcached->delete($this->lockKey); - - if (! $this->memcached->quit()) - { - return false; - } - - $this->memcached = null; - - return true; - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Destroy - * - * Destroys the current session. - * - * @param string $session_id Session ID - * - * @return boolean - */ - public function destroy($session_id): bool - { - if (isset($this->memcached, $this->lockKey)) - { - $this->memcached->delete($this->keyPrefix . $session_id); - - return $this->destroyCookie(); - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Garbage Collector - * - * Deletes expired sessions - * - * @param integer $maxlifetime Maximum lifetime of sessions - * - * @return boolean - */ - public function gc($maxlifetime): bool - { - // Not necessary, Memcached takes care of that. - return true; - } - - //-------------------------------------------------------------------- - - /** - * Get lock - * - * Acquires an (emulated) lock. - * - * @param string $sessionID Session ID - * - * @return boolean - */ - protected function lockSession(string $sessionID): bool - { - if (isset($this->lockKey)) - { - return $this->memcached->replace($this->lockKey, time(), 300); - } - - // 30 attempts to obtain a lock, in case another request already has it - $lock_key = $this->keyPrefix . $sessionID . ':lock'; - $attempt = 0; - - do - { - if ($this->memcached->get($lock_key)) - { - sleep(1); - continue; - } - - if (! $this->memcached->set($lock_key, time(), 300)) - { - $this->logger->error('Session: Error while trying to obtain lock for ' . $this->keyPrefix . $sessionID); - - return false; - } - - $this->lockKey = $lock_key; - break; - } - while (++ $attempt < 30); - - if ($attempt === 30) - { - $this->logger->error('Session: Unable to obtain lock for ' . $this->keyPrefix . $sessionID . ' after 30 attempts, aborting.'); - - return false; - } - - $this->lock = true; - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Release lock - * - * Releases a previously acquired lock - * - * @return boolean - */ - protected function releaseLock(): bool - { - if (isset($this->memcached, $this->lockKey) && $this->lock) - { - if (! $this->memcached->delete($this->lockKey) && - $this->memcached->getResultCode() !== \Memcached::RES_NOTFOUND - ) - { - $this->logger->error('Session: Error while trying to free lock for ' . $this->lockKey); - - return false; - } - - $this->lockKey = null; - $this->lock = false; - } - - return true; - } - - //-------------------------------------------------------------------- -} diff --git a/system/Session/Handlers/RedisHandler.php b/system/Session/Handlers/RedisHandler.php deleted file mode 100644 index a6fcb338..00000000 --- a/system/Session/Handlers/RedisHandler.php +++ /dev/null @@ -1,424 +0,0 @@ -savePath)) - { - throw SessionException::forEmptySavepath(); - } - elseif (preg_match('#(?:tcp://)?([^:?]+)(?:\:(\d+))?(\?.+)?#', $this->savePath, $matches)) - { - isset($matches[3]) || $matches[3] = ''; // Just to avoid undefined index notices below - - $this->savePath = [ - 'host' => $matches[1], - 'port' => empty($matches[2]) ? null : $matches[2], - 'password' => preg_match('#auth=([^\s&]+)#', $matches[3], $match) ? $match[1] : null, - 'database' => preg_match('#database=(\d+)#', $matches[3], $match) ? (int) $match[1] : null, - 'timeout' => preg_match('#timeout=(\d+\.\d+)#', $matches[3], $match) ? (float) $match[1] : null, - ]; - - preg_match('#prefix=([^\s&]+)#', $matches[3], $match) && $this->keyPrefix = $match[1]; - } - else - { - throw SessionException::forInvalidSavePathFormat($this->savePath); - } - - if ($this->matchIP === true) - { - $this->keyPrefix .= $this->ipAddress . ':'; - } - - $this->sessionExpiration = empty($config->sessionExpiration) - ? (int) ini_get('session.gc_maxlifetime') - : (int) $config->sessionExpiration; - } - - //-------------------------------------------------------------------- - - /** - * Open - * - * Sanitizes save_path and initializes connection. - * - * @param string $save_path Server path - * @param string $name Session cookie name, unused - * @return boolean - */ - public function open($save_path, $name): bool - { - if (empty($this->savePath)) - { - return false; - } - - $redis = new \Redis(); - - if (! $redis->connect($this->savePath['host'], $this->savePath['port'], $this->savePath['timeout'])) - { - $this->logger->error('Session: Unable to connect to Redis with the configured settings.'); - } - elseif (isset($this->savePath['password']) && ! $redis->auth($this->savePath['password'])) - { - $this->logger->error('Session: Unable to authenticate to Redis instance.'); - } - elseif (isset($this->savePath['database']) && ! $redis->select($this->savePath['database'])) - { - $this->logger->error('Session: Unable to select Redis database with index ' . $this->savePath['database']); - } - else - { - $this->redis = $redis; - return true; - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Read - * - * Reads session data and acquires a lock - * - * @param string $sessionID Session ID - * - * @return string|false Serialized session data - */ - public function read($sessionID): string - { - if (isset($this->redis) && $this->lockSession($sessionID)) - { - // Needed by write() to detect session_regenerate_id() calls - if (is_null($this->sessionID)) - { - $this->sessionID = $sessionID; - } - - $session_data = $this->redis->get($this->keyPrefix . $sessionID); - is_string($session_data) ? $this->keyExists = true : $session_data = ''; - - $this->fingerprint = md5($session_data); - - return $session_data; - } - - return ''; - } - - //-------------------------------------------------------------------- - - /** - * Write - * - * Writes (create / update) session data - * - * @param string $sessionID Session ID - * @param string $sessionData Serialized session data - * - * @return boolean - */ - public function write($sessionID, $sessionData): bool - { - if (! isset($this->redis)) - { - return false; - } - // Was the ID regenerated? - elseif ($sessionID !== $this->sessionID) - { - if (! $this->releaseLock() || ! $this->lockSession($sessionID)) - { - return false; - } - - $this->keyExists = false; - $this->sessionID = $sessionID; - } - - if (isset($this->lockKey)) - { - $this->redis->expire($this->lockKey, 300); - - if ($this->fingerprint !== ($fingerprint = md5($sessionData)) || $this->keyExists === false) - { - if ($this->redis->set($this->keyPrefix . $sessionID, $sessionData, $this->sessionExpiration)) - { - $this->fingerprint = $fingerprint; - $this->keyExists = true; - return true; - } - - return false; - } - - return $this->redis->expire($this->keyPrefix . $sessionID, $this->sessionExpiration); - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Close - * - * Releases locks and closes connection. - * - * @return boolean - */ - public function close(): bool - { - if (isset($this->redis)) - { - try - { - $ping_reply = $this->redis->ping(); - if (($ping_reply === true) || ($ping_reply === '+PONG')) - { - isset($this->lockKey) && $this->redis->del($this->lockKey); - - if (! $this->redis->close()) - { - return false; - } - } - } - catch (\RedisException $e) - { - $this->logger->error('Session: Got RedisException on close(): ' . $e->getMessage()); - } - - $this->redis = null; - - return true; - } - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Destroy - * - * Destroys the current session. - * - * @param string $sessionID - * - * @return boolean - */ - public function destroy($sessionID): bool - { - if (isset($this->redis, $this->lockKey)) - { - if (($result = $this->redis->del($this->keyPrefix . $sessionID)) !== 1) - { - $this->logger->debug('Session: Redis::del() expected to return 1, got ' . var_export($result, true) . ' instead.'); - } - - return $this->destroyCookie(); - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Garbage Collector - * - * Deletes expired sessions - * - * @param integer $maxlifetime Maximum lifetime of sessions - * @return boolean - */ - public function gc($maxlifetime): bool - { - // Not necessary, Redis takes care of that. - return true; - } - - //-------------------------------------------------------------------- - - /** - * Get lock - * - * Acquires an (emulated) lock. - * - * @param string $sessionID Session ID - * - * @return boolean - */ - protected function lockSession(string $sessionID): bool - { - // PHP 7 reuses the SessionHandler object on regeneration, - // so we need to check here if the lock key is for the - // correct session ID. - if ($this->lockKey === $this->keyPrefix . $sessionID . ':lock') - { - return $this->redis->expire($this->lockKey, 300); - } - - // 30 attempts to obtain a lock, in case another request already has it - $lock_key = $this->keyPrefix . $sessionID . ':lock'; - $attempt = 0; - - do - { - if (($ttl = $this->redis->ttl($lock_key)) > 0) - { - sleep(1); - continue; - } - - if (! $this->redis->setex($lock_key, 300, time())) - { - $this->logger->error('Session: Error while trying to obtain lock for ' . $this->keyPrefix . $sessionID); - return false; - } - - $this->lockKey = $lock_key; - break; - } - while (++ $attempt < 30); - - if ($attempt === 30) - { - log_message('error', 'Session: Unable to obtain lock for ' . $this->keyPrefix . $sessionID . ' after 30 attempts, aborting.'); - return false; - } - elseif ($ttl === -1) - { - log_message('debug', 'Session: Lock for ' . $this->keyPrefix . $sessionID . ' had no TTL, overriding.'); - } - - $this->lock = true; - return true; - } - - //-------------------------------------------------------------------- - - /** - * Release lock - * - * Releases a previously acquired lock - * - * @return boolean - */ - protected function releaseLock(): bool - { - if (isset($this->redis, $this->lockKey) && $this->lock) - { - if (! $this->redis->del($this->lockKey)) - { - $this->logger->error('Session: Error while trying to free lock for ' . $this->lockKey); - return false; - } - - $this->lockKey = null; - $this->lock = false; - } - - return true; - } - - //-------------------------------------------------------------------- -} diff --git a/system/Session/Session.php b/system/Session/Session.php deleted file mode 100644 index d925bd7a..00000000 --- a/system/Session/Session.php +++ /dev/null @@ -1,1023 +0,0 @@ -driver = $driver; - - $this->sessionDriverName = $config->sessionDriver; - $this->sessionCookieName = $config->sessionCookieName; - $this->sessionExpiration = $config->sessionExpiration; - $this->sessionSavePath = $config->sessionSavePath; - $this->sessionMatchIP = $config->sessionMatchIP; - $this->sessionTimeToUpdate = $config->sessionTimeToUpdate; - $this->sessionRegenerateDestroy = $config->sessionRegenerateDestroy; - - $this->cookieDomain = $config->cookieDomain; - $this->cookiePath = $config->cookiePath; - $this->cookieSecure = $config->cookieSecure; - - helper('array'); - } - - //-------------------------------------------------------------------- - - /** - * Initialize the session container and starts up the session. - * - * @return mixed - */ - public function start() - { - if (is_cli() && ENVIRONMENT !== 'testing') - { - // @codeCoverageIgnoreStart - $this->logger->debug('Session: Initialization under CLI aborted.'); - - return; - // @codeCoverageIgnoreEnd - } - elseif ((bool) ini_get('session.auto_start')) - { - $this->logger->error('Session: session.auto_start is enabled in php.ini. Aborting.'); - - return; - } - elseif (session_status() === PHP_SESSION_ACTIVE) - { - $this->logger->warning('Session: Sessions is enabled, and one exists.Please don\'t $session->start();'); - - return; - } - - if (! $this->driver instanceof \SessionHandlerInterface) - { - $this->logger->error("Session: Handler '" . $this->driver . - "' doesn't implement SessionHandlerInterface. Aborting."); - } - - $this->configure(); - - $this->setSaveHandler(); - - // Sanitize the cookie, because apparently PHP doesn't do that for userspace handlers - if (isset($_COOKIE[$this->sessionCookieName]) && ( - ! is_string($_COOKIE[$this->sessionCookieName]) || ! preg_match('#\A' . $this->sidRegexp . '\z#', $_COOKIE[$this->sessionCookieName]) - ) - ) - { - unset($_COOKIE[$this->sessionCookieName]); - } - - $this->startSession(); - - // Is session ID auto-regeneration configured? (ignoring ajax requests) - if ((empty($_SERVER['HTTP_X_REQUESTED_WITH']) || - strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') && ($regenerate_time = $this->sessionTimeToUpdate) > 0 - ) - { - if (! isset($_SESSION['__ci_last_regenerate'])) - { - $_SESSION['__ci_last_regenerate'] = time(); - } - elseif ($_SESSION['__ci_last_regenerate'] < (time() - $regenerate_time)) - { - $this->regenerate((bool) $this->sessionRegenerateDestroy); - } - } - // Another work-around ... PHP doesn't seem to send the session cookie - // unless it is being currently created or regenerated - elseif (isset($_COOKIE[$this->sessionCookieName]) && $_COOKIE[$this->sessionCookieName] === session_id()) - { - $this->setCookie(); - } - - $this->initVars(); - - $this->logger->info("Session: Class initialized using '" . $this->sessionDriverName . "' driver."); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Does a full stop of the session: - * - * - destroys the session - * - unsets the session id - * - destroys the session cookie - */ - public function stop() - { - setcookie( - $this->sessionCookieName, session_id(), 1, $this->cookiePath, $this->cookieDomain, $this->cookieSecure, true - ); - - session_regenerate_id(true); - } - - //-------------------------------------------------------------------- - - /** - * Configuration. - * - * Handle input binds and configuration defaults. - */ - protected function configure() - { - if (empty($this->sessionCookieName)) - { - $this->sessionCookieName = ini_get('session.name'); - } - else - { - ini_set('session.name', $this->sessionCookieName); - } - - session_set_cookie_params( - $this->sessionExpiration, $this->cookiePath, $this->cookieDomain, $this->cookieSecure, true // HTTP only; Yes, this is intentional and not configurable for security reasons. - ); - - //if (empty($this->sessionExpiration)) - if (! isset($this->sessionExpiration)) - { - $this->sessionExpiration = (int) ini_get('session.gc_maxlifetime'); - } - else - { - ini_set('session.gc_maxlifetime', (int) $this->sessionExpiration); - } - - if (! empty($this->sessionSavePath)) - { - ini_set('session.save_path', $this->sessionSavePath); - } - - // Security is king - ini_set('session.use_trans_sid', 0); - ini_set('session.use_strict_mode', 1); - ini_set('session.use_cookies', 1); - ini_set('session.use_only_cookies', 1); - - $this->configureSidLength(); - } - - // ------------------------------------------------------------------------ - - /** - * Configure session ID length - * - * To make life easier, we used to force SHA-1 and 4 bits per - * character on everyone. And of course, someone was unhappy. - * - * Then PHP 7.1 broke backwards-compatibility because ext/session - * is such a mess that nobody wants to touch it with a pole stick, - * and the one guy who does, nobody has the energy to argue with. - * - * So we were forced to make changes, and OF COURSE something was - * going to break and now we have this pile of shit. -- Narf - * - * @return void - */ - protected function configureSidLength() - { - $bits_per_character = (int) (ini_get('session.sid_bits_per_character') !== false - ? ini_get('session.sid_bits_per_character') - : 4); - $sid_length = (int) (ini_get('session.sid_length') !== false - ? ini_get('session.sid_length') - : 40); - if (($sid_length * $bits_per_character) < 160) - { - $bits = ($sid_length * $bits_per_character); - // Add as many more characters as necessary to reach at least 160 bits - $sid_length += (int) ceil((160 % $bits) / $bits_per_character); - ini_set('session.sid_length', $sid_length); - } - - // Yes, 4,5,6 are the only known possible values as of 2016-10-27 - switch ($bits_per_character) - { - case 4: - $this->sidRegexp = '[0-9a-f]'; - break; - case 5: - $this->sidRegexp = '[0-9a-v]'; - break; - case 6: - $this->sidRegexp = '[0-9a-zA-Z,-]'; - break; - } - - $this->sidRegexp .= '{' . $sid_length . '}'; - } - - //-------------------------------------------------------------------- - - /** - * Handle temporary variables - * - * Clears old "flash" data, marks the new one for deletion and handles - * "temp" data deletion. - */ - protected function initVars() - { - if (empty($_SESSION['__ci_vars'])) - { - return; - } - - $current_time = time(); - - foreach ($_SESSION['__ci_vars'] as $key => &$value) - { - if ($value === 'new') - { - $_SESSION['__ci_vars'][$key] = 'old'; - } - // Hacky, but 'old' will (implicitly) always be less than time() ;) - // DO NOT move this above the 'new' check! - elseif ($value < $current_time) - { - unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]); - } - } - - if (empty($_SESSION['__ci_vars'])) - { - unset($_SESSION['__ci_vars']); - } - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Session Utility Methods - //-------------------------------------------------------------------- - - /** - * Regenerates the session ID. - * - * @param boolean $destroy Should old session data be destroyed? - */ - public function regenerate(bool $destroy = false) - { - $_SESSION['__ci_last_regenerate'] = time(); - session_regenerate_id($destroy); - } - - //-------------------------------------------------------------------- - - /** - * Destroys the current session. - */ - public function destroy() - { - session_destroy(); - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Basic Setters and Getters - //-------------------------------------------------------------------- - - /** - * Sets user data into the session. - * - * If $data is a string, then it is interpreted as a session property - * key, and $value is expected to be non-null. - * - * If $data is an array, it is expected to be an array of key/value pairs - * to be set as session properties. - * - * @param string|array $data Property name or associative array of properties - * @param string|array $value Property value if single key provided - */ - public function set($data, $value = null) - { - if (is_array($data)) - { - foreach ($data as $key => &$value) - { - if (is_int($key)) - { - $_SESSION[$value] = null; - } - else - { - $_SESSION[$key] = $value; - } - } - - return; - } - - $_SESSION[$data] = $value; - } - - //-------------------------------------------------------------------- - - /** - * Get user data that has been set in the session. - * - * If the property exists as "normal", returns it. - * Otherwise, returns an array of any temp or flash data values with the - * property key. - * - * Replaces the legacy method $session->userdata(); - * - * @param string $key Identifier of the session property to retrieve - * @return array|null The property value(s) - */ - public function get(string $key = null) - { - if (! empty($key) && (! is_null($value = isset($_SESSION[$key]) ? $_SESSION[$key] : null) || ! is_null($value = dot_array_search($key, $_SESSION ?? [])))) - { - return $value; - } - elseif (empty($_SESSION)) - { - return $key === null ? [] : null; - } - - if (! empty($key)) - { - return null; - } - - $userdata = []; - $_exclude = array_merge( - ['__ci_vars'], $this->getFlashKeys(), $this->getTempKeys() - ); - - $keys = array_keys($_SESSION); - foreach ($keys as $key) - { - if (! in_array($key, $_exclude, true)) - { - $userdata[$key] = $_SESSION[$key]; - } - } - - return $userdata; - } - - //-------------------------------------------------------------------- - - /** - * Returns whether an index exists in the session array. - * - * @param string $key Identifier of the session property we are interested in. - * - * @return boolean - */ - public function has(string $key): bool - { - return isset($_SESSION[$key]); - } - - //-------------------------------------------------------------------- - - /** - * Push new value onto session value that is array. - * - * @param string $key Identifier of the session property we are interested in. - * @param array $data value to be pushed to existing session key. - * - * @return void - */ - public function push(string $key, array $data) - { - if ($this->has($key) && is_array($value = $this->get($key))) - { - $this->set($key, array_merge($value, $data)); - } - } - - //-------------------------------------------------------------------- - - /** - * Remove one or more session properties. - * - * If $key is an array, it is interpreted as an array of string property - * identifiers to remove. Otherwise, it is interpreted as the identifier - * of a specific session property to remove. - * - * @param string|array $key Identifier of the session property or properties to remove. - */ - public function remove($key) - { - if (is_array($key)) - { - foreach ($key as $k) - { - unset($_SESSION[$k]); - } - - return; - } - - unset($_SESSION[$key]); - } - - //-------------------------------------------------------------------- - - /** - * Magic method to set variables in the session by simply calling - * $session->foo = bar; - * - * @param string $key Identifier of the session property to set. - * @param string|array $value - */ - public function __set(string $key, $value) - { - $_SESSION[$key] = $value; - } - - //-------------------------------------------------------------------- - - /** - * Magic method to get session variables by simply calling - * $foo = $session->foo; - * - * @param string $key Identifier of the session property to remove. - * - * @return null|string - */ - public function __get(string $key) - { - // Note: Keep this order the same, just in case somebody wants to - // use 'session_id' as a session data key, for whatever reason - if (isset($_SESSION[$key])) - { - return $_SESSION[$key]; - } - elseif ($key === 'session_id') - { - return session_id(); - } - - return null; - } - - //-------------------------------------------------------------------- - - /** - * Magic method to check for session variables. - * Different from has() in that it will validate 'session_id' as well. - * Mostly used by internal PHP functions, users should stick to has() - * - * @param string $key Identifier of the session property to remove. - * - * @return boolean - */ - public function __isset(string $key): bool - { - return isset($_SESSION[$key]) || ($key === 'session_id'); - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Flash Data Methods - //-------------------------------------------------------------------- - - /** - * Sets data into the session that will only last for a single request. - * Perfect for use with single-use status update messages. - * - * If $data is an array, it is interpreted as an associative array of - * key/value pairs for flashdata properties. - * Otherwise, it is interpreted as the identifier of a specific - * flashdata property, with $value containing the property value. - * - * @param array|string $data Property identifier or associative array of properties - * @param string|array $value Property value if $data is a scalar - */ - public function setFlashdata($data, $value = null) - { - $this->set($data, $value); - $this->markAsFlashdata(is_array($data) ? array_keys($data) : $data); - } - - //-------------------------------------------------------------------- - - /** - * Retrieve one or more items of flash data from the session. - * - * If the item key is null, return all flashdata. - * - * @param string $key Property identifier - * @return array|null The requested property value, or an associative array of them - */ - public function getFlashdata(string $key = null) - { - if (isset($key)) - { - return (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && - ! is_int($_SESSION['__ci_vars'][$key])) ? $_SESSION[$key] : null; - } - - $flashdata = []; - - if (! empty($_SESSION['__ci_vars'])) - { - foreach ($_SESSION['__ci_vars'] as $key => &$value) - { - is_int($value) || $flashdata[$key] = $_SESSION[$key]; - } - } - - return $flashdata; - } - - //-------------------------------------------------------------------- - - /** - * Keeps a single piece of flash data alive for one more request. - * - * @param array|string $key Property identifier or array of them - */ - public function keepFlashdata($key) - { - $this->markAsFlashdata($key); - } - - //-------------------------------------------------------------------- - - /** - * Mark a session property or properties as flashdata. - * - * @param array|string $key Property identifier or array of them - * - * @return boolean False if any of the properties are not already set - */ - public function markAsFlashdata($key): bool - { - if (is_array($key)) - { - foreach ($key as $sessionKey) - { - if (! isset($_SESSION[$sessionKey])) - { - return false; - } - } - - $new = array_fill_keys($key, 'new'); - - $_SESSION['__ci_vars'] = isset($_SESSION['__ci_vars']) ? array_merge($_SESSION['__ci_vars'], $new) : $new; - - return true; - } - - if (! isset($_SESSION[$key])) - { - return false; - } - - $_SESSION['__ci_vars'][$key] = 'new'; - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Unmark data in the session as flashdata. - * - * @param mixed $key Property identifier or array of them - */ - public function unmarkFlashdata($key) - { - if (empty($_SESSION['__ci_vars'])) - { - return; - } - - is_array($key) || $key = [$key]; - - foreach ($key as $k) - { - if (isset($_SESSION['__ci_vars'][$k]) && ! is_int($_SESSION['__ci_vars'][$k])) - { - unset($_SESSION['__ci_vars'][$k]); - } - } - - if (empty($_SESSION['__ci_vars'])) - { - unset($_SESSION['__ci_vars']); - } - } - - //-------------------------------------------------------------------- - - /** - * Retrieve all of the keys for session data marked as flashdata. - * - * @return array The property names of all flashdata - */ - public function getFlashKeys(): array - { - if (! isset($_SESSION['__ci_vars'])) - { - return []; - } - - $keys = []; - foreach (array_keys($_SESSION['__ci_vars']) as $key) - { - is_int($_SESSION['__ci_vars'][$key]) || $keys[] = $key; - } - - return $keys; - } - - //-------------------------------------------------------------------- - //-------------------------------------------------------------------- - // Temp Data Methods - //-------------------------------------------------------------------- - - /** - * Sets new data into the session, and marks it as temporary data - * with a set lifespan. - * - * @param string|array $data Session data key or associative array of items - * @param null $value Value to store - * @param integer $ttl Time-to-live in seconds - */ - public function setTempdata($data, $value = null, int $ttl = 300) - { - $this->set($data, $value); - $this->markAsTempdata($data, $ttl); - } - - //-------------------------------------------------------------------- - - /** - * Returns either a single piece of tempdata, or all temp data currently - * in the session. - * - * @param string $key Session data key - * @return mixed Session data value or null if not found. - */ - public function getTempdata(string $key = null) - { - if (isset($key)) - { - return (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && - is_int($_SESSION['__ci_vars'][$key])) ? $_SESSION[$key] : null; - } - - $tempdata = []; - - if (! empty($_SESSION['__ci_vars'])) - { - foreach ($_SESSION['__ci_vars'] as $key => &$value) - { - is_int($value) && $tempdata[$key] = $_SESSION[$key]; - } - } - - return $tempdata; - } - - //-------------------------------------------------------------------- - - /** - * Removes a single piece of temporary data from the session. - * - * @param string $key Session data key - */ - public function removeTempdata(string $key) - { - $this->unmarkTempdata($key); - unset($_SESSION[$key]); - } - - //-------------------------------------------------------------------- - - /** - * Mark one of more pieces of data as being temporary, meaning that - * it has a set lifespan within the session. - * - * @param string|array $key Property identifier or array of them - * @param integer $ttl Time to live, in seconds - * - * @return boolean False if any of the properties were not set - */ - public function markAsTempdata($key, int $ttl = 300): bool - { - $ttl += time(); - - if (is_array($key)) - { - $temp = []; - - foreach ($key as $k => $v) - { - // Do we have a key => ttl pair, or just a key? - if (is_int($k)) - { - $k = $v; - $v = $ttl; - } - elseif (is_string($v)) - { - $v = time() + $ttl; - } - else - { - $v += time(); - } - - if (! array_key_exists($k, $_SESSION)) - { - return false; - } - - $temp[$k] = $v; - } - - $_SESSION['__ci_vars'] = isset($_SESSION['__ci_vars']) ? array_merge($_SESSION['__ci_vars'], $temp) : $temp; - - return true; - } - - if (! isset($_SESSION[$key])) - { - return false; - } - - $_SESSION['__ci_vars'][$key] = $ttl; - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Unmarks temporary data in the session, effectively removing its - * lifespan and allowing it to live as long as the session does. - * - * @param string|array $key Property identifier or array of them - */ - public function unmarkTempdata($key) - { - if (empty($_SESSION['__ci_vars'])) - { - return; - } - - is_array($key) || $key = [$key]; - - foreach ($key as $k) - { - if (isset($_SESSION['__ci_vars'][$k]) && is_int($_SESSION['__ci_vars'][$k])) - { - unset($_SESSION['__ci_vars'][$k]); - } - } - - if (empty($_SESSION['__ci_vars'])) - { - unset($_SESSION['__ci_vars']); - } - } - - //-------------------------------------------------------------------- - - /** - * Retrieve the keys of all session data that have been marked as temporary data. - * - * @return array - */ - public function getTempKeys(): array - { - if (! isset($_SESSION['__ci_vars'])) - { - return []; - } - - $keys = []; - foreach (array_keys($_SESSION['__ci_vars']) as $key) - { - is_int($_SESSION['__ci_vars'][$key]) && $keys[] = $key; - } - - return $keys; - } - - //-------------------------------------------------------------------- - - /** - * Sets the driver as the session handler in PHP. - * Extracted for easier testing. - */ - protected function setSaveHandler() - { - session_set_save_handler($this->driver, true); - } - - //-------------------------------------------------------------------- - - /** - * Starts the session. - * Extracted for testing reasons. - */ - protected function startSession() - { - if (ENVIRONMENT === 'testing') - { - $_SESSION = []; - return; - } - - // @codeCoverageIgnoreStart - session_start(); - // @codeCoverageIgnoreEnd - } - - //-------------------------------------------------------------------- - - /** - * Takes care of setting the cookie on the client side. - * Extracted for testing reasons. - */ - protected function setCookie() - { - setcookie( - $this->sessionCookieName, session_id(), (empty($this->sessionExpiration) ? 0 : time() + $this->sessionExpiration), $this->cookiePath, $this->cookieDomain, $this->cookieSecure, true - ); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Session/SessionInterface.php b/system/Session/SessionInterface.php deleted file mode 100644 index e098514e..00000000 --- a/system/Session/SessionInterface.php +++ /dev/null @@ -1,251 +0,0 @@ -userdata(); - * - * @param string $key Identifier of the session property to retrieve - * - * @return array|null The property value(s) - */ - public function get(string $key = null); - - //-------------------------------------------------------------------- - - /** - * Returns whether an index exists in the session array. - * - * @param string $key Identifier of the session property we are interested in. - * - * @return boolean - */ - public function has(string $key): bool; - - //-------------------------------------------------------------------- - - /** - * Remove one or more session properties. - * - * If $key is an array, it is interpreted as an array of string property - * identifiers to remove. Otherwise, it is interpreted as the identifier - * of a specific session property to remove. - * - * @param string|array $key Identifier of the session property or properties to remove. - */ - public function remove($key); - - //-------------------------------------------------------------------- - - /** - * Sets data into the session that will only last for a single request. - * Perfect for use with single-use status update messages. - * - * If $data is an array, it is interpreted as an associative array of - * key/value pairs for flashdata properties. - * Otherwise, it is interpreted as the identifier of a specific - * flashdata property, with $value containing the property value. - * - * @param string|array $data Property identifier or associative array of properties - * @param string|array $value Property value if $data is a scalar - */ - public function setFlashdata($data, $value = null); - - //-------------------------------------------------------------------- - - /** - * Retrieve one or more items of flash data from the session. - * - * If the item key is null, return all flashdata. - * - * @param string $key Property identifier - * @return array|null The requested property value, or an associative - * array of them - */ - public function getFlashdata(string $key = null); - - //-------------------------------------------------------------------- - - /** - * Keeps a single piece of flash data alive for one more request. - * - * @param array|string $key Property identifier or array of them - */ - public function keepFlashdata($key); - - //-------------------------------------------------------------------- - - /** - * Mark a session property or properties as flashdata. - * - * @param string|array $key Property identifier or array of them - * - * @return False if any of the properties are not already set - */ - public function markAsFlashdata($key); - - //-------------------------------------------------------------------- - - /** - * Unmark data in the session as flashdata. - * - * @param string|array $key Property identifier or array of them - */ - public function unmarkFlashdata($key); - - //-------------------------------------------------------------------- - - /** - * Retrieve all of the keys for session data marked as flashdata. - * - * @return array The property names of all flashdata - */ - public function getFlashKeys(): array; - - //-------------------------------------------------------------------- - - /** - * Sets new data into the session, and marks it as temporary data - * with a set lifespan. - * - * @param string|array $data Session data key or associative array of items - * @param mixed $value Value to store - * @param integer $ttl Time-to-live in seconds - */ - public function setTempdata($data, $value = null, int $ttl = 300); - - //-------------------------------------------------------------------- - - /** - * Returns either a single piece of tempdata, or all temp data currently - * in the session. - * - * @param string $key Session data key - * @return mixed Session data value or null if not found. - */ - public function getTempdata(string $key = null); - - //-------------------------------------------------------------------- - - /** - * Removes a single piece of temporary data from the session. - * - * @param string $key Session data key - */ - public function removeTempdata(string $key); - - //-------------------------------------------------------------------- - - /** - * Mark one of more pieces of data as being temporary, meaning that - * it has a set lifespan within the session. - * - * @param string|array $key Property identifier or array of them - * @param integer $ttl Time to live, in seconds - * - * @return boolean False if any of the properties were not set - */ - public function markAsTempdata($key, int $ttl = 300); - - //-------------------------------------------------------------------- - - /** - * Unmarks temporary data in the session, effectively removing its - * lifespan and allowing it to live as long as the session does. - * - * @param string|array $key Property identifier or array of them - */ - public function unmarkTempdata($key); - - //-------------------------------------------------------------------- - - /** - * Retrieve the keys of all session data that have been marked as temporary data. - * - * @return array - */ - public function getTempKeys(): array; - - //-------------------------------------------------------------------- -} diff --git a/system/Test/CIDatabaseTestCase.php b/system/Test/CIDatabaseTestCase.php deleted file mode 100644 index 3d11ce3b..00000000 --- a/system/Test/CIDatabaseTestCase.php +++ /dev/null @@ -1,388 +0,0 @@ -hasInDatabase(); - * - * @var array - */ - protected $insertCache = []; - - //-------------------------------------------------------------------- - - /** - * Load any database test dependencies. - */ - public function loadDependencies() - { - if ($this->db === null) - { - $this->db = Database::connect($this->DBGroup); - $this->db->initialize(); - } - - if ($this->migrations === null) - { - // Ensure that we can run migrations - $config = new Migrations(); - $config->enabled = true; - - $this->migrations = Services::migrations($config, $this->db); - $this->migrations->setSilent(false); - } - - if ($this->seeder === null) - { - $this->seeder = Database::seeder($this->DBGroup); - $this->seeder->setSilent(true); - } - } - - //-------------------------------------------------------------------- - - /** - * Ensures that the database is cleaned up to a known state - * before each test runs. - * - * @throws ConfigException - */ - protected function setUp(): void - { - parent::setUp(); - - $this->loadDependencies(); - - if ($this->refresh === true) - { - $this->regressDatabase(); - - // Reset counts on faked items - Fabricator::resetCounts(); - } - - $this->migrateDatabase(); - - if (! empty($this->seed)) - { - if (! empty($this->basePath)) - { - $this->seeder->setPath(rtrim($this->basePath, '/') . '/Seeds'); - } - - $seeds = is_array($this->seed) ? $this->seed : [$this->seed]; - foreach ($seeds as $seed) - { - $this->seed($seed); - } - } - } - - //-------------------------------------------------------------------- - - /** - * Takes care of any required cleanup after the test, like - * removing any rows inserted via $this->hasInDatabase() - */ - protected function tearDown(): void - { - parent::tearDown(); - - if (! empty($this->insertCache)) - { - foreach ($this->insertCache as $row) - { - $this->db->table($row[0]) - ->where($row[1]) - ->delete(); - } - } - } - - //-------------------------------------------------------------------- - - /** - * Regress migrations as defined by the class - */ - protected function regressDatabase() - { - // If no namespace was specified then rollback all - if (empty($this->namespace)) - { - $this->migrations->setNamespace(null); - $this->migrations->regress(0, 'tests'); - } - - // Regress each specified namespace - else - { - $namespaces = is_array($this->namespace) ? $this->namespace : [$this->namespace]; - - foreach ($namespaces as $namespace) - { - $this->migrations->setNamespace($namespace); - $this->migrations->regress(0, 'tests'); - } - } - } - - /** - * Run migrations as defined by the class - */ - protected function migrateDatabase() - { - // If no namespace was specified then migrate all - if (empty($this->namespace)) - { - $this->migrations->setNamespace(null); - $this->migrations->latest('tests'); - } - // Run migrations for each specified namespace - else - { - $namespaces = is_array($this->namespace) ? $this->namespace : [$this->namespace]; - - foreach ($namespaces as $namespace) - { - $this->migrations->setNamespace($namespace); - $this->migrations->latest('tests'); - } - } - } - - /** - * Seeds that database with a specific seeder. - * - * @param string $name - */ - public function seed(string $name) - { - return $this->seeder->call($name); - } - - //-------------------------------------------------------------------- - // Database Test Helpers - //-------------------------------------------------------------------- - - /** - * Asserts that records that match the conditions in $where do - * not exist in the database. - * - * @param string $table - * @param array $where - * - * @return boolean - */ - public function dontSeeInDatabase(string $table, array $where) - { - $count = $this->db->table($table) - ->where($where) - ->countAllResults(); - - $this->assertTrue($count === 0, 'Row was found in database'); - } - - //-------------------------------------------------------------------- - - /** - * Asserts that records that match the conditions in $where DO - * exist in the database. - * - * @param string $table - * @param array $where - * - * @return boolean - * @throws \CodeIgniter\Database\Exceptions\DatabaseException - */ - public function seeInDatabase(string $table, array $where) - { - $count = $this->db->table($table) - ->where($where) - ->countAllResults(); - - $this->assertTrue($count > 0, 'Row not found in database: ' . $this->db->showLastQuery()); - } - - //-------------------------------------------------------------------- - - /** - * Fetches a single column from a database row with criteria - * matching $where. - * - * @param string $table - * @param string $column - * @param array $where - * - * @return boolean - * @throws \CodeIgniter\Database\Exceptions\DatabaseException - */ - public function grabFromDatabase(string $table, string $column, array $where) - { - $query = $this->db->table($table) - ->select($column) - ->where($where) - ->get(); - - $query = $query->getRow(); - - return $query->$column ?? false; - } - - //-------------------------------------------------------------------- - - /** - * Inserts a row into to the database. This row will be removed - * after the test has run. - * - * @param string $table - * @param array $data - * - * @return boolean - */ - public function hasInDatabase(string $table, array $data) - { - $this->insertCache[] = [ - $table, - $data, - ]; - - return $this->db->table($table) - ->insert($data); - } - - //-------------------------------------------------------------------- - - /** - * Asserts that the number of rows in the database that match $where - * is equal to $expected. - * - * @param integer $expected - * @param string $table - * @param array $where - * - * @return boolean - * @throws \CodeIgniter\Database\Exceptions\DatabaseException - */ - public function seeNumRecords(int $expected, string $table, array $where) - { - $count = $this->db->table($table) - ->where($where) - ->countAllResults(); - - $this->assertEquals($expected, $count, 'Wrong number of matching rows in database.'); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Test/CIUnitTestCase.php b/system/Test/CIUnitTestCase.php deleted file mode 100644 index d90b2e08..00000000 --- a/system/Test/CIUnitTestCase.php +++ /dev/null @@ -1,361 +0,0 @@ -app) - { - $this->app = $this->createApplication(); - } - - foreach ($this->setUpMethods as $method) - { - $this->$method(); - } - } - - protected function tearDown(): void - { - parent::tearDown(); - - foreach ($this->tearDownMethods as $method) - { - $this->$method(); - } - } - - //-------------------------------------------------------------------- - // Mocking - //-------------------------------------------------------------------- - - /** - * Injects the mock session driver into Services - */ - protected function mockSession() - { - $_SESSION = []; - - $config = config('App'); - $session = new MockSession(new ArrayHandler($config, '0.0.0.0'), $config); - - Services::injectMock('session', $session); - } - - /** - * Injects the mock email driver so no emails really send - */ - protected function mockEmail() - { - Services::injectMock('email', new MockEmail(config('Email'))); - } - - //-------------------------------------------------------------------- - // Assertions - //-------------------------------------------------------------------- - - /** - * Custom function to hook into CodeIgniter's Logging mechanism - * to check if certain messages were logged during code execution. - * - * @param string $level - * @param null $expectedMessage - * - * @return boolean - * @throws \Exception - */ - public function assertLogged(string $level, $expectedMessage = null) - { - $result = TestLogger::didLog($level, $expectedMessage); - - $this->assertTrue($result); - return $result; - } - - /** - * Hooks into CodeIgniter's Events system to check if a specific - * event was triggered or not. - * - * @param string $eventName - * - * @return boolean - * @throws \Exception - */ - public function assertEventTriggered(string $eventName): bool - { - $found = false; - $eventName = strtolower($eventName); - - foreach (Events::getPerformanceLogs() as $log) - { - if ($log['event'] !== $eventName) - { - continue; - } - - $found = true; - break; - } - - $this->assertTrue($found); - return $found; - } - - /** - * Hooks into xdebug's headers capture, looking for a specific header - * emitted - * - * @param string $header The leading portion of the header we are looking for - * @param boolean $ignoreCase - * - * @throws \Exception - */ - public function assertHeaderEmitted(string $header, bool $ignoreCase = false): void - { - $found = false; - - if (! function_exists('xdebug_get_headers')) - { - $this->markTestSkipped('XDebug not found.'); - } - - foreach (xdebug_get_headers() as $emitted) - { - $found = $ignoreCase ? - (stripos($emitted, $header) === 0) : - (strpos($emitted, $header) === 0); - if ($found) - { - break; - } - } - - $this->assertTrue($found, "Didn't find header for {$header}"); - } - - /** - * Hooks into xdebug's headers capture, looking for a specific header - * emitted - * - * @param string $header The leading portion of the header we don't want to find - * @param boolean $ignoreCase - * - * @throws \Exception - */ - public function assertHeaderNotEmitted(string $header, bool $ignoreCase = false): void - { - $found = false; - - if (! function_exists('xdebug_get_headers')) - { - $this->markTestSkipped('XDebug not found.'); - } - - foreach (xdebug_get_headers() as $emitted) - { - $found = $ignoreCase ? - (stripos($emitted, $header) === 0) : - (strpos($emitted, $header) === 0); - if ($found) - { - break; - } - } - - $success = ! $found; - $this->assertTrue($success, "Found header for {$header}"); - } - - /** - * Custom function to test that two values are "close enough". - * This is intended for extended execution time testing, - * where the result is close but not exactly equal to the - * expected time, for reasons beyond our control. - * - * @param integer $expected - * @param mixed $actual - * @param string $message - * @param integer $tolerance - * - * @throws \Exception - */ - public function assertCloseEnough(int $expected, $actual, string $message = '', int $tolerance = 1) - { - $difference = abs($expected - (int) floor($actual)); - - $this->assertLessThanOrEqual($tolerance, $difference, $message); - } - - /** - * Custom function to test that two values are "close enough". - * This is intended for extended execution time testing, - * where the result is close but not exactly equal to the - * expected time, for reasons beyond our control. - * - * @param mixed $expected - * @param mixed $actual - * @param string $message - * @param integer $tolerance - * - * @return boolean - * @throws \Exception - */ - public function assertCloseEnoughString($expected, $actual, string $message = '', int $tolerance = 1) - { - $expected = (string) $expected; - $actual = (string) $actual; - if (strlen($expected) !== strlen($actual)) - { - return false; - } - - try - { - $expected = (int) substr($expected, -2); - $actual = (int) substr($actual, -2); - $difference = abs($expected - $actual); - - $this->assertLessThanOrEqual($tolerance, $difference, $message); - } - catch (\Exception $e) - { - return false; - } - } - - //-------------------------------------------------------------------- - // Utility - //-------------------------------------------------------------------- - - /** - * Loads up an instance of CodeIgniter - * and gets the environment setup. - * - * @return \CodeIgniter\CodeIgniter - */ - protected function createApplication() - { - return require realpath(__DIR__ . '/../') . '/bootstrap.php'; - } - - /** - * Return first matching emitted header. - * - * @param string $header Identifier of the header of interest - * @param boolean $ignoreCase - * - * @return string|null The value of the header found, null if not found - */ - protected function getHeaderEmitted(string $header, bool $ignoreCase = false): ?string - { - $found = false; - - if (! function_exists('xdebug_get_headers')) - { - $this->markTestSkipped('XDebug not found.'); - } - - foreach (xdebug_get_headers() as $emitted) - { - $found = $ignoreCase ? - (stripos($emitted, $header) === 0) : - (strpos($emitted, $header) === 0); - if ($found) - { - return $emitted; - } - } - - return null; - } -} diff --git a/system/Test/ControllerResponse.php b/system/Test/ControllerResponse.php deleted file mode 100644 index a187ce7c..00000000 --- a/system/Test/ControllerResponse.php +++ /dev/null @@ -1,227 +0,0 @@ -dom = new DOMParser(); - } - - //-------------------------------------------------------------------- - // Getters / Setters - //-------------------------------------------------------------------- - - /** - * Set the body & DOM. - * - * @param string $body - * - * @return $this - */ - public function setBody(string $body) - { - $this->body = $body; - - if (! empty($body)) - { - $this->dom = $this->dom->withString($body); - } - - return $this; - } - - /** - * Retrieve the body. - * - * @return string - */ - public function getBody() - { - return $this->body; - } - - /** - * Set the request. - * - * @param \CodeIgniter\HTTP\RequestInterface $request - * - * @return $this - */ - public function setRequest(RequestInterface $request) - { - $this->request = $request; - - return $this; - } - - /** - * Set the response. - * - * @param \CodeIgniter\HTTP\ResponseInterface $response - * - * @return $this - */ - public function setResponse(ResponseInterface $response) - { - $this->response = $response; - - $this->setBody($response->getBody() ?? ''); - - return $this; - } - - /** - * Request accessor. - * - * @return \CodeIgniter\HTTP\IncomingRequest - */ - public function request() - { - return $this->request; - } - - /** - * Response accessor. - * - * @return \CodeIgniter\HTTP\Response - */ - public function response() - { - return $this->response; - } - - //-------------------------------------------------------------------- - // Simple Response Checks - //-------------------------------------------------------------------- - - /** - * Boils down the possible responses into a boolean valid/not-valid - * response type. - * - * @return boolean - */ - public function isOK(): bool - { - // Only 200 and 300 range status codes - // are considered valid. - if ($this->response->getStatusCode() >= 400 || $this->response->getStatusCode() < 200) - { - return false; - } - - // Empty bodies are not considered valid. - if (empty($this->response->getBody())) - { - return false; - } - - return true; - } - - /** - * Returns whether or not the Response was a redirect response - * - * @return boolean - */ - public function isRedirect(): bool - { - return $this->response instanceof RedirectResponse; - } - - //-------------------------------------------------------------------- - // Utility - //-------------------------------------------------------------------- - - /** - * Forward any unrecognized method calls to our DOMParser instance. - * - * @param string $function Method name - * @param mixed $params Any method parameters - * @return mixed - */ - public function __call($function, $params) - { - if (method_exists($this->dom, $function)) - { - return $this->dom->{$function}(...$params); - } - } - -} diff --git a/system/Test/ControllerTester.php b/system/Test/ControllerTester.php deleted file mode 100644 index 89d44319..00000000 --- a/system/Test/ControllerTester.php +++ /dev/null @@ -1,316 +0,0 @@ -withRequest($request) - * ->withResponse($response) - * ->withURI($uri) - * ->withBody($body) - * ->controller('App\Controllers\Home') - * ->run('methodName'); - */ -trait ControllerTester -{ - - /** - * Controller configuration. - * - * @var BaseConfig - */ - protected $appConfig; - - /** - * Request. - * - * @var Request - */ - protected $request; - /** - * Response. - * - * @var Response - */ - protected $response; - /** - * Message logger. - * - * @var LoggerInterface - */ - protected $logger; - /** - * Initialized controller. - * - * @var Controller - */ - protected $controller; - /** - * URI of this request. - * - * @var string - */ - protected $uri = 'http://example.com'; - /** - * Request or response body. - * - * @var string - */ - protected $body; - - /** - * Loads the specified controller, and generates any needed dependencies. - * - * @param string $name - * - * @return mixed - */ - public function controller(string $name) - { - if (! class_exists($name)) - { - throw new InvalidArgumentException('Invalid Controller: ' . $name); - } - - if (empty($this->appConfig)) - { - $this->appConfig = new App(); - } - - if (! $this->uri instanceof URI) - { - $this->uri = new URI($this->appConfig->baseURL ?? 'http://example.com'); - } - - if (empty($this->request)) - { - $this->request = new IncomingRequest($this->appConfig, $this->uri, $this->body, new UserAgent()); - } - - if (empty($this->response)) - { - $this->response = new Response($this->appConfig); - } - - if (empty($this->logger)) - { - $this->logger = Services::logger(); - } - - $this->controller = new $name(); - $this->controller->initController($this->request, $this->response, $this->logger); - - return $this; - } - - /** - * Runs the specified method on the controller and returns the results. - * - * @param string $method - * @param array $params - * - * @return \CodeIgniter\Test\ControllerResponse|\InvalidArgumentException - */ - public function execute(string $method, ...$params) - { - if (! method_exists($this->controller, $method) || ! is_callable([$this->controller, $method])) - { - throw new InvalidArgumentException('Method does not exist or is not callable in controller: ' . $method); - } - - // The URL helper is always loaded by the system - // so ensure it's available. - helper('url'); - - $result = (new ControllerResponse()) - ->setRequest($this->request) - ->setResponse($this->response); - - $response = null; - try - { - ob_start(); - - $response = $this->controller->{$method}(...$params); - } - catch (Throwable $e) - { - $result->response() - ->setStatusCode($e->getCode()); - } - finally - { - $output = ob_get_clean(); - - // If the controller returned a response, use it - if (isset($response) && $response instanceof Response) - { - $result->setResponse($response); - } - - // check if controller returned a view rather than echoing it - if (is_string($response)) - { - $output = $response; - $result->response()->setBody($output); - $result->setBody($output); - } - elseif (! empty($response) && ! empty($response->getBody())) - { - $result->setBody($response->getBody()); - } - else - { - $result->setBody(''); - } - } - - // If not response code has been sent, assume a success - if (empty($result->response()->getStatusCode())) - { - $result->response()->setStatusCode(200); - } - - return $result; - } - - /** - * Set controller's config, with method chaining. - * - * @param mixed $appConfig - * - * @return mixed - */ - public function withConfig($appConfig) - { - $this->appConfig = $appConfig; - - return $this; - } - - /** - * Set controller's request, with method chaining. - * - * @param mixed $request - * - * @return mixed - */ - public function withRequest($request) - { - $this->request = $request; - - // Make sure it's available for other classes - Services::injectMock('request', $request); - - return $this; - } - - /** - * Set controller's response, with method chaining. - * - * @param mixed $response - * - * @return mixed - */ - public function withResponse($response) - { - $this->response = $response; - - return $this; - } - - /** - * Set controller's logger, with method chaining. - * - * @param mixed $logger - * - * @return mixed - */ - public function withLogger($logger) - { - $this->logger = $logger; - - return $this; - } - - /** - * Set the controller's URI, with method chaining. - * - * @param string $uri - * - * @return mixed - */ - public function withUri(string $uri) - { - $this->uri = new URI($uri); - - return $this; - } - - /** - * Set the method's body, with method chaining. - * - * @param mixed $body - * - * @return mixed - */ - public function withBody($body) - { - $this->body = $body; - - return $this; - } - -} diff --git a/system/Test/DOMParser.php b/system/Test/DOMParser.php deleted file mode 100644 index 95b88969..00000000 --- a/system/Test/DOMParser.php +++ /dev/null @@ -1,359 +0,0 @@ -dom = new \DOMDocument('1.0', 'utf-8'); - } - - /** - * Returns the body of the current document. - * - * @return string - */ - public function getBody(): string - { - return $this->dom->saveHTML(); - } - - /** - * Sets a string as the body that we want to work with. - * - * @param string $content - * - * @return $this - */ - public function withString(string $content) - { - // converts all special characters to utf-8 - $content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'); - - //turning off some errors - libxml_use_internal_errors(true); - - if (! $this->dom->loadHTML($content)) - { - // unclear how we would get here, given that we are trapping libxml errors - // @codeCoverageIgnoreStart - libxml_clear_errors(); - throw new \BadMethodCallException('Invalid HTML'); - // @codeCoverageIgnoreEnd - } - - // ignore the whitespace. - $this->dom->preserveWhiteSpace = false; - - return $this; - } - - /** - * Loads the contents of a file as a string - * so that we can work with it. - * - * @param string $path - * - * @return \CodeIgniter\Test\DOMParser - */ - public function withFile(string $path) - { - if (! is_file($path)) - { - throw new \InvalidArgumentException(basename($path) . ' is not a valid file.'); - } - - $content = file_get_contents($path); - - return $this->withString($content); - } - - /** - * Checks to see if the text is found within the result. - * - * @param string $search - * @param string $element - * - * @return boolean - */ - public function see(string $search = null, string $element = null): bool - { - // If Element is null, we're just scanning for text - if (is_null($element)) - { - $content = $this->dom->saveHTML($this->dom->documentElement); - return mb_strpos($content, $search) !== false; - } - - $result = $this->doXPath($search, $element); - - return (bool)$result->length; - } - - /** - * Checks to see if the text is NOT found within the result. - * - * @param string $search - * @param string|null $element - * - * @return boolean - */ - public function dontSee(string $search = null, string $element = null): bool - { - return ! $this->see($search, $element); - } - - /** - * Checks to see if an element with the matching CSS specifier - * is found within the current DOM. - * - * @param string $element - * - * @return boolean - */ - public function seeElement(string $element): bool - { - return $this->see(null, $element); - } - - /** - * Checks to see if the element is available within the result. - * - * @param string $element - * - * @return boolean - */ - public function dontSeeElement(string $element): bool - { - return $this->dontSee(null, $element); - } - - /** - * Determines if a link with the specified text is found - * within the results. - * - * @param string $text - * @param string|null $details - * - * @return boolean - */ - public function seeLink(string $text, string $details = null): bool - { - return $this->see($text, 'a' . $details); - } - - /** - * Checks for an input named $field with a value of $value. - * - * @param string $field - * @param string $value - * - * @return boolean - */ - public function seeInField(string $field, string $value): bool - { - $result = $this->doXPath(null, 'input', ["[@value=\"{$value}\"][@name=\"{$field}\"]"]); - - return (bool)$result->length; - } - - /** - * Checks for checkboxes that are currently checked. - * - * @param string $element - * - * @return boolean - */ - public function seeCheckboxIsChecked(string $element): bool - { - $result = $this->doXPath(null, 'input' . $element, [ - '[@type="checkbox"]', - '[@checked="checked"]', - ]); - - return (bool)$result->length; - } - - //-------------------------------------------------------------------- - /** - * Search the DOM using an XPath expression. - * - * @param string $search - * @param string $element - * @param array $paths - * @return type - */ - - protected function doXPath(string $search = null, string $element, array $paths = []) - { - // Otherwise, grab any elements that match - // the selector - $selector = $this->parseSelector($element); - - $path = ''; - - // By ID - if (! empty($selector['id'])) - { - $path = empty($selector['tag']) - ? "id(\"{$selector['id']}\")" - : "//body//{$selector['tag']}[@id=\"{$selector['id']}\"]"; - } - // By Class - else if (! empty($selector['class'])) - { - $path = empty($selector['tag']) - ? "//*[@class=\"{$selector['class']}\"]" - : "//body//{$selector['tag']}[@class=\"{$selector['class']}\"]"; - } - // By tag only - else if (! empty($selector['tag'])) - { - $path = "//body//{$selector['tag']}"; - } - - if (! empty($selector['attr'])) - { - foreach ($selector['attr'] as $key => $value) - { - $path .= "[@{$key}=\"{$value}\"]"; - } - } - - // $paths might contain a number of different - // ready to go xpath portions to tack on. - if (! empty($paths) && is_array($paths)) - { - foreach ($paths as $extra) - { - $path .= $extra; - } - } - - if (! is_null($search)) - { - $path .= "[contains(., \"{$search}\")]"; - } - - $xpath = new \DOMXPath($this->dom); - - return $xpath->query($path); - } - - /** - * Look for the a selector in the passed text. - * - * @param string $selector - * @return type - */ - public function parseSelector(string $selector) - { - $tag = null; - $id = null; - $class = null; - $attr = null; - - // ID? - if ($pos = strpos($selector, '#') !== false) - { - list($tag, $id) = explode('#', $selector); - } - // Attribute - elseif (strpos($selector, '[') !== false && strpos($selector, ']') !== false) - { - $open = strpos($selector, '['); - $close = strpos($selector, ']'); - - $tag = substr($selector, 0, $open); - $text = substr($selector, $open + 1, $close - 2); - - // We only support a single attribute currently - $text = explode(',', $text); - $text = trim(array_shift($text)); - - list($name, $value) = explode('=', $text); - $name = trim($name); - $value = trim($value); - $attr = [$name => trim($value, '] ')]; - } - // Class? - elseif ($pos = strpos($selector, '.') !== false) - { - list($tag, $class) = explode('.', $selector); - } - // Otherwise, assume the entire string is our tag - else - { - $tag = $selector; - } - - return [ - 'tag' => $tag, - 'id' => $id, - 'class' => $class, - 'attr' => $attr, - ]; - } - -} diff --git a/system/Test/Fabricator.php b/system/Test/Fabricator.php deleted file mode 100644 index 3791a37a..00000000 --- a/system/Test/Fabricator.php +++ /dev/null @@ -1,648 +0,0 @@ - formatter - * @param string|null $locale Locale for Faker provider - * - * @throws \InvalidArgumentException - */ - public function __construct($model, array $formatters = null, string $locale = null) - { - if (is_string($model)) - { - // Create a new model instance - $model = model($model, false); - } - - if (! is_object($model)) - { - throw new \InvalidArgumentException(lang('Fabricator.invalidModel')); - } - - $this->model = $model; - - // If no locale was specified then use the App default - if (is_null($locale)) - { - $locale = config('App')->defaultLocale; - } - - // There is no easy way to retrieve the locale from Faker so we will store it - $this->locale = $locale; - - // Create the locale-specific Generator - $this->faker = Factory::create($this->locale); - - // Determine eligible date fields - foreach (['createdField', 'updatedField', 'deletedField'] as $field) - { - if (! empty($this->model->$field)) - { - $this->dateFields[] = $this->model->$field; - } - } - - // Set the formatters - $this->setFormatters($formatters); - } - - //-------------------------------------------------------------------- - - /** - * Reset internal counts - */ - public static function resetCounts() - { - self::$tableCounts = []; - } - - /** - * Get the count for a specific table - * - * @param string $table Name of the target table - * - * @return integer - */ - public static function getCount(string $table): int - { - return empty(self::$tableCounts[$table]) ? 0 : self::$tableCounts[$table]; - } - - /** - * Set the count for a specific table - * - * @param string $table Name of the target table - * @param integer $count Count value - * - * @return integer The new count value - */ - public static function setCount(string $table, int $count): int - { - self::$tableCounts[$table] = $count; - return $count; - } - - /** - * Increment the count for a table - * - * @param string $table Name of the target table - * - * @return integer The new count value - */ - public static function upCount(string $table): int - { - return self::setCount($table, self::getCount($table) + 1); - } - - /** - * Decrement the count for a table - * - * @param string $table Name of the target table - * - * @return integer The new count value - */ - public static function downCount(string $table): int - { - return self::setCount($table, self::getCount($table) - 1); - } - - //-------------------------------------------------------------------- - - /** - * Returns the model instance - * - * @return object Framework or compatible model - */ - public function getModel() - { - return $this->model; - } - - /** - * Returns the locale - * - * @return string - */ - public function getLocale(): string - { - return $this->locale; - } - - /** - * Returns the Faker generator - * - * @return Faker\Generator - */ - public function getFaker(): Generator - { - return $this->faker; - } - - //-------------------------------------------------------------------- - - /** - * Return and reset tempOverrides - * - * @return array - */ - public function getOverrides(): array - { - $overrides = $this->tempOverrides ?? $this->overrides; - - $this->tempOverrides = $this->overrides; - - return $overrides; - } - - /** - * Set the overrides, once or persistent - * - * @param array $overrides Array of [field => value] - * @param boolean $persist Whether these overrides should persist through the next operation - * - * @return $this - */ - public function setOverrides(array $overrides = [], $persist = true): self - { - if ($persist) - { - $this->overrides = $overrides; - } - - $this->tempOverrides = $overrides; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the current formatters - * - * @return array|null - */ - public function getFormatters(): ?array - { - return $this->formatters; - } - - /** - * Set the formatters to use. Will attempt to autodetect if none are available. - * - * @param array|null $formatters Array of [field => formatter], or null to detect - * - * @return $this - */ - public function setFormatters(array $formatters = null): self - { - if (! is_null($formatters)) - { - $this->formatters = $formatters; - } - elseif (method_exists($this->model, 'fake')) - { - $this->formatters = null; - } - else - { - $formatters = $this->detectFormatters(); - } - - return $this; - } - - /** - * Try to identify the appropriate Faker formatter for each field. - * - * @return $this - */ - protected function detectFormatters(): self - { - $this->formatters = []; - - if (! empty($this->model->allowedFields)) - { - foreach ($this->model->allowedFields as $field) - { - $this->formatters[$field] = $this->guessFormatter($field); - } - } - - return $this; - } - - /** - * Guess at the correct formatter to match a field name. - * - * @param $field Name of the field - * - * @return string Name of the formatter - */ - protected function guessFormatter($field): string - { - // First check for a Faker formatter of the same name - covers things like "email" - try - { - $this->faker->getFormatter($field); - return $field; - } - catch (\InvalidArgumentException $e) - { - // No match, keep going - } - - // Next look for known model fields - if (in_array($field, $this->dateFields)) - { - switch ($this->model->dateFormat) - { - case 'datetime': - return 'date'; - break; - - case 'date': - return 'date'; - break; - - case 'int': - return 'unixTime'; - break; - } - } - elseif ($field === $this->model->primaryKey) - { - return 'numberBetween'; - } - - // Check some common partials - foreach (['email', 'name', 'title', 'text', 'date', 'url'] as $term) - { - if (stripos($field, $term) !== false) - { - return $term; - } - } - - if (stripos($field, 'phone') !== false) - { - return 'phoneNumber'; - } - - // Nothing left, use the default - return $this->defaultFormatter; - } - - //-------------------------------------------------------------------- - - /** - * Generate new entities with faked data - * - * @param integer|null $count Optional number to create a collection - * - * @return array|object An array or object (based on returnType), or an array of returnTypes - */ - public function make(int $count = null) - { - // If a singleton was requested then go straight to it - if (is_null($count)) - { - return $this->model->returnType === 'array' - ? $this->makeArray() - : $this->makeObject(); - } - - $return = []; - - for ($i = 0; $i < $count; $i++) - { - $return[] = $this->model->returnType === 'array' - ? $this->makeArray() - : $this->makeObject(); - } - - return $return; - } - - /** - * Generate an array of faked data - * - * @return array An array of faked data - * - * @throws \RuntimeException - */ - public function makeArray() - { - if (! is_null($this->formatters)) - { - $result = []; - - foreach ($this->formatters as $field => $formatter) - { - $result[$field] = $this->faker->{$formatter}; - } - } - - // If no formatters were defined then look for a model fake() method - elseif (method_exists($this->model, 'fake')) - { - $result = $this->model->fake($this->faker); - - // This should cover entities - if (method_exists($result, 'toArray')) - { - $result = $result->toArray(); - } - // Try to cast it - else - { - $result = (array) $result; - } - } - - // Nothing left to do but give up - else - { - throw new \RuntimeException(lang('Fabricator.missingFormatters')); - } - - // Replace overridden fields - return array_merge($result, $this->getOverrides()); - } - - /** - * Generate an object of faked data - * - * @param string|null $className Class name of the object to create; null to use model default - * - * @return object An instance of the class with faked data - * - * @throws \RuntimeException - */ - public function makeObject(string $className = null): object - { - if (is_null($className)) - { - if ($this->model->returnType === 'object' || $this->model->returnType === 'array') - { - $className = 'stdClass'; - } - else - { - $className = $this->model->returnType; - } - } - - // If using the model's fake() method then check it for the correct return type - if (is_null($this->formatters) && method_exists($this->model, 'fake')) - { - $result = $this->model->fake($this->faker); - - if ($result instanceof $className) - { - // Set overrides manually - foreach ($this->getOverrides() as $key => $value) - { - $result->{$key} = $value; - } - - return $result; - } - } - - // Get the array values and apply them to the object - $array = $this->makeArray(); - $object = new $className(); - - // Check for the entity method - if (method_exists($object, 'fill')) - { - $object->fill($array); - } - else - { - foreach ($array as $key => $value) - { - $object->{$key} = $value; - } - } - - return $object; - } - - //-------------------------------------------------------------------- - - /** - * Generate new entities from the database - * - * @param integer|null $count Optional number to create a collection - * @param array $override Array of data to add/override - * @param boolean $mock Whether to execute or mock the insertion - * - * @return array|object An array or object (based on returnType), or an array of returnTypes - */ - public function create(int $count = null, bool $mock = false) - { - // Intercept mock requests - if ($mock) - { - return $this->createMock($count); - } - - $ids = []; - - // Iterate over new entities and insert each one, storing insert IDs - foreach ($this->make($count ?? 1) as $result) - { - if ($id = $this->model->insert($result, true)) - { - $ids[] = $id; - self::upCount($this->model->table); - } - } - - // If the model defines a "withDeleted" method for handling soft deletes then use it - if (method_exists($this->model, 'withDeleted')) - { - $this->model->withDeleted(); - } - - return $this->model->find(is_null($count) ? reset($ids) : $ids); - } - - /** - * Generate new database entities without actually inserting them - * - * @param integer|null $count Optional number to create a collection - * - * @return array|object An array or object (based on returnType), or an array of returnTypes - */ - protected function createMock(int $count = null) - { - switch ($this->model->dateFormat) - { - case 'datetime': - $datetime = date('Y-m-d H:i:s'); - case 'date': - $datetime = date('Y-m-d'); - default: - $datetime = time(); - } - - // Determine which fields we will need - $fields = []; - - if (! empty($this->model->useTimestamps)) - { - $fields[$this->model->createdField] = $datetime; - $fields[$this->model->updatedField] = $datetime; - } - - if (! empty($this->model->useSoftDeletes)) - { - $fields[$this->model->deletedField] = null; - } - - // Iterate over new entities and add the necessary fields - $return = []; - foreach ($this->make($count ?? 1) as $i => $result) - { - // Set the ID - $fields[$this->model->primaryKey] = $i; - - // Merge fields - if (is_array($result)) - { - $result = array_merge($result, $fields); - } - else - { - foreach ($fields as $key => $value) - { - $result->{$key} = $value; - } - } - - $return[] = $result; - } - - return is_null($count) ? reset($return) : $return; - } -} diff --git a/system/Test/FeatureResponse.php b/system/Test/FeatureResponse.php deleted file mode 100644 index 6c919b76..00000000 --- a/system/Test/FeatureResponse.php +++ /dev/null @@ -1,439 +0,0 @@ -response = $response; - - $body = $response->getBody(); - if (! empty($body) && is_string($body)) - { - $this->domParser = (new DOMParser())->withString($body); - } - } - - //-------------------------------------------------------------------- - // Simple Response Checks - //-------------------------------------------------------------------- - - /** - * Boils down the possible responses into a bolean valid/not-valid - * response type. - * - * @return boolean - */ - public function isOK(): bool - { - $status = $this->response->getStatusCode(); - - // Only 200 and 300 range status codes - // are considered valid. - if ($status >= 400 || $status < 200) - { - return false; - } - - // Empty bodies are not considered valid, unless in redirects - if ($status < 300 && empty($this->response->getBody())) - { - return false; - } - - return true; - } - - /** - * Returns whether or not the Response was a redirect response - * - * @return boolean - */ - public function isRedirect(): bool - { - return $this->response instanceof RedirectResponse; - } - - /** - * Assert that the given response was a redirect. - * - * @throws \Exception - */ - public function assertRedirect() - { - $this->assertTrue($this->isRedirect(), 'Response is not a RedirectResponse.'); - } - - /** - * Returns the URL set for redirection. - * - * @return string|null - */ - public function getRedirectUrl(): ?string - { - if (! $this->isRedirect()) - { - return null; - } - - if ($this->response->hasHeader('Location')) - { - return $this->response->getHeaderLine('Location'); - } - elseif ($this->response->hasHeader('Refresh')) - { - return str_replace('0;url=', '', $this->response->getHeaderLine('Refresh')); - } - - return null; - } - - /** - * Asserts that the status is a specific value. - * - * @param integer $code - * - * @throws \Exception - */ - public function assertStatus(int $code) - { - $this->assertEquals($code, (int) $this->response->getStatusCode()); - } - - /** - * Asserts that the Response is considered OK. - * - * @throws \Exception - */ - public function assertOK() - { - $this->assertTrue($this->isOK(), "{$this->response->getStatusCode()} is not a successful status code, or the Response has an empty body."); - } - - //-------------------------------------------------------------------- - // Session Assertions - //-------------------------------------------------------------------- - - /** - * Asserts that an SESSION key has been set and, optionally, test it's value. - * - * @param string $key - * @param null $value - * - * @throws \Exception - */ - public function assertSessionHas(string $key, $value = null) - { - $this->assertTrue(array_key_exists($key, $_SESSION), "'{$key}' is not in the current \$_SESSION"); - - if ($value !== null) - { - $this->assertEquals($value, $_SESSION[$key], "The value of '{$key}' ({$value}) does not match expected value."); - } - } - - /** - * Asserts the session is missing $key. - * - * @param string $key - * - * @throws \Exception - */ - public function assertSessionMissing(string $key) - { - $this->assertFalse(array_key_exists($key, $_SESSION), "'{$key}' should not be present in \$_SESSION."); - } - - //-------------------------------------------------------------------- - // Header Assertions - //-------------------------------------------------------------------- - - /** - * Asserts that the Response contains a specific header. - * - * @param string $key - * @param null $value - * - * @throws \Exception - */ - public function assertHeader(string $key, $value = null) - { - $this->assertTrue($this->response->hasHeader($key), "'{$key}' is not a valid Response header."); - - if ($value !== null) - { - $this->assertEquals($value, $this->response->getHeaderLine($key), "The value of '{$key}' header ({$this->response->getHeaderLine($key)}) does not match expected value."); - } - } - - /** - * Asserts the Response headers does not contain the specified header. - * - * @param string $key - * - * @throws \Exception - */ - public function assertHeaderMissing(string $key) - { - $this->assertFalse($this->response->hasHeader($key), "'{$key}' should not be in the Response headers."); - } - - //-------------------------------------------------------------------- - // Cookie Assertions - //-------------------------------------------------------------------- - - /** - * Asserts that the response has the specified cookie. - * - * @param string $key - * @param null $value - * @param string|null $prefix - * - * @throws \Exception - */ - public function assertCookie(string $key, $value = null, string $prefix = '') - { - $this->assertTrue($this->response->hasCookie($key, $value, $prefix), "No cookie found named '{$key}'."); - } - - /** - * Assert the Response does not have the specified cookie set. - * - * @param string $key - */ - public function assertCookieMissing(string $key) - { - $this->assertFalse($this->response->hasCookie($key), "Cookie named '{$key}' should not be set."); - } - - /** - * Asserts that a cookie exists and has an expired time. - * - * @param string $key - * @param string $prefix - * - * @throws \Exception - */ - public function assertCookieExpired(string $key, string $prefix = '') - { - $this->assertTrue($this->response->hasCookie($key, null, $prefix)); - $this->assertGreaterThan(time(), $this->response->getCookie($key, $prefix)['expires']); - } - - //-------------------------------------------------------------------- - // DomParser Assertions - //-------------------------------------------------------------------- - - /** - * Assert that the desired text can be found in the result body. - * - * @param string|null $search - * @param string|null $element - * - * @throws \Exception - */ - public function assertSee(string $search = null, string $element = null) - { - $this->assertTrue($this->domParser->see($search, $element), "Do not see '{$search}' in response."); - } - - /** - * Asserts that we do not see the specified text. - * - * @param string|null $search - * @param string|null $element - * - * @throws \Exception - */ - public function assertDontSee(string $search = null, string $element = null) - { - $this->assertTrue($this->domParser->dontSee($search, $element), "I should not see '{$search}' in response."); - } - - /** - * Assert that we see an element selected via a CSS selector. - * - * @param string $search - * - * @throws \Exception - */ - public function assertSeeElement(string $search) - { - $this->assertTrue($this->domParser->seeElement($search), "Do not see element with selector '{$search} in response.'"); - } - - /** - * Assert that we do not see an element selected via a CSS selector. - * - * @param string $search - * - * @throws \Exception - */ - public function assertDontSeeElement(string $search) - { - $this->assertTrue($this->domParser->dontSeeElement($search), "I should not see an element with selector '{$search}' in response.'"); - } - - /** - * Assert that we see a link with the matching text and/or class. - * - * @param string $text - * @param string|null $details - * - * @throws \Exception - */ - public function assertSeeLink(string $text, string $details = null) - { - $this->assertTrue($this->domParser->seeLink($text, $details), "Do no see anchor tag with the text {$text} in response."); - } - - /** - * Assert that we see an input with name/value. - * - * @param string $field - * @param string|null $value - * - * @throws \Exception - */ - public function assertSeeInField(string $field, string $value = null) - { - $this->assertTrue($this->domParser->seeInField($field, $value), "Do no see input named {$field} with value {$value} in response."); - } - - //-------------------------------------------------------------------- - // JSON Methods - //-------------------------------------------------------------------- - - /** - * Returns the response's body as JSON - * - * @return mixed|false - */ - public function getJSON() - { - $response = $this->response->getJSON(); - - if (is_null($response)) - { - return false; - } - - return $response; - } - - /** - * Test that the response contains a matching JSON fragment. - * - * @param array $fragment - * - * @throws \Exception - */ - public function assertJSONFragment(array $fragment) - { - $json = json_decode($this->getJSON(), true); - - $this->assertArraySubset($fragment, $json, false, 'Response does not contain a matching JSON fragment.'); - } - - /** - * Asserts that the JSON exactly matches the passed in data. - * If the value being passed in is a string, it must be a json_encoded string. - * - * @param string|array $test - * - * @throws \Exception - */ - public function assertJSONExact($test) - { - $json = $this->getJSON(); - - if (is_array($test)) - { - $config = new Format(); - $formatter = $config->getFormatter('application/json'); - $test = $formatter->format($test); - } - - $this->assertJsonStringEqualsJsonString($test, $json, 'Response does not contain matching JSON.'); - } - - //-------------------------------------------------------------------- - // XML Methods - //-------------------------------------------------------------------- - - /** - * Returns the response' body as XML - * - * @return mixed|string - */ - public function getXML() - { - return $this->response->getXML(); - } - -} diff --git a/system/Test/FeatureTestCase.php b/system/Test/FeatureTestCase.php deleted file mode 100644 index ee70910b..00000000 --- a/system/Test/FeatureTestCase.php +++ /dev/null @@ -1,75 +0,0 @@ -resetRoutes(); - foreach ($routes as $route) - { - $collection->{$route[0]}($route[1], $route[2]); - } - } - - $this->routes = $collection; - - return $this; - } - - /** - * Sets any values that should exist during this session. - * - * @param array|null Array of values, or null to use the current $_SESSION - * - * @return $this - */ - public function withSession(array $values = null) - { - $this->session = is_null($values) ? $_SESSION : $values; - - return $this; - } - - /** - * Don't run any events while running this test. - * - * @return $this - */ - public function skipEvents() - { - Events::simulate(true); - - return $this; - } - - /** - * Calls a single URI, executes it, and returns a FeatureResponse - * instance that can be used to run many assertions against. - * - * @param string $method - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function call(string $method, string $path, array $params = null) - { - $buffer = \ob_get_level(); - - // Clean up any open output buffers - // not relevant to unit testing - // @codeCoverageIgnoreStart - if (\ob_get_level() > 0 && (! isset($this->clean) || $this->clean === true)) - { - \ob_end_clean(); - } - // @codeCoverageIgnoreEnd - - // Simulate having a blank session - $_SESSION = []; - $_SERVER['REQUEST_METHOD'] = $method; - - $request = $this->setupRequest($method, $path); - $request = $this->populateGlobals($method, $request, $params); - - // Make sure the RouteCollection knows what method we're using... - $routes = $this->routes ?: Services::routes(); - $routes->setHTTPVerb($method); - - // Make sure any other classes that might call the request - // instance get the right one. - Services::injectMock('request', $request); - - // Make sure filters are reset between tests - Services::injectMock('filters', Services::filters(null, false)); - - $response = $this->app - ->setRequest($request) - ->run($routes, true); - - $output = \ob_get_contents(); - if (empty($response->getBody()) && ! empty($output)) - { - $response->setBody($output); - } - - // Reset directory if it has been set - Services::router()->setDirectory(null); - - // Ensure the output buffer is identical so no tests are risky - // @codeCoverageIgnoreStart - while (\ob_get_level() > $buffer) - { - \ob_end_clean(); - } - while (\ob_get_level() < $buffer) - { - \ob_start(); - } - // @codeCoverageIgnoreEnd - - return new FeatureResponse($response); - } - - /** - * Performs a GET request. - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function get(string $path, array $params = null) - { - return $this->call('get', $path, $params); - } - - /** - * Performs a POST request. - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function post(string $path, array $params = null) - { - return $this->call('post', $path, $params); - } - - /** - * Performs a PUT request - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function put(string $path, array $params = null) - { - return $this->call('put', $path, $params); - } - - /** - * Performss a PATCH request - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function patch(string $path, array $params = null) - { - return $this->call('patch', $path, $params); - } - - /** - * Performs a DELETE request. - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function delete(string $path, array $params = null) - { - return $this->call('delete', $path, $params); - } - - /** - * Performs an OPTIONS request. - * - * @param string $path - * @param array|null $params - * - * @return \CodeIgniter\Test\FeatureResponse - * @throws \CodeIgniter\Router\Exceptions\RedirectException - * @throws \Exception - */ - public function options(string $path, array $params = null) - { - return $this->call('options', $path, $params); - } - - /** - * Setup a Request object to use so that CodeIgniter - * won't try to auto-populate some of the items. - * - * @param string $method - * @param string|null $path - * - * @return \CodeIgniter\HTTP\IncomingRequest - */ - protected function setupRequest(string $method, string $path = null): IncomingRequest - { - $config = config(App::class); - $uri = new URI(rtrim($config->baseURL, '/') . '/' . trim($path, '/ ')); - - $request = new IncomingRequest($config, clone($uri), null, new UserAgent()); - $request->uri = $uri; - - $request->setMethod($method); - $request->setProtocolVersion('1.1'); - - if ($config->forceGlobalSecureRequests) - { - $_SERVER['HTTPS'] = 'test'; - } - - return $request; - } - - /** - * Populates the data of our Request with "global" data - * relevant to the request, like $_POST data. - * - * Always populate the GET vars based on the URI. - * - * @param string $method - * @param \CodeIgniter\HTTP\Request $request - * @param array|null $params - * - * @return \CodeIgniter\HTTP\Request - * @throws \ReflectionException - */ - protected function populateGlobals(string $method, Request $request, array $params = null) - { - // $params should set the query vars if present, - // otherwise set it from the URL. - $get = ! empty($params) && $method === 'get' - ? $params - : $this->getPrivateProperty($request->uri, 'query'); - - $request->setGlobal('get', $get); - if ($method !== 'get') - { - $request->setGlobal($method, $params); - } - - $request->setGlobal('request', $params); - - $_SESSION = $this->session ?? []; - - return $request; - } -} diff --git a/system/Test/Filters/CITestStreamFilter.php b/system/Test/Filters/CITestStreamFilter.php deleted file mode 100644 index 4310a7fb..00000000 --- a/system/Test/Filters/CITestStreamFilter.php +++ /dev/null @@ -1,81 +0,0 @@ -data; - $consumed += $bucket->datalen; - } - return PSFS_PASS_ON; - } - -} - -// @codeCoverageIgnoreStart -stream_filter_register('CITestStreamFilter', 'CodeIgniter\Test\Filters\CITestStreamFilter'); -// @codeCoverageIgnoreEnd diff --git a/system/Test/Interfaces/FabricatorModel.php b/system/Test/Interfaces/FabricatorModel.php deleted file mode 100644 index fdf7500e..00000000 --- a/system/Test/Interfaces/FabricatorModel.php +++ /dev/null @@ -1,109 +0,0 @@ -table with a primary key - * matching $id. - * - * @param mixed|array|null $id One primary key or an array of primary keys - * - * @return array|object|null The resulting row of data, or null. - */ - public function find($id = null); - - /** - * Inserts data into the current table. If an object is provided, - * it will attempt to convert it to an array. - * - * @param array|object $data - * @param boolean $returnID Whether insert ID should be returned or not. - * - * @return integer|string|boolean - * @throws \ReflectionException - */ - public function insert($data = null, bool $returnID = true); - - /** - * The following properties and methods are optional, but if present should - * adhere to their definitions. - * - * @property array $allowedFields - * @property string $useSoftDeletes - * @property string $useTimestamps - * @property string $createdField - * @property string $updatedField - * @property string $deletedField - */ - - /* - * Sets $useSoftDeletes value so that we can temporarily override - * the softdeletes settings. Can be used for all find* methods. - * - * @param boolean $val - * - * @return Model - */ - // public function withDeleted($val = true); - - /** - * Faked data for Fabricator. - * - * @param Generator $faker - * - * @return array|object - */ - // public function fake(Generator &$faker); -} diff --git a/system/Test/Mock/MockAppConfig.php b/system/Test/Mock/MockAppConfig.php deleted file mode 100644 index fba7b76f..00000000 --- a/system/Test/Mock/MockAppConfig.php +++ /dev/null @@ -1,34 +0,0 @@ -output = $output; - - return $this; - } - - //-------------------------------------------------------------------- - - protected function sendRequest(array $curl_options = []): string - { - // Save so we can access later. - $this->curl_options = $curl_options; - - return $this->output; - } - - //-------------------------------------------------------------------- - // for testing purposes only - public function getBaseURI() - { - return $this->baseURI; - } - - // for testing purposes only - public function getDelay() - { - return $this->delay; - } - -} diff --git a/system/Test/Mock/MockCache.php b/system/Test/Mock/MockCache.php deleted file mode 100644 index 855cb7bf..00000000 --- a/system/Test/Mock/MockCache.php +++ /dev/null @@ -1,198 +0,0 @@ -prefix . $key; - - return array_key_exists($key, $this->cache) - ? $this->cache[$key] - : null; - } - - //-------------------------------------------------------------------- - - /** - * Saves an item to the cache store. - * - * The $raw parameter is only utilized by Mamcache in order to - * allow usage of increment() and decrement(). - * - * @param string $key Cache item name - * @param $value the data to save - * @param null $ttl Time To Live, in seconds (default 60) - * @param boolean $raw Whether to store the raw value. - * - * @return mixed - */ - public function save(string $key, $value, int $ttl = 60, bool $raw = false) - { - $key = $this->prefix . $key; - - $this->cache[$key] = $value; - - return true; - } - - //-------------------------------------------------------------------- - - /** - * Deletes a specific item from the cache store. - * - * @param string $key Cache item name - * - * @return mixed - */ - public function delete(string $key) - { - unset($this->cache[$key]); - } - - //-------------------------------------------------------------------- - - /** - * Performs atomic incrementation of a raw stored value. - * - * @param string $key Cache ID - * @param integer $offset Step/value to increase by - * - * @return mixed - */ - public function increment(string $key, int $offset = 1) - { - $key = $this->prefix . $key; - - $data = $this->cache[$key] ?: null; - - if (empty($data)) - { - $data = 0; - } - elseif (! is_int($data)) - { - return false; - } - - return $this->save($key, $data + $offset); - } - - //-------------------------------------------------------------------- - - /** - * Performs atomic decrementation of a raw stored value. - * - * @param string $key Cache ID - * @param integer $offset Step/value to increase by - * - * @return mixed - */ - public function decrement(string $key, int $offset = 1) - { - $key = $this->prefix . $key; - - $data = $this->cache[$key] ?: null; - - if (empty($data)) - { - $data = 0; - } - elseif (! is_int($data)) - { - return false; - } - - return $this->save($key, $data - $offset); - } - - //-------------------------------------------------------------------- - - /** - * Will delete all items in the entire cache. - * - * @return mixed - */ - public function clean() - { - $this->cache = []; - } - - //-------------------------------------------------------------------- - - /** - * Returns information on the entire cache. - * - * The information returned and the structure of the data - * varies depending on the handler. - * - * @return mixed - */ - public function getCacheInfo() - { - return []; - } - - //-------------------------------------------------------------------- - - /** - * Returns detailed information about the specific item in the cache. - * - * @param string $key Cache item name. - * - * @return mixed - */ - public function getMetaData(string $key) - { - return false; - } - - //-------------------------------------------------------------------- - - /** - * Determines if the driver is supported on this system. - * - * @return boolean - */ - public function isSupported(): bool - { - return true; - } - - //-------------------------------------------------------------------- - -} diff --git a/system/Test/Mock/MockCodeIgniter.php b/system/Test/Mock/MockCodeIgniter.php deleted file mode 100644 index 5580fd11..00000000 --- a/system/Test/Mock/MockCodeIgniter.php +++ /dev/null @@ -1,11 +0,0 @@ -returnValues[$method] = $return; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Orchestrates a query against the database. Queries must use - * Database\Statement objects to store the query and build it. - * This method works with the cache. - * - * Should automatically handle different connections for read/write - * queries if needed. - * - * @param string $sql - * @param mixed ...$binds - * @param boolean $setEscapeFlags - * @param string $queryClass - * - * @return \CodeIgniter\Database\BaseResult|\CodeIgniter\Database\Query|false - */ - - public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = 'CodeIgniter\\Database\\Query') - { - $queryClass = str_replace('Connection', 'Query', get_class($this)); - - $query = new $queryClass($this); - - $query->setQuery($sql, $binds, $setEscapeFlags); - - if (! empty($this->swapPre) && ! empty($this->DBPrefix)) - { - $query->swapPrefix($this->DBPrefix, $this->swapPre); - } - - $startTime = microtime(true); - - $this->lastQuery = $query; - - // Run the query - if (false === ($this->resultID = $this->simpleQuery($query->getQuery()))) - { - $query->setDuration($startTime, $startTime); - - // @todo deal with errors - - return false; - } - - $query->setDuration($startTime); - - $resultClass = str_replace('Connection', 'Result', get_class($this)); - - return new $resultClass($this->connID, $this->resultID); - } - - //-------------------------------------------------------------------- - - /** - * Connect to the database. - * - * @param boolean $persistent - * - * @return mixed - */ - public function connect(bool $persistent = false) - { - $return = $this->returnValues['connect'] ?? true; - - if (is_array($return)) - { - // By removing the top item here, we can - // get a different value for, say, testing failover connections. - $return = array_shift($this->returnValues['connect']); - } - - return $return; - } - - //-------------------------------------------------------------------- - - /** - * Keep or establish the connection if no queries have been sent for - * a length of time exceeding the server's idle timeout. - * - * @return boolean - */ - public function reconnect(): bool - { - return true; - } - - //-------------------------------------------------------------------- - - /** - * Select a specific database table to use. - * - * @param string $databaseName - * - * @return mixed - */ - public function setDatabase(string $databaseName) - { - $this->database = $databaseName; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns a string containing the version of the database being used. - * - * @return string - */ - public function getVersion(): string - { - return CodeIgniter::CI_VERSION; - } - - //-------------------------------------------------------------------- - - /** - * Executes the query against the database. - * - * @param string $sql - * - * @return mixed - */ - protected function execute(string $sql) - { - return $this->returnValues['execute']; - } - - //-------------------------------------------------------------------- - - /** - * Returns the total number of rows affected by this query. - * - * @return integer - */ - public function affectedRows(): int - { - return 1; - } - - //-------------------------------------------------------------------- - - /** - * Returns the last error code and message. - * - * Must return an array with keys 'code' and 'message': - * - * return ['code' => null, 'message' => null); - * - * @return array - */ - public function error(): array - { - return [ - 'code' => null, - 'message' => null, - ]; - } - - //-------------------------------------------------------------------- - - /** - * Insert ID - * - * @return integer - */ - public function insertID(): int - { - return $this->connID->insert_id; - } - - //-------------------------------------------------------------------- - - /** - * Generates the SQL for listing tables in a platform-dependent manner. - * - * @param boolean $constrainByPrefix - * - * @return string - */ - protected function _listTables(bool $constrainByPrefix = false): string - { - return ''; - } - - //-------------------------------------------------------------------- - - /** - * Generates a platform-specific query string so that the column names can be fetched. - * - * @param string $table - * - * @return string - */ - protected function _listColumns(string $table = ''): string - { - return ''; - } - - /** - * @param string $table - * @return array - */ - protected function _fieldData(string $table): array - { - return []; - } - - /** - * @param string $table - * @return array - */ - protected function _indexData(string $table): array - { - return []; - } - - /** - * @param string $table - * @return array - */ - protected function _foreignKeyData(string $table): array - { - return []; - } - - //-------------------------------------------------------------------- - - /** - * Close the connection. - */ - protected function _close() - { - } - - //-------------------------------------------------------------------- - - /** - * Begin Transaction - * - * @return boolean - */ - protected function _transBegin(): bool - { - return true; - } - - //-------------------------------------------------------------------- - - /** - * Commit Transaction - * - * @return boolean - */ - protected function _transCommit(): bool - { - return true; - } - - //-------------------------------------------------------------------- - - /** - * Rollback Transaction - * - * @return boolean - */ - protected function _transRollback(): bool - { - return true; - } - - //-------------------------------------------------------------------- -} diff --git a/system/Test/Mock/MockEmail.php b/system/Test/Mock/MockEmail.php deleted file mode 100644 index ab62a770..00000000 --- a/system/Test/Mock/MockEmail.php +++ /dev/null @@ -1,31 +0,0 @@ -returnValue) - { - $this->setArchiveValues(); - - if ($autoClear) - { - $this->clear(); - } - - Events::trigger('email', $this->archive); - } - - return $this->returnValue; - } -} diff --git a/system/Test/Mock/MockEvents.php b/system/Test/Mock/MockEvents.php deleted file mode 100644 index e8b3f433..00000000 --- a/system/Test/Mock/MockEvents.php +++ /dev/null @@ -1,66 +0,0 @@ -handles = $config['handles'] ?? []; - $this->destination = $this->path . 'log-' . date('Y-m-d') . '.' . $this->fileExtension; - } - -} diff --git a/system/Test/Mock/MockIncomingRequest.php b/system/Test/Mock/MockIncomingRequest.php deleted file mode 100644 index 64d7b2e9..00000000 --- a/system/Test/Mock/MockIncomingRequest.php +++ /dev/null @@ -1,17 +0,0 @@ -language[$locale ?? $this->locale][$file] = $data; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Provides an override that allows us to set custom - * data to be returned easily during testing. - * - * @param string $path - * - * @return array|mixed - */ - protected function requireFile(string $path): array - { - return $this->data ?? []; - } - - //-------------------------------------------------------------------- - - /** - * Arbitrarily turnoff internationalization support for testing - */ - public function disableIntlSupport() - { - $this->intlSupport = false; - } - -} diff --git a/system/Test/Mock/MockLogger.php b/system/Test/Mock/MockLogger.php deleted file mode 100644 index 239dab59..00000000 --- a/system/Test/Mock/MockLogger.php +++ /dev/null @@ -1,98 +0,0 @@ - [ - /* - * The log levels that this handler will handle. - */ - 'handles' => [ - 'critical', - 'alert', - 'emergency', - 'debug', - 'error', - 'info', - 'notice', - 'warning', - ], - - /* - * Logging Directory Path - */ - 'path' => '', - ], - ]; - -} diff --git a/system/Test/Mock/MockQuery.php b/system/Test/Mock/MockQuery.php deleted file mode 100644 index 851ad3ec..00000000 --- a/system/Test/Mock/MockQuery.php +++ /dev/null @@ -1,8 +0,0 @@ -model; - } - - public function getModelName() - { - return $this->modelName; - } - - public function getFormat() - { - return $this->format; - } - -} diff --git a/system/Test/Mock/MockResourcePresenter.php b/system/Test/Mock/MockResourcePresenter.php deleted file mode 100644 index 84f831c2..00000000 --- a/system/Test/Mock/MockResourcePresenter.php +++ /dev/null @@ -1,23 +0,0 @@ -model; - } - - public function getModelName() - { - return $this->modelName; - } - - public function getFormat() - { - return $this->format; - } - -} diff --git a/system/Test/Mock/MockResponse.php b/system/Test/Mock/MockResponse.php deleted file mode 100644 index 67f1a7d6..00000000 --- a/system/Test/Mock/MockResponse.php +++ /dev/null @@ -1,30 +0,0 @@ -pretend; - } - - // artificial error for testing - public function misbehave() - { - $this->statusCode = 0; - } - -} diff --git a/system/Test/Mock/MockResult.php b/system/Test/Mock/MockResult.php deleted file mode 100644 index a76e9dd5..00000000 --- a/system/Test/Mock/MockResult.php +++ /dev/null @@ -1,93 +0,0 @@ -CSRFHash; - - return $this; - } - - //-------------------------------------------------------------------- - -} diff --git a/system/Test/Mock/MockServices.php b/system/Test/Mock/MockServices.php deleted file mode 100644 index 5d9e7363..00000000 --- a/system/Test/Mock/MockServices.php +++ /dev/null @@ -1,27 +0,0 @@ - TESTPATH . '_support/', - ]; - public $classmap = []; - - //-------------------------------------------------------------------- - - public function __construct() - { - // Don't call the parent since we don't want the default mappings. - // parent::__construct(); - } - - //-------------------------------------------------------------------- - public static function locator(bool $getShared = true) - { - return new \CodeIgniter\Autoloader\FileLocator(static::autoloader()); - } - -} diff --git a/system/Test/Mock/MockSession.php b/system/Test/Mock/MockSession.php deleted file mode 100644 index e69183e2..00000000 --- a/system/Test/Mock/MockSession.php +++ /dev/null @@ -1,72 +0,0 @@ -driver, true); - } - - //-------------------------------------------------------------------- - - /** - * Starts the session. - * Extracted for testing reasons. - */ - protected function startSession() - { - // session_start(); - } - - //-------------------------------------------------------------------- - - /** - * Takes care of setting the cookie on the client side. - * Extracted for testing reasons. - */ - protected function setCookie() - { - $this->cookies[] = [ - $this->sessionCookieName, - session_id(), - (empty($this->sessionExpiration) ? 0 : time() + $this->sessionExpiration), - $this->cookiePath, - $this->cookieDomain, - $this->cookieSecure, - true, - ]; - } - - //-------------------------------------------------------------------- - - public function regenerate(bool $destroy = false) - { - $this->didRegenerate = true; - $_SESSION['__ci_last_regenerate'] = time(); - } - - //-------------------------------------------------------------------- -} diff --git a/system/Test/Mock/MockTable.php b/system/Test/Mock/MockTable.php deleted file mode 100644 index 3e5758b4..00000000 --- a/system/Test/Mock/MockTable.php +++ /dev/null @@ -1,16 +0,0 @@ -setAccessible(true); - $obj = (gettype($obj) === 'object') ? $obj : null; - - return function () use ($obj, $ref_method) { - $args = func_get_args(); - return $ref_method->invokeArgs($obj, $args); - }; - } - - /** - * Find an accessible property. - * - * @param object $obj - * @param string $property - * - * @return \ReflectionProperty - * @throws \ReflectionException - */ - private static function getAccessibleRefProperty($obj, $property) - { - if (is_object($obj)) - { - $ref_class = new ReflectionObject($obj); - } - else - { - $ref_class = new ReflectionClass($obj); - } - - $ref_property = $ref_class->getProperty($property); - $ref_property->setAccessible(true); - - return $ref_property; - } - - /** - * Set a private property. - * - * @param object|string $obj object or class name - * @param string $property property name - * @param mixed $value value - * - * @throws \ReflectionException - */ - public static function setPrivateProperty($obj, $property, $value) - { - $ref_property = self::getAccessibleRefProperty($obj, $property); - $ref_property->setValue($obj, $value); - } - - /** - * Retrieve a private property. - * - * @param object|string $obj object or class name - * @param string $property property name - * - * @return mixed value - * @throws \ReflectionException - */ - public static function getPrivateProperty($obj, $property) - { - $ref_property = self::getAccessibleRefProperty($obj, $property); - return $ref_property->getValue($obj); - } - -} diff --git a/system/Test/TestLogger.php b/system/Test/TestLogger.php deleted file mode 100644 index f0c1c94b..00000000 --- a/system/Test/TestLogger.php +++ /dev/null @@ -1,82 +0,0 @@ -assertLogged() methods. - * - * @param string $level - * @param string $message - * @param array $context - * - * @return boolean - */ - public function log($level, $message, array $context = []): bool - { - // While this requires duplicate work, we want to ensure - // we have the final message to test against. - $log_message = $this->interpolate($message, $context); - - // Determine the file and line by finding the first - // backtrace that is not part of our logging system. - $trace = debug_backtrace(); - $file = null; - - foreach ($trace as $row) - { - if (! in_array($row['function'], ['log', 'log_message'])) - { - $file = basename($row['file'] ?? ''); - break; - } - } - - self::$op_logs[] = [ - 'level' => $level, - 'message' => $log_message, - 'file' => $file, - ]; - - // Let the parent do it's thing. - return parent::log($level, $message, $context); - } - - //-------------------------------------------------------------------- - - /** - * Used by CIUnitTestCase class to provide ->assertLogged() methods. - * - * @param string $level - * @param string $message - * - * @return boolean - */ - public static function didLog(string $level, $message) - { - foreach (self::$op_logs as $log) - { - if (strtolower($log['level']) === strtolower($level) && $message === $log['message']) - { - return true; - } - } - - return false; - } - - //-------------------------------------------------------------------- - // Expose cleanFileNames() - public function cleanup($file) - { - return $this->cleanFileNames($file); - } - -} diff --git a/system/Test/bootstrap.php b/system/Test/bootstrap.php deleted file mode 100644 index 89bdc7b1..00000000 --- a/system/Test/bootstrap.php +++ /dev/null @@ -1,67 +0,0 @@ -appDirectory) . DIRECTORY_SEPARATOR); -defined('WRITEPATH') || define('WRITEPATH', realpath($paths->writableDirectory) . DIRECTORY_SEPARATOR); -defined('SYSTEMPATH') || define('SYSTEMPATH', realpath($paths->systemDirectory) . DIRECTORY_SEPARATOR); -defined('ROOTPATH') || define('ROOTPATH', realpath(APPPATH . '../') . DIRECTORY_SEPARATOR); -defined('CIPATH') || define('CIPATH', realpath(SYSTEMPATH . '../') . DIRECTORY_SEPARATOR); -defined('FCPATH') || define('FCPATH', realpath(PUBLICPATH) . DIRECTORY_SEPARATOR); -defined('TESTPATH') || define('TESTPATH', realpath(HOMEPATH . 'tests/') . DIRECTORY_SEPARATOR); -defined('SUPPORTPATH') || define('SUPPORTPATH', realpath(TESTPATH . '_support/') . DIRECTORY_SEPARATOR); -defined('COMPOSER_PATH') || define('COMPOSER_PATH', realpath(HOMEPATH . 'vendor/autoload.php')); -defined('VENDORPATH') || define('VENDORPATH', realpath(HOMEPATH . 'vendor') . DIRECTORY_SEPARATOR); - -// Load Common.php from App then System -if (file_exists(APPPATH . 'Common.php')) -{ - require_once APPPATH . 'Common.php'; -} - -require_once SYSTEMPATH . 'Common.php'; - -// Set environment values that would otherwise stop the framework from functioning during tests. -if (! isset($_SERVER['app.baseURL'])) -{ - $_SERVER['app.baseURL'] = 'http://example.com'; -} - -// Load necessary components -require_once SYSTEMPATH . 'Config/AutoloadConfig.php'; -require_once APPPATH . 'Config/Autoload.php'; -require_once APPPATH . 'Config/Constants.php'; -require_once SYSTEMPATH . 'Modules/Modules.php'; -require_once APPPATH . 'Config/Modules.php'; - -require_once SYSTEMPATH . 'Autoloader/Autoloader.php'; -require_once SYSTEMPATH . 'Config/BaseService.php'; -require_once SYSTEMPATH . 'Config/Services.php'; -require_once APPPATH . 'Config/Services.php'; - -// Use Config\Services as CodeIgniter\Services -if (! class_exists('CodeIgniter\Services', false)) -{ - class_alias('Config\Services', 'CodeIgniter\Services'); -} - -// Launch the autoloader to gather namespaces (includes composer.json's "autoload-dev") -$loader = \CodeIgniter\Services::autoloader(); -$loader->initialize(new Config\Autoload(), new Config\Modules()); - -// Register the loader with the SPL autoloader stack. -$loader->register(); - -require_once APPPATH . 'Config/Routes.php'; -$routes->getRoutes('*'); diff --git a/system/ThirdParty/Escaper/Escaper.php b/system/ThirdParty/Escaper/Escaper.php deleted file mode 100644 index 9f903a59..00000000 --- a/system/ThirdParty/Escaper/Escaper.php +++ /dev/null @@ -1,391 +0,0 @@ - 'quot', // quotation mark - 38 => 'amp', // ampersand - 60 => 'lt', // less-than sign - 62 => 'gt', // greater-than sign - ]; - - /** - * Current encoding for escaping. If not UTF-8, we convert strings from this encoding - * pre-escaping and back to this encoding post-escaping. - * - * @var string - */ - protected $encoding = 'utf-8'; - - /** - * Holds the value of the special flags passed as second parameter to - * htmlspecialchars(). - * - * @var int - */ - protected $htmlSpecialCharsFlags; - - /** - * Static Matcher which escapes characters for HTML Attribute contexts - * - * @var callable - */ - protected $htmlAttrMatcher; - - /** - * Static Matcher which escapes characters for Javascript contexts - * - * @var callable - */ - protected $jsMatcher; - - /** - * Static Matcher which escapes characters for CSS Attribute contexts - * - * @var callable - */ - protected $cssMatcher; - - /** - * List of all encoding supported by this class - * - * @var array - */ - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; - - /** - * Constructor: Single parameter allows setting of global encoding for use by - * the current object. - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - */ - public function __construct($encoding = null) - { - if ($encoding !== null) { - if (! is_string($encoding)) { - throw new Exception\InvalidArgumentException( - get_class($this) . ' constructor parameter must be a string, received ' . gettype($encoding) - ); - } - if ($encoding === '') { - throw new Exception\InvalidArgumentException( - get_class($this) . ' constructor parameter does not allow a blank value' - ); - } - - $encoding = strtolower($encoding); - if (! in_array($encoding, $this->supportedEncodings)) { - throw new Exception\InvalidArgumentException( - 'Value of \'' . $encoding . '\' passed to ' . get_class($this) - . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()' - ); - } - - $this->encoding = $encoding; - } - - // We take advantage of ENT_SUBSTITUTE flag to correctly deal with invalid UTF-8 sequences. - $this->htmlSpecialCharsFlags = ENT_QUOTES | ENT_SUBSTITUTE; - - // set matcher callbacks - $this->htmlAttrMatcher = [$this, 'htmlAttrMatcher']; - $this->jsMatcher = [$this, 'jsMatcher']; - $this->cssMatcher = [$this, 'cssMatcher']; - } - - /** - * Return the encoding that all output/input is expected to be encoded in. - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Escape a string for the HTML Body context where there are very few characters - * of special meaning. Internally this will use htmlspecialchars(). - * - * @param string $string - * @return string - */ - public function escapeHtml($string) - { - return htmlspecialchars($string, $this->htmlSpecialCharsFlags, $this->encoding); - } - - /** - * Escape a string for the HTML Attribute context. We use an extended set of characters - * to escape that are not covered by htmlspecialchars() to cover cases where an attribute - * might be unquoted or quoted illegally (e.g. backticks are valid quotes for IE). - * - * @param string $string - * @return string - */ - public function escapeHtmlAttr($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9,\.\-_]/iSu', $this->htmlAttrMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Escape a string for the Javascript context. This does not use json_encode(). An extended - * set of characters are escaped beyond ECMAScript's rules for Javascript literal string - * escaping in order to prevent misinterpretation of Javascript as HTML leading to the - * injection of special characters and entities. The escaping used should be tolerant - * of cases where HTML escaping was not applied on top of Javascript escaping correctly. - * Backslash escaping is not used as it still leaves the escaped character as-is and so - * is not useful in a HTML context. - * - * @param string $string - * @return string - */ - public function escapeJs($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9,\._]/iSu', $this->jsMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Escape a string for the URI or Parameter contexts. This should not be used to escape - * an entire URI - only a subcomponent being inserted. The function is a simple proxy - * to rawurlencode() which now implements RFC 3986 since PHP 5.3 completely. - * - * @param string $string - * @return string - */ - public function escapeUrl($string) - { - return rawurlencode($string); - } - - /** - * Escape a string for the CSS context. CSS escaping can be applied to any string being - * inserted into CSS and escapes everything except alphanumerics. - * - * @param string $string - * @return string - */ - public function escapeCss($string) - { - $string = $this->toUtf8($string); - if ($string === '' || ctype_digit($string)) { - return $string; - } - - $result = preg_replace_callback('/[^a-z0-9]/iSu', $this->cssMatcher, $string); - return $this->fromUtf8($result); - } - - /** - * Callback function for preg_replace_callback that applies HTML Attribute - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function htmlAttrMatcher($matches) - { - $chr = $matches[0]; - $ord = ord($chr); - - /** - * The following replaces characters undefined in HTML with the - * hex entity for the Unicode replacement character. - */ - if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r") - || ($ord >= 0x7f && $ord <= 0x9f) - ) { - return '�'; - } - - /** - * Check if the current character to escape has a name entity we should - * replace it with while grabbing the integer value of the character. - */ - if (strlen($chr) > 1) { - $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8'); - } - - $hex = bin2hex($chr); - $ord = hexdec($hex); - if (isset(static::$htmlNamedEntityMap[$ord])) { - return '&' . static::$htmlNamedEntityMap[$ord] . ';'; - } - - /** - * Per OWASP recommendations, we'll use upper hex entities - * for any other characters where a named entity does not exist. - */ - if ($ord > 255) { - return sprintf('&#x%04X;', $ord); - } - return sprintf('&#x%02X;', $ord); - } - - /** - * Callback function for preg_replace_callback that applies Javascript - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function jsMatcher($matches) - { - $chr = $matches[0]; - if (strlen($chr) == 1) { - return sprintf('\\x%02X', ord($chr)); - } - $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8'); - $hex = strtoupper(bin2hex($chr)); - if (strlen($hex) <= 4) { - return sprintf('\\u%04s', $hex); - } - $highSurrogate = substr($hex, 0, 4); - $lowSurrogate = substr($hex, 4, 4); - return sprintf('\\u%04s\\u%04s', $highSurrogate, $lowSurrogate); - } - - /** - * Callback function for preg_replace_callback that applies CSS - * escaping to all matches. - * - * @param array $matches - * @return string - */ - protected function cssMatcher($matches) - { - $chr = $matches[0]; - if (strlen($chr) == 1) { - $ord = ord($chr); - } else { - $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8'); - $ord = hexdec(bin2hex($chr)); - } - return sprintf('\\%X ', $ord); - } - - /** - * Converts a string to UTF-8 from the base encoding. The base encoding is set via this - * class' constructor. - * - * @param string $string - * @throws Exception\RuntimeException - * @return string - */ - protected function toUtf8($string) - { - if ($this->getEncoding() === 'utf-8') { - $result = $string; - } else { - $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding()); - } - - if (! $this->isUtf8($result)) { - throw new Exception\RuntimeException( - sprintf('String to be escaped was not valid UTF-8 or could not be converted: %s', $result) - ); - } - - return $result; - } - - /** - * Converts a string from UTF-8 to the base encoding. The base encoding is set via this - * class' constructor. - * @param string $string - * @return string - */ - protected function fromUtf8($string) - { - if ($this->getEncoding() === 'utf-8') { - return $string; - } - - return $this->convertEncoding($string, $this->getEncoding(), 'UTF-8'); - } - - /** - * Checks if a given string appears to be valid UTF-8 or not. - * - * @param string $string - * @return bool - */ - protected function isUtf8($string) - { - return ($string === '' || preg_match('/^./su', $string)); - } - - /** - * Encoding conversion helper which wraps iconv and mbstring where they exist or throws - * and exception where neither is available. - * - * @param string $string - * @param string $to - * @param array|string $from - * @throws Exception\RuntimeException - * @return string - */ - protected function convertEncoding($string, $to, $from) - { - if (function_exists('iconv')) { - $result = iconv($from, $to, $string); - } elseif (function_exists('mb_convert_encoding')) { - $result = mb_convert_encoding($string, $to, $from); - } else { - throw new Exception\RuntimeException( - get_class($this) - . ' requires either the iconv or mbstring extension to be installed' - . ' when escaping for non UTF-8 strings.' - ); - } - - if ($result === false) { - return ''; // return non-fatal blank string on encoding errors from users - } - return $result; - } -} diff --git a/system/ThirdParty/Escaper/Exception/ExceptionInterface.php b/system/ThirdParty/Escaper/Exception/ExceptionInterface.php deleted file mode 100644 index 7ebe04ef..00000000 --- a/system/ThirdParty/Escaper/Exception/ExceptionInterface.php +++ /dev/null @@ -1,13 +0,0 @@ - true, - T_COMMENT => true, - T_DOC_COMMENT => true, - T_INLINE_HTML => true, - T_OPEN_TAG => true, - T_OPEN_TAG_WITH_ECHO => true, - T_WHITESPACE => true, - ); - - /** - * Things we need to do specially for operator tokens: - * - Refuse to strip spaces around them - * - Wrap the access path in parentheses if there - * are any of these in the final short parameter. - */ - private static $operator = array( - T_AND_EQUAL => true, - T_BOOLEAN_AND => true, - T_BOOLEAN_OR => true, - T_ARRAY_CAST => true, - T_BOOL_CAST => true, - T_CLONE => true, - T_CONCAT_EQUAL => true, - T_DEC => true, - T_DIV_EQUAL => true, - T_DOUBLE_CAST => true, - T_INC => true, - T_INCLUDE => true, - T_INCLUDE_ONCE => true, - T_INSTANCEOF => true, - T_INT_CAST => true, - T_IS_EQUAL => true, - T_IS_GREATER_OR_EQUAL => true, - T_IS_IDENTICAL => true, - T_IS_NOT_EQUAL => true, - T_IS_NOT_IDENTICAL => true, - T_IS_SMALLER_OR_EQUAL => true, - T_LOGICAL_AND => true, - T_LOGICAL_OR => true, - T_LOGICAL_XOR => true, - T_MINUS_EQUAL => true, - T_MOD_EQUAL => true, - T_MUL_EQUAL => true, - T_NEW => true, - T_OBJECT_CAST => true, - T_OR_EQUAL => true, - T_PLUS_EQUAL => true, - T_REQUIRE => true, - T_REQUIRE_ONCE => true, - T_SL => true, - T_SL_EQUAL => true, - T_SR => true, - T_SR_EQUAL => true, - T_STRING_CAST => true, - T_UNSET_CAST => true, - T_XOR_EQUAL => true, - '!' => true, - '%' => true, - '&' => true, - '*' => true, - '+' => true, - '-' => true, - '.' => true, - '/' => true, - ':' => true, - '<' => true, - '=' => true, - '>' => true, - '?' => true, - '^' => true, - '|' => true, - '~' => true, - ); - - private static $strip = array( - '(' => true, - ')' => true, - '[' => true, - ']' => true, - '{' => true, - '}' => true, - T_OBJECT_OPERATOR => true, - T_DOUBLE_COLON => true, - T_NS_SEPARATOR => true, - ); - - public static function getFunctionCalls($source, $line, $function) - { - static $up = array( - '(' => true, - '[' => true, - '{' => true, - T_CURLY_OPEN => true, - T_DOLLAR_OPEN_CURLY_BRACES => true, - ); - static $down = array( - ')' => true, - ']' => true, - '}' => true, - ); - static $modifiers = array( - '!' => true, - '@' => true, - '~' => true, - '+' => true, - '-' => true, - ); - static $identifier = array( - T_DOUBLE_COLON => true, - T_STRING => true, - T_NS_SEPARATOR => true, - ); - - if (KINT_PHP56) { - self::$operator[T_POW] = true; - self::$operator[T_POW_EQUAL] = true; - } - - if (KINT_PHP70) { - self::$operator[T_SPACESHIP] = true; - } - - if (KINT_PHP74) { - self::$operator[T_COALESCE_EQUAL] = true; - } - - $tokens = \token_get_all($source); - $cursor = 1; - $function_calls = array(); - /** @var array Performance optimization preventing backwards loops */ - $prev_tokens = array(null, null, null); - - if (\is_array($function)) { - $class = \explode('\\', $function[0]); - $class = \strtolower(\end($class)); - $function = \strtolower($function[1]); - } else { - $class = null; - $function = \strtolower($function); - } - - // Loop through tokens - foreach ($tokens as $index => $token) { - if (!\is_array($token)) { - continue; - } - - // Count newlines for line number instead of using $token[2] - // since certain situations (String tokens after whitespace) may - // not have the correct line number unless you do this manually - $cursor += \substr_count($token[1], "\n"); - if ($cursor > $line) { - break; - } - - // Store the last real tokens for later - if (isset(self::$ignore[$token[0]])) { - continue; - } - - $prev_tokens = array($prev_tokens[1], $prev_tokens[2], $token); - - // Check if it's the right type to be the function we're looking for - if (T_STRING !== $token[0] || \strtolower($token[1]) !== $function) { - continue; - } - - // Check if it's a function call - $nextReal = self::realTokenIndex($tokens, $index); - if (!isset($nextReal, $tokens[$nextReal]) || '(' !== $tokens[$nextReal]) { - continue; - } - - // Check if it matches the signature - if (null === $class) { - if ($prev_tokens[1] && \in_array($prev_tokens[1][0], array(T_DOUBLE_COLON, T_OBJECT_OPERATOR), true)) { - continue; - } - } else { - if (!$prev_tokens[1] || T_DOUBLE_COLON !== $prev_tokens[1][0]) { - continue; - } - - if (!$prev_tokens[0] || T_STRING !== $prev_tokens[0][0] || \strtolower($prev_tokens[0][1]) !== $class) { - continue; - } - } - - $inner_cursor = $cursor; - $depth = 1; // The depth respective to the function call - $offset = $nextReal + 1; // The start of the function call - $instring = false; // Whether we're in a string or not - $realtokens = false; // Whether the current scope contains anything meaningful or not - $paramrealtokens = false; // Whether the current parameter contains anything meaningful - $params = array(); // All our collected parameters - $shortparam = array(); // The short version of the parameter - $param_start = $offset; // The distance to the start of the parameter - - // Loop through the following tokens until the function call ends - while (isset($tokens[$offset])) { - $token = $tokens[$offset]; - - // Ensure that the $inner_cursor is correct and - // that $token is either a T_ constant or a string - if (\is_array($token)) { - $inner_cursor += \substr_count($token[1], "\n"); - } - - if (!isset(self::$ignore[$token[0]]) && !isset($down[$token[0]])) { - $paramrealtokens = $realtokens = true; - } - - // If it's a token that makes us to up a level, increase the depth - if (isset($up[$token[0]])) { - if (1 === $depth) { - $shortparam[] = $token; - $realtokens = false; - } - - ++$depth; - } elseif (isset($down[$token[0]])) { - --$depth; - - // If this brings us down to the parameter level, and we've had - // real tokens since going up, fill the $shortparam with an ellipsis - if (1 === $depth) { - if ($realtokens) { - $shortparam[] = '...'; - } - $shortparam[] = $token; - } - } elseif ('"' === $token[0]) { - // Strings use the same symbol for up and down, but we can - // only ever be inside one string, so just use a bool for that - if ($instring) { - --$depth; - if (1 === $depth) { - $shortparam[] = '...'; - } - } else { - ++$depth; - } - - $instring = !$instring; - - $shortparam[] = '"'; - } elseif (1 === $depth) { - if (',' === $token[0]) { - $params[] = array( - 'full' => \array_slice($tokens, $param_start, $offset - $param_start), - 'short' => $shortparam, - ); - $shortparam = array(); - $paramrealtokens = false; - $param_start = $offset + 1; - } elseif (T_CONSTANT_ENCAPSED_STRING === $token[0] && \strlen($token[1]) > 2) { - $shortparam[] = $token[1][0].'...'.$token[1][0]; - } else { - $shortparam[] = $token; - } - } - - // Depth has dropped to 0 (So we've hit the closing paren) - if ($depth <= 0) { - if ($paramrealtokens) { - $params[] = array( - 'full' => \array_slice($tokens, $param_start, $offset - $param_start), - 'short' => $shortparam, - ); - } - - break; - } - - ++$offset; - } - - // If we're not passed (or at) the line at the end - // of the function call, we're too early so skip it - if ($inner_cursor < $line) { - continue; - } - - // Format the final output parameters - foreach ($params as &$param) { - $name = self::tokensFormatted($param['short']); - $expression = false; - foreach ($name as $token) { - if (self::tokenIsOperator($token)) { - $expression = true; - break; - } - } - - $param = array( - 'name' => self::tokensToString($name), - 'path' => self::tokensToString(self::tokensTrim($param['full'])), - 'expression' => $expression, - ); - } - - // Get the modifiers - --$index; - - while (isset($tokens[$index])) { - if (!isset(self::$ignore[$tokens[$index][0]]) && !isset($identifier[$tokens[$index][0]])) { - break; - } - - --$index; - } - - $mods = array(); - - while (isset($tokens[$index])) { - if (isset(self::$ignore[$tokens[$index][0]])) { - --$index; - continue; - } - - if (isset($modifiers[$tokens[$index][0]])) { - $mods[] = $tokens[$index]; - --$index; - continue; - } - - break; - } - - $function_calls[] = array( - 'parameters' => $params, - 'modifiers' => $mods, - ); - } - - return $function_calls; - } - - private static function realTokenIndex(array $tokens, $index) - { - ++$index; - - while (isset($tokens[$index])) { - if (!isset(self::$ignore[$tokens[$index][0]])) { - return $index; - } - - ++$index; - } - - return null; - } - - /** - * We need a separate method to check if tokens are operators because we - * occasionally add "..." to short parameter versions. If we simply check - * for `$token[0]` then "..." will incorrectly match the "." operator. - * - * @param array|string $token The token to check - * - * @return bool - */ - private static function tokenIsOperator($token) - { - return '...' !== $token && isset(self::$operator[$token[0]]); - } - - private static function tokensToString(array $tokens) - { - $out = ''; - - foreach ($tokens as $token) { - if (\is_string($token)) { - $out .= $token; - } elseif (\is_array($token)) { - $out .= $token[1]; - } - } - - return $out; - } - - private static function tokensTrim(array $tokens) - { - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - unset($tokens[$index]); - } else { - break; - } - } - - $tokens = \array_reverse($tokens); - - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - unset($tokens[$index]); - } else { - break; - } - } - - return \array_reverse($tokens); - } - - private static function tokensFormatted(array $tokens) - { - $space = false; - - $tokens = self::tokensTrim($tokens); - - $output = array(); - $last = null; - - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - if ($space) { - continue; - } - - $next = $tokens[self::realTokenIndex($tokens, $index)]; - - if (isset(self::$strip[$last[0]]) && !self::tokenIsOperator($next)) { - continue; - } - - if (isset(self::$strip[$next[0]]) && $last && !self::tokenIsOperator($last)) { - continue; - } - - $token = ' '; - $space = true; - } else { - $space = false; - $last = $token; - } - - $output[] = $token; - } - - return $output; - } -} diff --git a/system/ThirdParty/Kint/Kint.php b/system/ThirdParty/Kint/Kint.php deleted file mode 100644 index e0ce9633..00000000 --- a/system/ThirdParty/Kint/Kint.php +++ /dev/null @@ -1,756 +0,0 @@ - '', - * app_path() => '', - * config_path() => '', - * database_path() => '', - * public_path() => '', - * resource_path() => '', - * storage_path() => '', - * ]; - * - * Defaults to [$_SERVER['DOCUMENT_ROOT'] => ''] - */ - public static $app_root_dirs = array(); - - /** - * @var int max array/object levels to go deep, if zero no limits are applied - */ - public static $max_depth = 6; - - /** - * @var bool expand all trees by default for rich view - */ - public static $expanded = false; - - /** - * @var bool enable detection when Kint is command line. - * - * Formats output with whitespace only; does not HTML-escape it - */ - public static $cli_detection = true; - - /** - * @var array Kint aliases. Add debug functions in Kint wrappers here to fix modifiers and backtraces - */ - public static $aliases = array( - array('Kint\\Kint', 'dump'), - array('Kint\\Kint', 'trace'), - array('Kint\\Kint', 'dumpArray'), - ); - - /** - * @var array Array of modes to renderer class names - */ - public static $renderers = array( - self::MODE_RICH => 'Kint\\Renderer\\RichRenderer', - self::MODE_PLAIN => 'Kint\\Renderer\\PlainRenderer', - self::MODE_TEXT => 'Kint\\Renderer\\TextRenderer', - self::MODE_CLI => 'Kint\\Renderer\\CliRenderer', - ); - - public static $plugins = array( - 'Kint\\Parser\\ArrayObjectPlugin', - 'Kint\\Parser\\Base64Plugin', - 'Kint\\Parser\\BlacklistPlugin', - 'Kint\\Parser\\ClassMethodsPlugin', - 'Kint\\Parser\\ClassStaticsPlugin', - 'Kint\\Parser\\ClosurePlugin', - 'Kint\\Parser\\ColorPlugin', - 'Kint\\Parser\\DateTimePlugin', - 'Kint\\Parser\\FsPathPlugin', - 'Kint\\Parser\\IteratorPlugin', - 'Kint\\Parser\\JsonPlugin', - 'Kint\\Parser\\MicrotimePlugin', - 'Kint\\Parser\\SimpleXMLElementPlugin', - 'Kint\\Parser\\SplFileInfoPlugin', - 'Kint\\Parser\\SplObjectStoragePlugin', - 'Kint\\Parser\\StreamPlugin', - 'Kint\\Parser\\TablePlugin', - 'Kint\\Parser\\ThrowablePlugin', - 'Kint\\Parser\\TimestampPlugin', - 'Kint\\Parser\\TracePlugin', - 'Kint\\Parser\\XmlPlugin', - ); - - protected static $plugin_pool = array(); - - protected $parser; - protected $renderer; - - public function __construct(Parser $p, Renderer $r) - { - $this->parser = $p; - $this->renderer = $r; - } - - public function setParser(Parser $p) - { - $this->parser = $p; - } - - public function getParser() - { - return $this->parser; - } - - public function setRenderer(Renderer $r) - { - $this->renderer = $r; - } - - public function getRenderer() - { - return $this->renderer; - } - - public function setStatesFromStatics(array $statics) - { - $this->renderer->setStatics($statics); - - $this->parser->setDepthLimit(isset($statics['max_depth']) ? $statics['max_depth'] : false); - $this->parser->clearPlugins(); - - if (!isset($statics['plugins'])) { - return; - } - - $plugins = array(); - - foreach ($statics['plugins'] as $plugin) { - if ($plugin instanceof Plugin) { - $plugins[] = $plugin; - } elseif (\is_string($plugin) && \is_subclass_of($plugin, 'Kint\\Parser\\Plugin')) { - if (!isset(self::$plugin_pool[$plugin])) { - $p = new $plugin(); - self::$plugin_pool[$plugin] = $p; - } - $plugins[] = self::$plugin_pool[$plugin]; - } - } - - $plugins = $this->renderer->filterParserPlugins($plugins); - - foreach ($plugins as $plugin) { - $this->parser->addPlugin($plugin); - } - } - - public function setStatesFromCallInfo(array $info) - { - $this->renderer->setCallInfo($info); - - if (isset($info['modifiers']) && \is_array($info['modifiers']) && \in_array('+', $info['modifiers'], true)) { - $this->parser->setDepthLimit(false); - } - - $this->parser->setCallerClass(isset($info['caller']['class']) ? $info['caller']['class'] : null); - } - - /** - * Renders a list of vars including the pre and post renders. - * - * @param array $vars Data to dump - * @param BasicObject[] $base Base objects - * - * @return string - */ - public function dumpAll(array $vars, array $base) - { - if (\array_keys($vars) !== \array_keys($base)) { - throw new InvalidArgumentException('Kint::dumpAll requires arrays of identical size and keys as arguments'); - } - - $output = $this->renderer->preRender(); - - if ($vars === array()) { - $output .= $this->renderer->renderNothing(); - } - - foreach ($vars as $key => $arg) { - if (!$base[$key] instanceof BasicObject) { - throw new InvalidArgumentException('Kint::dumpAll requires all elements of the second argument to be BasicObject instances'); - } - $output .= $this->dumpVar($arg, $base[$key]); - } - - $output .= $this->renderer->postRender(); - - return $output; - } - - /** - * Dumps and renders a var. - * - * @param mixed $var Data to dump - * @param BasicObject $base Base object - * - * @return string - */ - public function dumpVar(&$var, BasicObject $base) - { - return $this->renderer->render( - $this->parser->parse($var, $base) - ); - } - - /** - * Gets all static settings at once. - * - * @return array Current static settings - */ - public static function getStatics() - { - return array( - 'aliases' => self::$aliases, - 'app_root_dirs' => self::$app_root_dirs, - 'cli_detection' => self::$cli_detection, - 'display_called_from' => self::$display_called_from, - 'enabled_mode' => self::$enabled_mode, - 'expanded' => self::$expanded, - 'file_link_format' => self::$file_link_format, - 'max_depth' => self::$max_depth, - 'mode_default' => self::$mode_default, - 'mode_default_cli' => self::$mode_default_cli, - 'plugins' => self::$plugins, - 'renderers' => self::$renderers, - 'return' => self::$return, - ); - } - - /** - * Creates a Kint instances based on static settings. - * - * Also calls setStatesFromStatics for you - * - * @param array $statics array of statics as returned by getStatics - * - * @return null|\Kint\Kint - */ - public static function createFromStatics(array $statics) - { - $mode = false; - - if (isset($statics['enabled_mode'])) { - $mode = $statics['enabled_mode']; - - if (true === $statics['enabled_mode'] && isset($statics['mode_default'])) { - $mode = $statics['mode_default']; - - if (PHP_SAPI === 'cli' && !empty($statics['cli_detection']) && isset($statics['mode_default_cli'])) { - $mode = $statics['mode_default_cli']; - } - } - } - - if (!$mode) { - return null; - } - - if (!isset($statics['renderers'][$mode])) { - $renderer = new TextRenderer(); - } else { - /** @var Renderer */ - $renderer = new $statics['renderers'][$mode](); - } - - return new self(new Parser(), $renderer); - } - - /** - * Creates base objects given parameter info. - * - * @param array $params Parameters as returned from getCallInfo - * @param int $argc Number of arguments the helper was called with - * - * @return BasicObject[] Base objects for the arguments - */ - public static function getBasesFromParamInfo(array $params, $argc) - { - static $blacklist = array( - 'null', - 'true', - 'false', - 'array(...)', - 'array()', - '[...]', - '[]', - '(...)', - '()', - '"..."', - 'b"..."', - "'...'", - "b'...'", - ); - - $params = \array_values($params); - $bases = array(); - - for ($i = 0; $i < $argc; ++$i) { - if (isset($params[$i])) { - $param = $params[$i]; - } else { - $param = null; - } - - if (!isset($param['name']) || \is_numeric($param['name'])) { - $name = null; - } elseif (\in_array(\strtolower($param['name']), $blacklist, true)) { - $name = null; - } else { - $name = $param['name']; - } - - if (isset($param['path'])) { - $access_path = $param['path']; - - if (!empty($param['expression'])) { - $access_path = '('.$access_path.')'; - } - } else { - $access_path = '$'.$i; - } - - $bases[] = BasicObject::blank($name, $access_path); - } - - return $bases; - } - - /** - * Gets call info from the backtrace, alias, and argument count. - * - * Aliases must be normalized beforehand (Utils::normalizeAliases) - * - * @param array $aliases Call aliases as found in Kint::$aliases - * @param array[] $trace Backtrace - * @param int $argc Number of arguments - * - * @return array{params:null|array, modifiers:array, callee:null|array, caller:null|array, trace:array[]} Call info - */ - public static function getCallInfo(array $aliases, array $trace, $argc) - { - $found = false; - $callee = null; - $caller = null; - $miniTrace = array(); - - foreach ($trace as $index => $frame) { - if (Utils::traceFrameIsListed($frame, $aliases)) { - $found = true; - $miniTrace = array(); - } - - if (!Utils::traceFrameIsListed($frame, array('spl_autoload_call'))) { - $miniTrace[] = $frame; - } - } - - if ($found) { - $callee = \reset($miniTrace) ?: null; - - /** @var null|array Psalm bug workaround */ - $caller = \next($miniTrace) ?: null; - } - - foreach ($miniTrace as $index => $frame) { - if ((0 === $index && $callee === $frame) || isset($frame['file'], $frame['line'])) { - unset($frame['object'], $frame['args']); - $miniTrace[$index] = $frame; - } else { - unset($miniTrace[$index]); - } - } - - $miniTrace = \array_values($miniTrace); - - $call = self::getSingleCall($callee ?: array(), $argc); - - $ret = array( - 'params' => null, - 'modifiers' => array(), - 'callee' => $callee, - 'caller' => $caller, - 'trace' => $miniTrace, - ); - - if ($call) { - $ret['params'] = $call['parameters']; - $ret['modifiers'] = $call['modifiers']; - } - - return $ret; - } - - /** - * Dumps a backtrace. - * - * Functionally equivalent to Kint::dump(1) or Kint::dump(debug_backtrace(true)) - * - * @return int|string - */ - public static function trace() - { - if (!self::$enabled_mode) { - return 0; - } - - Utils::normalizeAliases(self::$aliases); - - $args = \func_get_args(); - - $call_info = self::getCallInfo(self::$aliases, \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), \count($args)); - - $statics = self::getStatics(); - - if (\in_array('~', $call_info['modifiers'], true)) { - $statics['enabled_mode'] = self::MODE_TEXT; - } - - $kintstance = self::createFromStatics($statics); - if (!$kintstance) { - // Should never happen - return 0; // @codeCoverageIgnore - } - - if (\in_array('-', $call_info['modifiers'], true)) { - while (\ob_get_level()) { - \ob_end_clean(); - } - } - - $kintstance->setStatesFromStatics($statics); - $kintstance->setStatesFromCallInfo($call_info); - - $trimmed_trace = array(); - $trace = \debug_backtrace(true); - - foreach ($trace as $frame) { - if (Utils::traceFrameIsListed($frame, self::$aliases)) { - $trimmed_trace = array(); - } - - $trimmed_trace[] = $frame; - } - - $output = $kintstance->dumpAll( - array($trimmed_trace), - array(BasicObject::blank('Kint\\Kint::trace()', 'debug_backtrace(true)')) - ); - - if (self::$return || \in_array('@', $call_info['modifiers'], true)) { - return $output; - } - - echo $output; - - if (\in_array('-', $call_info['modifiers'], true)) { - \flush(); // @codeCoverageIgnore - } - - return 0; - } - - /** - * Dumps some data. - * - * Functionally equivalent to Kint::dump(1) or Kint::dump(debug_backtrace(true)) - * - * @return int|string - */ - public static function dump() - { - if (!self::$enabled_mode) { - return 0; - } - - Utils::normalizeAliases(self::$aliases); - - $args = \func_get_args(); - - $call_info = self::getCallInfo(self::$aliases, \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), \count($args)); - - $statics = self::getStatics(); - - if (\in_array('~', $call_info['modifiers'], true)) { - $statics['enabled_mode'] = self::MODE_TEXT; - } - - $kintstance = self::createFromStatics($statics); - if (!$kintstance) { - // Should never happen - return 0; // @codeCoverageIgnore - } - - if (\in_array('-', $call_info['modifiers'], true)) { - while (\ob_get_level()) { - \ob_end_clean(); - } - } - - $kintstance->setStatesFromStatics($statics); - $kintstance->setStatesFromCallInfo($call_info); - - // If the call is Kint::dump(1) then dump a backtrace instead - if ($args === array(1) && (!isset($call_info['params'][0]['name']) || '1' === $call_info['params'][0]['name'])) { - $args = \debug_backtrace(true); - $trace = array(); - - foreach ($args as $index => $frame) { - if (Utils::traceFrameIsListed($frame, self::$aliases)) { - $trace = array(); - } - - $trace[] = $frame; - } - - if (isset($call_info['callee']['function'])) { - $tracename = $call_info['callee']['function'].'(1)'; - if (isset($call_info['callee']['class'], $call_info['callee']['type'])) { - $tracename = $call_info['callee']['class'].$call_info['callee']['type'].$tracename; - } - } else { - $tracename = 'Kint\\Kint::dump(1)'; - } - - $tracebase = BasicObject::blank($tracename, 'debug_backtrace(true)'); - - $output = $kintstance->dumpAll(array($trace), array($tracebase)); - } else { - $bases = self::getBasesFromParamInfo( - isset($call_info['params']) ? $call_info['params'] : array(), - \count($args) - ); - $output = $kintstance->dumpAll($args, $bases); - } - - if (self::$return || \in_array('@', $call_info['modifiers'], true)) { - return $output; - } - - echo $output; - - if (\in_array('-', $call_info['modifiers'], true)) { - \flush(); // @codeCoverageIgnore - } - - return 0; - } - - /** - * generic path display callback, can be configured in app_root_dirs; purpose is - * to show relevant path info and hide as much of the path as possible. - * - * @param string $file - * - * @return string - */ - public static function shortenPath($file) - { - $file = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', $file)), 'strlen')); - - $longest_match = 0; - $match = '/'; - - foreach (self::$app_root_dirs as $path => $alias) { - if (empty($path)) { - continue; - } - - $path = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', $path)), 'strlen')); - - if (\array_slice($file, 0, \count($path)) === $path && \count($path) > $longest_match) { - $longest_match = \count($path); - $match = $alias; - } - } - - if ($longest_match) { - $file = \array_merge(array($match), \array_slice($file, $longest_match)); - - return \implode('/', $file); - } - - // fallback to find common path with Kint dir - $kint = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', KINT_DIR)), 'strlen')); - - foreach ($file as $i => $part) { - if (!isset($kint[$i]) || $kint[$i] !== $part) { - return ($i ? '.../' : '/').\implode('/', \array_slice($file, $i)); - } - } - - return '/'.\implode('/', $file); - } - - public static function getIdeLink($file, $line) - { - return \str_replace(array('%f', '%l'), array($file, $line), self::$file_link_format); - } - - /** - * Returns specific function call info from a stack trace frame, or null if no match could be found. - * - * @param array $frame The stack trace frame in question - * @param int $argc The amount of arguments received - * - * @return null|array{parameters:array, modifiers:array} params and modifiers, or null if a specific call could not be determined - */ - protected static function getSingleCall(array $frame, $argc) - { - if (!isset($frame['file'], $frame['line'], $frame['function']) || !\is_readable($frame['file'])) { - return null; - } - - if (empty($frame['class'])) { - $callfunc = $frame['function']; - } else { - $callfunc = array($frame['class'], $frame['function']); - } - - $calls = CallFinder::getFunctionCalls( - \file_get_contents($frame['file']), - $frame['line'], - $callfunc - ); - - $return = null; - - foreach ($calls as $call) { - $is_unpack = false; - - // Handle argument unpacking as a last resort - if (KINT_PHP56) { - foreach ($call['parameters'] as $i => &$param) { - if (0 === \strpos($param['name'], '...')) { - if ($i < $argc && $i === \count($call['parameters']) - 1) { - for ($j = 1; $j + $i < $argc; ++$j) { - $call['parameters'][] = array( - 'name' => 'array_values('.\substr($param['name'], 3).')['.$j.']', - 'path' => 'array_values('.\substr($param['path'], 3).')['.$j.']', - 'expression' => false, - ); - } - - $param['name'] = 'reset('.\substr($param['name'], 3).')'; - $param['path'] = 'reset('.\substr($param['path'], 3).')'; - $param['expression'] = false; - } else { - $call['parameters'] = \array_slice($call['parameters'], 0, $i); - } - - $is_unpack = true; - break; - } - - if ($i >= $argc) { - continue 2; - } - } - } - - if ($is_unpack || \count($call['parameters']) === $argc) { - if (null === $return) { - $return = $call; - } else { - // If we have multiple calls on the same line with the same amount of arguments, - // we can't be sure which it is so just return null and let them figure it out - return null; - } - } - } - - return $return; - } -} diff --git a/system/ThirdParty/Kint/Object/BasicObject.php b/system/ThirdParty/Kint/Object/BasicObject.php deleted file mode 100644 index d69347eb..00000000 --- a/system/ThirdParty/Kint/Object/BasicObject.php +++ /dev/null @@ -1,248 +0,0 @@ -representations[$rep->getName()])) { - return false; - } - - if (null === $pos) { - $this->representations[$rep->getName()] = $rep; - } else { - $this->representations = \array_merge( - \array_slice($this->representations, 0, $pos), - array($rep->getName() => $rep), - \array_slice($this->representations, $pos) - ); - } - - return true; - } - - public function replaceRepresentation(Representation $rep, $pos = null) - { - if (null === $pos) { - $this->representations[$rep->getName()] = $rep; - } else { - $this->removeRepresentation($rep); - $this->addRepresentation($rep, $pos); - } - } - - public function removeRepresentation($rep) - { - if ($rep instanceof Representation) { - unset($this->representations[$rep->getName()]); - } elseif (\is_string($rep)) { - unset($this->representations[$rep]); - } - } - - public function getRepresentation($name) - { - if (isset($this->representations[$name])) { - return $this->representations[$name]; - } - } - - public function getRepresentations() - { - return $this->representations; - } - - public function clearRepresentations() - { - $this->representations = array(); - } - - public function getType() - { - return $this->type; - } - - public function getModifiers() - { - $out = $this->getAccess(); - - if ($this->const) { - $out .= ' const'; - } - - if ($this->static) { - $out .= ' static'; - } - - if (\strlen($out)) { - return \ltrim($out); - } - } - - public function getAccess() - { - switch ($this->access) { - case self::ACCESS_PRIVATE: - return 'private'; - case self::ACCESS_PROTECTED: - return 'protected'; - case self::ACCESS_PUBLIC: - return 'public'; - } - } - - public function getName() - { - return $this->name; - } - - public function getOperator() - { - switch ($this->operator) { - case self::OPERATOR_ARRAY: - return '=>'; - case self::OPERATOR_OBJECT: - return '->'; - case self::OPERATOR_STATIC: - return '::'; - } - } - - public function getSize() - { - return $this->size; - } - - public function getValueShort() - { - if ($rep = $this->value) { - if ('boolean' === $this->type) { - return $rep->contents ? 'true' : 'false'; - } - - if ('integer' === $this->type || 'double' === $this->type) { - return $rep->contents; - } - } - } - - public function getAccessPath() - { - return $this->access_path; - } - - public function transplant(BasicObject $old) - { - $this->name = $old->name; - $this->size = $old->size; - $this->access_path = $old->access_path; - $this->access = $old->access; - $this->static = $old->static; - $this->const = $old->const; - $this->type = $old->type; - $this->depth = $old->depth; - $this->owner_class = $old->owner_class; - $this->operator = $old->operator; - $this->reference = $old->reference; - $this->value = $old->value; - $this->representations += $old->representations; - $this->hints = \array_merge($this->hints, $old->hints); - } - - /** - * Creates a new basic object with a name and access path. - * - * @param null|string $name - * @param null|string $access_path - * - * @return \Kint\Object\BasicObject - */ - public static function blank($name = null, $access_path = null) - { - $o = new self(); - $o->name = $name; - $o->access_path = $access_path; - - return $o; - } - - public static function sortByAccess(BasicObject $a, BasicObject $b) - { - static $sorts = array( - self::ACCESS_PUBLIC => 1, - self::ACCESS_PROTECTED => 2, - self::ACCESS_PRIVATE => 3, - self::ACCESS_NONE => 4, - ); - - return $sorts[$a->access] - $sorts[$b->access]; - } - - public static function sortByName(BasicObject $a, BasicObject $b) - { - $ret = \strnatcasecmp($a->name, $b->name); - - if (0 === $ret) { - return (int) \is_int($b->name) - (int) \is_int($a->name); - } - - return $ret; - } -} diff --git a/system/ThirdParty/Kint/Object/BlobObject.php b/system/ThirdParty/Kint/Object/BlobObject.php deleted file mode 100644 index 66d508ff..00000000 --- a/system/ThirdParty/Kint/Object/BlobObject.php +++ /dev/null @@ -1,177 +0,0 @@ -encoding) { - return 'binary '.$this->type; - } - - if ('ASCII' === $this->encoding) { - return $this->type; - } - - return $this->encoding.' '.$this->type; - } - - public function getValueShort() - { - if ($rep = $this->value) { - return '"'.$rep->contents.'"'; - } - } - - public function transplant(BasicObject $old) - { - parent::transplant($old); - - if ($old instanceof self) { - $this->encoding = $old->encoding; - } - } - - public static function strlen($string, $encoding = false) - { - if (\function_exists('mb_strlen')) { - if (false === $encoding) { - $encoding = self::detectEncoding($string); - } - - if ($encoding && 'ASCII' !== $encoding) { - return \mb_strlen($string, $encoding); - } - } - - return \strlen($string); - } - - public static function substr($string, $start, $length = null, $encoding = false) - { - if (\function_exists('mb_substr')) { - if (false === $encoding) { - $encoding = self::detectEncoding($string); - } - - if ($encoding && 'ASCII' !== $encoding) { - return \mb_substr($string, $start, $length, $encoding); - } - } - - // Special case for substr/mb_substr discrepancy - if ('' === $string) { - return ''; - } - - return \substr($string, $start, isset($length) ? $length : PHP_INT_MAX); - } - - public static function detectEncoding($string) - { - if (\function_exists('mb_detect_encoding')) { - if ($ret = \mb_detect_encoding($string, self::$char_encodings, true)) { - return $ret; - } - } - - // Pretty much every character encoding uses first 32 bytes as control - // characters. If it's not a multi-byte format it's safe to say matching - // any control character besides tab, nl, and cr means it's binary. - if (\preg_match('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/', $string)) { - return false; - } - - if (\function_exists('iconv')) { - foreach (self::$legacy_encodings as $encoding) { - if (@\iconv($encoding, $encoding, $string) === $string) { - return $encoding; - } - } - } elseif (!\function_exists('mb_detect_encoding')) { // @codeCoverageIgnore - // If a user has neither mb_detect_encoding, nor iconv, nor the - // polyfills, there's not much we can do about it... - // Pretend it's ASCII and pray the browser renders it properly. - return 'ASCII'; // @codeCoverageIgnore - } - - return false; - } -} diff --git a/system/ThirdParty/Kint/Object/ClosureObject.php b/system/ThirdParty/Kint/Object/ClosureObject.php deleted file mode 100644 index 344eceb2..00000000 --- a/system/ThirdParty/Kint/Object/ClosureObject.php +++ /dev/null @@ -1,68 +0,0 @@ -access_path) { - return parent::getAccessPath().'('.$this->getParams().')'; - } - } - - public function getSize() - { - } - - public function getParams() - { - if (null !== $this->paramcache) { - return $this->paramcache; - } - - $out = array(); - - foreach ($this->parameters as $p) { - $type = $p->getType(); - - $ref = $p->reference ? '&' : ''; - - if ($type) { - $out[] = $type.' '.$ref.$p->getName(); - } else { - $out[] = $ref.$p->getName(); - } - } - - return $this->paramcache = \implode(', ', $out); - } -} diff --git a/system/ThirdParty/Kint/Object/DateTimeObject.php b/system/ThirdParty/Kint/Object/DateTimeObject.php deleted file mode 100644 index f8b1b3fd..00000000 --- a/system/ThirdParty/Kint/Object/DateTimeObject.php +++ /dev/null @@ -1,53 +0,0 @@ -dt = clone $dt; - } - - public function getValueShort() - { - $stamp = $this->dt->format('Y-m-d H:i:s'); - if ((int) ($micro = $this->dt->format('u'))) { - $stamp .= '.'.$micro; - } - $stamp .= $this->dt->format('P T'); - - return $stamp; - } -} diff --git a/system/ThirdParty/Kint/Object/InstanceObject.php b/system/ThirdParty/Kint/Object/InstanceObject.php deleted file mode 100644 index 943b33d8..00000000 --- a/system/ThirdParty/Kint/Object/InstanceObject.php +++ /dev/null @@ -1,78 +0,0 @@ -classname; - } - - public function transplant(BasicObject $old) - { - parent::transplant($old); - - if ($old instanceof self) { - $this->classname = $old->classname; - $this->hash = $old->hash; - $this->filename = $old->filename; - $this->startline = $old->startline; - } - } - - public static function sortByHierarchy($a, $b) - { - if (\is_string($a) && \is_string($b)) { - $aclass = $a; - $bclass = $b; - } elseif (!($a instanceof BasicObject) || !($b instanceof BasicObject)) { - return 0; - } elseif ($a instanceof self && $b instanceof self) { - $aclass = $a->classname; - $bclass = $b->classname; - } else { - return 0; - } - - if (\is_subclass_of($aclass, $bclass)) { - return -1; - } - - if (\is_subclass_of($bclass, $aclass)) { - return 1; - } - - return 0; - } -} diff --git a/system/ThirdParty/Kint/Object/MethodObject.php b/system/ThirdParty/Kint/Object/MethodObject.php deleted file mode 100644 index 78d49de2..00000000 --- a/system/ThirdParty/Kint/Object/MethodObject.php +++ /dev/null @@ -1,253 +0,0 @@ -name = $method->getName(); - $this->filename = $method->getFileName(); - $this->startline = $method->getStartLine(); - $this->endline = $method->getEndLine(); - $this->internal = $method->isInternal(); - $this->docstring = $method->getDocComment(); - $this->return_reference = $method->returnsReference(); - - foreach ($method->getParameters() as $param) { - $this->parameters[] = new ParameterObject($param); - } - - if (KINT_PHP70) { - $this->returntype = $method->getReturnType(); - if ($this->returntype) { - $this->returntype = Utils::getTypeString($this->returntype); - } - } - - if ($method instanceof ReflectionMethod) { - $this->static = $method->isStatic(); - $this->operator = $this->static ? BasicObject::OPERATOR_STATIC : BasicObject::OPERATOR_OBJECT; - $this->abstract = $method->isAbstract(); - $this->final = $method->isFinal(); - $this->owner_class = $method->getDeclaringClass()->name; - $this->access = BasicObject::ACCESS_PUBLIC; - if ($method->isProtected()) { - $this->access = BasicObject::ACCESS_PROTECTED; - } elseif ($method->isPrivate()) { - $this->access = BasicObject::ACCESS_PRIVATE; - } - } - - if ($this->internal) { - return; - } - - $docstring = new DocstringRepresentation( - $this->docstring, - $this->filename, - $this->startline - ); - - $docstring->implicit_label = true; - $this->addRepresentation($docstring); - $this->value = $docstring; - } - - public function setAccessPathFrom(InstanceObject $parent) - { - static $magic = array( - '__call' => true, - '__callstatic' => true, - '__clone' => true, - '__construct' => true, - '__debuginfo' => true, - '__destruct' => true, - '__get' => true, - '__invoke' => true, - '__isset' => true, - '__set' => true, - '__set_state' => true, - '__sleep' => true, - '__tostring' => true, - '__unset' => true, - '__wakeup' => true, - ); - - $name = \strtolower($this->name); - - if ('__construct' === $name) { - $this->access_path = 'new \\'.$parent->getType(); - } elseif ('__invoke' === $name) { - $this->access_path = $parent->access_path; - } elseif ('__clone' === $name) { - $this->access_path = 'clone '.$parent->access_path; - $this->showparams = false; - } elseif ('__tostring' === $name) { - $this->access_path = '(string) '.$parent->access_path; - $this->showparams = false; - } elseif (isset($magic[$name])) { - $this->access_path = null; - } elseif ($this->static) { - $this->access_path = '\\'.$this->owner_class.'::'.$this->name; - } else { - $this->access_path = $parent->access_path.'->'.$this->name; - } - } - - public function getValueShort() - { - if (!$this->value || !($this->value instanceof DocstringRepresentation)) { - return parent::getValueShort(); - } - - $ds = $this->value->getDocstringWithoutComments(); - - if (!$ds) { - return null; - } - - $ds = \explode("\n", $ds); - - $out = ''; - - foreach ($ds as $line) { - if (0 === \strlen(\trim($line)) || '@' === $line[0]) { - break; - } - - $out .= $line.' '; - } - - if (\strlen($out)) { - return \rtrim($out); - } - } - - public function getModifiers() - { - $mods = array( - $this->abstract ? 'abstract' : null, - $this->final ? 'final' : null, - $this->getAccess(), - $this->static ? 'static' : null, - ); - - $out = ''; - - foreach ($mods as $word) { - if (null !== $word) { - $out .= $word.' '; - } - } - - if (\strlen($out)) { - return \rtrim($out); - } - } - - public function getAccessPath() - { - if (null !== $this->access_path) { - if ($this->showparams) { - return parent::getAccessPath().'('.$this->getParams().')'; - } - - return parent::getAccessPath(); - } - } - - public function getParams() - { - if (null !== $this->paramcache) { - return $this->paramcache; - } - - $out = array(); - - foreach ($this->parameters as $p) { - $type = $p->getType(); - if ($type) { - $type .= ' '; - } - - $default = $p->getDefault(); - if ($default) { - $default = ' = '.$default; - } - - $ref = $p->reference ? '&' : ''; - - $out[] = $type.$ref.$p->getName().$default; - } - - return $this->paramcache = \implode(', ', $out); - } - - public function getPhpDocUrl() - { - if (!$this->internal) { - return null; - } - - if ($this->owner_class) { - $class = \strtolower($this->owner_class); - } else { - $class = 'function'; - } - - $funcname = \str_replace('_', '-', \strtolower($this->name)); - - if (0 === \strpos($funcname, '--') && 0 !== \strpos($funcname, '-', 2)) { - $funcname = \substr($funcname, 2); - } - - return 'https://secure.php.net/'.$class.'.'.$funcname; - } -} diff --git a/system/ThirdParty/Kint/Object/ParameterObject.php b/system/ThirdParty/Kint/Object/ParameterObject.php deleted file mode 100644 index 4bed551f..00000000 --- a/system/ThirdParty/Kint/Object/ParameterObject.php +++ /dev/null @@ -1,100 +0,0 @@ -getType()) { - $this->type_hint = Utils::getTypeString($type); - } - } else { - if ($param->isArray()) { - $this->type_hint = 'array'; - } else { - try { - if ($this->type_hint = $param->getClass()) { - $this->type_hint = $this->type_hint->name; - } - } catch (ReflectionException $e) { - \preg_match('/\\[\\s\\<\\w+?>\\s([\\w]+)/s', $param->__toString(), $matches); - $this->type_hint = isset($matches[1]) ? $matches[1] : ''; - } - } - } - - $this->reference = $param->isPassedByReference(); - $this->name = $param->getName(); - $this->position = $param->getPosition(); - - if ($param->isDefaultValueAvailable()) { - /** @var mixed Psalm bug workaround */ - $default = $param->getDefaultValue(); - switch (\gettype($default)) { - case 'NULL': - $this->default = 'null'; - break; - case 'boolean': - $this->default = $default ? 'true' : 'false'; - break; - case 'array': - $this->default = \count($default) ? 'array(...)' : 'array()'; - break; - default: - $this->default = \var_export($default, true); - break; - } - } - } - - public function getType() - { - return $this->type_hint; - } - - public function getName() - { - return '$'.$this->name; - } - - public function getDefault() - { - return $this->default; - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php b/system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php deleted file mode 100644 index d6a072f5..00000000 --- a/system/ThirdParty/Kint/Object/Representation/ColorRepresentation.php +++ /dev/null @@ -1,576 +0,0 @@ - 'f0f8ff', - 'antiquewhite' => 'faebd7', - 'aqua' => '00ffff', - 'aquamarine' => '7fffd4', - 'azure' => 'f0ffff', - 'beige' => 'f5f5dc', - 'bisque' => 'ffe4c4', - 'black' => '000000', - 'blanchedalmond' => 'ffebcd', - 'blue' => '0000ff', - 'blueviolet' => '8a2be2', - 'brown' => 'a52a2a', - 'burlywood' => 'deb887', - 'cadetblue' => '5f9ea0', - 'chartreuse' => '7fff00', - 'chocolate' => 'd2691e', - 'coral' => 'ff7f50', - 'cornflowerblue' => '6495ed', - 'cornsilk' => 'fff8dc', - 'crimson' => 'dc143c', - 'cyan' => '00ffff', - 'darkblue' => '00008b', - 'darkcyan' => '008b8b', - 'darkgoldenrod' => 'b8860b', - 'darkgray' => 'a9a9a9', - 'darkgreen' => '006400', - 'darkgrey' => 'a9a9a9', - 'darkkhaki' => 'bdb76b', - 'darkmagenta' => '8b008b', - 'darkolivegreen' => '556b2f', - 'darkorange' => 'ff8c00', - 'darkorchid' => '9932cc', - 'darkred' => '8b0000', - 'darksalmon' => 'e9967a', - 'darkseagreen' => '8fbc8f', - 'darkslateblue' => '483d8b', - 'darkslategray' => '2f4f4f', - 'darkslategrey' => '2f4f4f', - 'darkturquoise' => '00ced1', - 'darkviolet' => '9400d3', - 'deeppink' => 'ff1493', - 'deepskyblue' => '00bfff', - 'dimgray' => '696969', - 'dimgrey' => '696969', - 'dodgerblue' => '1e90ff', - 'firebrick' => 'b22222', - 'floralwhite' => 'fffaf0', - 'forestgreen' => '228b22', - 'fuchsia' => 'ff00ff', - 'gainsboro' => 'dcdcdc', - 'ghostwhite' => 'f8f8ff', - 'gold' => 'ffd700', - 'goldenrod' => 'daa520', - 'gray' => '808080', - 'green' => '008000', - 'greenyellow' => 'adff2f', - 'grey' => '808080', - 'honeydew' => 'f0fff0', - 'hotpink' => 'ff69b4', - 'indianred' => 'cd5c5c', - 'indigo' => '4b0082', - 'ivory' => 'fffff0', - 'khaki' => 'f0e68c', - 'lavender' => 'e6e6fa', - 'lavenderblush' => 'fff0f5', - 'lawngreen' => '7cfc00', - 'lemonchiffon' => 'fffacd', - 'lightblue' => 'add8e6', - 'lightcoral' => 'f08080', - 'lightcyan' => 'e0ffff', - 'lightgoldenrodyellow' => 'fafad2', - 'lightgray' => 'd3d3d3', - 'lightgreen' => '90ee90', - 'lightgrey' => 'd3d3d3', - 'lightpink' => 'ffb6c1', - 'lightsalmon' => 'ffa07a', - 'lightseagreen' => '20b2aa', - 'lightskyblue' => '87cefa', - 'lightslategray' => '778899', - 'lightslategrey' => '778899', - 'lightsteelblue' => 'b0c4de', - 'lightyellow' => 'ffffe0', - 'lime' => '00ff00', - 'limegreen' => '32cd32', - 'linen' => 'faf0e6', - 'magenta' => 'ff00ff', - 'maroon' => '800000', - 'mediumaquamarine' => '66cdaa', - 'mediumblue' => '0000cd', - 'mediumorchid' => 'ba55d3', - 'mediumpurple' => '9370db', - 'mediumseagreen' => '3cb371', - 'mediumslateblue' => '7b68ee', - 'mediumspringgreen' => '00fa9a', - 'mediumturquoise' => '48d1cc', - 'mediumvioletred' => 'c71585', - 'midnightblue' => '191970', - 'mintcream' => 'f5fffa', - 'mistyrose' => 'ffe4e1', - 'moccasin' => 'ffe4b5', - 'navajowhite' => 'ffdead', - 'navy' => '000080', - 'oldlace' => 'fdf5e6', - 'olive' => '808000', - 'olivedrab' => '6b8e23', - 'orange' => 'ffa500', - 'orangered' => 'ff4500', - 'orchid' => 'da70d6', - 'palegoldenrod' => 'eee8aa', - 'palegreen' => '98fb98', - 'paleturquoise' => 'afeeee', - 'palevioletred' => 'db7093', - 'papayawhip' => 'ffefd5', - 'peachpuff' => 'ffdab9', - 'peru' => 'cd853f', - 'pink' => 'ffc0cb', - 'plum' => 'dda0dd', - 'powderblue' => 'b0e0e6', - 'purple' => '800080', - 'rebeccapurple' => '663399', - 'red' => 'ff0000', - 'rosybrown' => 'bc8f8f', - 'royalblue' => '4169e1', - 'saddlebrown' => '8b4513', - 'salmon' => 'fa8072', - 'sandybrown' => 'f4a460', - 'seagreen' => '2e8b57', - 'seashell' => 'fff5ee', - 'sienna' => 'a0522d', - 'silver' => 'c0c0c0', - 'skyblue' => '87ceeb', - 'slateblue' => '6a5acd', - 'slategray' => '708090', - 'slategrey' => '708090', - 'snow' => 'fffafa', - 'springgreen' => '00ff7f', - 'steelblue' => '4682b4', - 'tan' => 'd2b48c', - 'teal' => '008080', - 'thistle' => 'd8bfd8', - 'tomato' => 'ff6347', - // To quote MDN: - // "Technically, transparent is a shortcut for rgba(0,0,0,0)." - 'transparent' => '00000000', - 'turquoise' => '40e0d0', - 'violet' => 'ee82ee', - 'wheat' => 'f5deb3', - 'white' => 'ffffff', - 'whitesmoke' => 'f5f5f5', - 'yellow' => 'ffff00', - 'yellowgreen' => '9acd32', - ); - - public $r = 0; - public $g = 0; - public $b = 0; - public $a = 1.0; - public $variant; - public $implicit_label = true; - public $hints = array('color'); - - public function __construct($value) - { - parent::__construct('Color'); - - $this->contents = $value; - $this->setValues($value); - } - - public function getColor($variant = null) - { - if (!$variant) { - $variant = $this->variant; - } - - switch ($variant) { - case self::COLOR_NAME: - $hex = \sprintf('%02x%02x%02x', $this->r, $this->g, $this->b); - $hex_alpha = \sprintf('%02x%02x%02x%02x', $this->r, $this->g, $this->b, \round($this->a * 0xFF)); - - return \array_search($hex, self::$color_map, true) ?: \array_search($hex_alpha, self::$color_map, true); - case self::COLOR_HEX_3: - if (0 === $this->r % 0x11 && 0 === $this->g % 0x11 && 0 === $this->b % 0x11) { - return \sprintf( - '#%1X%1X%1X', - \round($this->r / 0x11), - \round($this->g / 0x11), - \round($this->b / 0x11) - ); - } - - return false; - case self::COLOR_HEX_6: - return \sprintf('#%02X%02X%02X', $this->r, $this->g, $this->b); - case self::COLOR_RGB: - if (1.0 === $this->a) { - return \sprintf('rgb(%d, %d, %d)', $this->r, $this->g, $this->b); - } - - return \sprintf('rgb(%d, %d, %d, %s)', $this->r, $this->g, $this->b, \round($this->a, 4)); - case self::COLOR_RGBA: - return \sprintf('rgba(%d, %d, %d, %s)', $this->r, $this->g, $this->b, \round($this->a, 4)); - case self::COLOR_HSL: - $val = self::rgbToHsl($this->r, $this->g, $this->b); - if (1.0 === $this->a) { - return \vsprintf('hsl(%d, %d%%, %d%%)', $val); - } - - return \sprintf('hsl(%d, %d%%, %d%%, %s)', $val[0], $val[1], $val[2], \round($this->a, 4)); - case self::COLOR_HSLA: - $val = self::rgbToHsl($this->r, $this->g, $this->b); - - return \sprintf('hsla(%d, %d%%, %d%%, %s)', $val[0], $val[1], $val[2], \round($this->a, 4)); - case self::COLOR_HEX_4: - if (0 === $this->r % 0x11 && 0 === $this->g % 0x11 && 0 === $this->b % 0x11 && 0 === ($this->a * 255) % 0x11) { - return \sprintf( - '#%1X%1X%1X%1X', - \round($this->r / 0x11), - \round($this->g / 0x11), - \round($this->b / 0x11), - \round($this->a * 0xF) - ); - } - - return false; - - case self::COLOR_HEX_8: - return \sprintf('#%02X%02X%02X%02X', $this->r, $this->g, $this->b, \round($this->a * 0xFF)); - } - - return false; - } - - public function hasAlpha($variant = null) - { - if (null === $variant) { - $variant = $this->variant; - } - - switch ($variant) { - case self::COLOR_NAME: - case self::COLOR_RGB: - case self::COLOR_HSL: - return \abs($this->a - 1) >= 0.0001; - case self::COLOR_RGBA: - case self::COLOR_HSLA: - case self::COLOR_HEX_4: - case self::COLOR_HEX_8: - return true; - default: - return false; - } - } - - protected function setValues($value) - { - $value = \strtolower(\trim($value)); - // Find out which variant of color input it is - if (isset(self::$color_map[$value])) { - if (!$this->setValuesFromHex(self::$color_map[$value])) { - return; - } - - $variant = self::COLOR_NAME; - } elseif ('#' === $value[0]) { - $variant = $this->setValuesFromHex(\substr($value, 1)); - - if (!$variant) { - return; - } - } else { - $variant = $this->setValuesFromFunction($value); - - if (!$variant) { - return; - } - } - - // If something has gone horribly wrong - if ($this->r > 0xFF || $this->g > 0xFF || $this->b > 0xFF || $this->a > 1) { - $this->variant = null; // @codeCoverageIgnore - } else { - $this->variant = $variant; - $this->r = (int) $this->r; - $this->g = (int) $this->g; - $this->b = (int) $this->b; - $this->a = (float) $this->a; - } - } - - protected function setValuesFromHex($hex) - { - if (!\ctype_xdigit($hex)) { - return null; - } - - switch (\strlen($hex)) { - case 3: - $variant = self::COLOR_HEX_3; - break; - case 6: - $variant = self::COLOR_HEX_6; - break; - case 4: - $variant = self::COLOR_HEX_4; - break; - case 8: - $variant = self::COLOR_HEX_8; - break; - default: - return null; - } - - switch ($variant) { - case self::COLOR_HEX_4: - $this->a = \hexdec($hex[3]) / 0xF; - // no break - case self::COLOR_HEX_3: - $this->r = \hexdec($hex[0]) * 0x11; - $this->g = \hexdec($hex[1]) * 0x11; - $this->b = \hexdec($hex[2]) * 0x11; - break; - case self::COLOR_HEX_8: - $this->a = \hexdec(\substr($hex, 6, 2)) / 0xFF; - // no break - case self::COLOR_HEX_6: - $hex = \str_split($hex, 2); - $this->r = \hexdec($hex[0]); - $this->g = \hexdec($hex[1]); - $this->b = \hexdec($hex[2]); - break; - } - - return $variant; - } - - protected function setValuesFromFunction($value) - { - if (!\preg_match('/^((?:rgb|hsl)a?)\\s*\\(([0-9\\.%,\\s\\/\\-]+)\\)$/i', $value, $match)) { - return null; - } - - switch (\strtolower($match[1])) { - case 'rgb': - $variant = self::COLOR_RGB; - break; - case 'rgba': - $variant = self::COLOR_RGBA; - break; - case 'hsl': - $variant = self::COLOR_HSL; - break; - case 'hsla': - $variant = self::COLOR_HSLA; - break; - default: - return null; // @codeCoverageIgnore - } - - $params = \preg_replace('/[,\\s\\/]+/', ',', \trim($match[2])); - $params = \explode(',', $params); - $params = \array_map('trim', $params); - - if (\count($params) < 3 || \count($params) > 4) { - return null; - } - - foreach ($params as $i => &$color) { - if (false !== \strpos($color, '%')) { - $color = (float) \str_replace('%', '', $color); - - if (3 === $i) { - $color = $color / 100; - } elseif (\in_array($variant, array(self::COLOR_RGB, self::COLOR_RGBA), true)) { - $color = \round($color / 100 * 0xFF); - } - } - - $color = (float) $color; - - if (0 === $i && \in_array($variant, array(self::COLOR_HSL, self::COLOR_HSLA), true)) { - $color = ($color % 360 + 360) % 360; - } - } - - /** @var float[] Psalm bug workaround */ - $params = \array_map('floatval', $params); - - switch ($variant) { - case self::COLOR_RGBA: - case self::COLOR_RGB: - if (\min($params) < 0 || \max($params) > 0xFF) { - return null; - } - break; - case self::COLOR_HSLA: - case self::COLOR_HSL: - if (\min($params) < 0 || $params[0] > 360 || \max($params[1], $params[2]) > 100) { - return null; - } - break; - } - - if (4 === \count($params)) { - if ($params[3] > 1) { - return null; - } - - $this->a = $params[3]; - } - - if (self::COLOR_HSLA === $variant || self::COLOR_HSL === $variant) { - $params = self::hslToRgb($params[0], $params[1], $params[2]); - } - - list($this->r, $this->g, $this->b) = $params; - - return $variant; - } - - /** - * Turns HSL color to RGB. Black magic. - * - * @param float $h Hue - * @param float $s Saturation - * @param float $l Lightness - * - * @return int[] RGB array - */ - public static function hslToRgb($h, $s, $l) - { - if (\min($h, $s, $l) < 0) { - throw new InvalidArgumentException('The parameters for hslToRgb should be no less than 0'); - } - - if ($h > 360 || \max($s, $l) > 100) { - throw new InvalidArgumentException('The parameters for hslToRgb should be no more than 360, 100, and 100 respectively'); - } - - $h /= 360; - $s /= 100; - $l /= 100; - - $m2 = ($l <= 0.5) ? $l * ($s + 1) : $l + $s - $l * $s; - $m1 = $l * 2 - $m2; - - return array( - (int) \round(self::hueToRgb($m1, $m2, $h + 1 / 3) * 0xFF), - (int) \round(self::hueToRgb($m1, $m2, $h) * 0xFF), - (int) \round(self::hueToRgb($m1, $m2, $h - 1 / 3) * 0xFF), - ); - } - - /** - * Converts RGB to HSL. Color inversion of previous black magic is white magic? - * - * @param float|int $red Red - * @param float|int $green Green - * @param float|int $blue Blue - * - * @return float[] HSL array - */ - public static function rgbToHsl($red, $green, $blue) - { - if (\min($red, $green, $blue) < 0) { - throw new InvalidArgumentException('The parameters for rgbToHsl should be no less than 0'); - } - - if (\max($red, $green, $blue) > 0xFF) { - throw new InvalidArgumentException('The parameters for rgbToHsl should be no more than 255'); - } - - $clrMin = \min($red, $green, $blue); - $clrMax = \max($red, $green, $blue); - $deltaMax = $clrMax - $clrMin; - - $L = ($clrMax + $clrMin) / 510; - - if (0 == $deltaMax) { - $H = 0; - $S = 0; - } else { - if (0.5 > $L) { - $S = $deltaMax / ($clrMax + $clrMin); - } else { - $S = $deltaMax / (510 - $clrMax - $clrMin); - } - - if ($clrMax === $red) { - $H = ($green - $blue) / (6.0 * $deltaMax); - - if (0 > $H) { - $H += 1.0; - } - } elseif ($clrMax === $green) { - $H = 1 / 3 + ($blue - $red) / (6.0 * $deltaMax); - } else { - $H = 2 / 3 + ($red - $green) / (6.0 * $deltaMax); - } - } - - return array( - (float) ($H * 360 % 360), - (float) ($S * 100), - (float) ($L * 100), - ); - } - - /** - * Helper function for hslToRgb. Even blacker magic. - * - * - * @param float $m1 - * @param float $m2 - * @param float $hue - * - * @return float Color value - */ - private static function hueToRgb($m1, $m2, $hue) - { - $hue = ($hue < 0) ? $hue + 1 : (($hue > 1) ? $hue - 1 : $hue); - if ($hue * 6 < 1) { - return $m1 + ($m2 - $m1) * $hue * 6; - } - if ($hue * 2 < 1) { - return $m2; - } - if ($hue * 3 < 2) { - return $m1 + ($m2 - $m1) * (2 / 3 - $hue) * 6; - } - - return $m1; - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php b/system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php deleted file mode 100644 index 488d8d6e..00000000 --- a/system/ThirdParty/Kint/Object/Representation/DocstringRepresentation.php +++ /dev/null @@ -1,73 +0,0 @@ -file = $file; - $this->line = $line; - $this->class = $class; - $this->contents = $docstring; - } - - /** - * Returns the representation's docstring without surrounding comments. - * - * Note that this will not work flawlessly. - * - * On comments with whitespace after the stars the lines will begin with - * whitespace, since we can't accurately guess how much of an indentation - * is required. - * - * And on lines without stars on the left this may eat bullet points. - * - * Long story short: If you want the docstring read the contents. If you - * absolutely must have it without comments (ie renderValueShort) this will - * probably do. - * - * @return null|string Docstring with comments stripped - */ - public function getDocstringWithoutComments() - { - if (!$this->contents) { - return null; - } - - $string = \substr($this->contents, 3, -2); - $string = \preg_replace('/^\\s*\\*\\s*?(\\S|$)/m', '\\1', $string); - - return \trim($string); - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php b/system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php deleted file mode 100644 index b9f4dacb..00000000 --- a/system/ThirdParty/Kint/Object/Representation/MicrotimeRepresentation.php +++ /dev/null @@ -1,71 +0,0 @@ -seconds = (int) $seconds; - $this->microseconds = (int) $microseconds; - - $this->group = $group; - $this->lap = $lap; - $this->total = $total; - $this->i = $i; - - if ($i) { - $this->avg = $total / $i; - } - - $this->mem = \memory_get_usage(); - $this->mem_real = \memory_get_usage(true); - $this->mem_peak = \memory_get_peak_usage(); - $this->mem_peak_real = \memory_get_peak_usage(true); - } - - public function getDateTime() - { - return DateTime::createFromFormat('U u', $this->seconds.' '.\str_pad($this->microseconds, 6, '0', STR_PAD_LEFT)); - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/Representation.php b/system/ThirdParty/Kint/Object/Representation/Representation.php deleted file mode 100644 index 0c911a4e..00000000 --- a/system/ThirdParty/Kint/Object/Representation/Representation.php +++ /dev/null @@ -1,71 +0,0 @@ -label = $label; - - if (null === $name) { - $name = $label; - } - - $this->setName($name); - } - - public function getLabel() - { - if (\is_array($this->contents) && \count($this->contents) > 1) { - return $this->label.' ('.\count($this->contents).')'; - } - - return $this->label; - } - - public function getName() - { - return $this->name; - } - - public function setName($name) - { - $this->name = \preg_replace('/[^a-z0-9]+/', '_', \strtolower($name)); - } - - public function labelIsImplicit() - { - return $this->implicit_label; - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php b/system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php deleted file mode 100644 index c2cf1204..00000000 --- a/system/ThirdParty/Kint/Object/Representation/SourceRepresentation.php +++ /dev/null @@ -1,72 +0,0 @@ -filename = $filename; - $this->line = $line; - - $start_line = \max($line - $padding, 1); - $length = $line + $padding + 1 - $start_line; - $this->source = self::getSource($filename, $start_line, $length); - if (null !== $this->source) { - $this->contents = \implode("\n", $this->source); - } - } - - /** - * Gets section of source code. - * - * @param string $filename Full path to file - * @param int $start_line The first line to display (1 based) - * @param null|int $length Amount of lines to show - * - * @return null|array - */ - public static function getSource($filename, $start_line = 1, $length = null) - { - if (!$filename || !\file_exists($filename) || !\is_readable($filename)) { - return null; - } - - $source = \preg_split("/\r\n|\n|\r/", \file_get_contents($filename)); - $source = \array_combine(\range(1, \count($source)), $source); - $source = \array_slice($source, $start_line - 1, $length, true); - - return $source; - } -} diff --git a/system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php b/system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php deleted file mode 100644 index 3df50e6a..00000000 --- a/system/ThirdParty/Kint/Object/Representation/SplFileInfoRepresentation.php +++ /dev/null @@ -1,177 +0,0 @@ -getRealPath()) { - $this->realpath = $fileInfo->getRealPath(); - $this->perms = $fileInfo->getPerms(); - $this->size = $fileInfo->getSize(); - $this->owner = $fileInfo->getOwner(); - $this->group = $fileInfo->getGroup(); - $this->ctime = $fileInfo->getCTime(); - $this->mtime = $fileInfo->getMTime(); - } - - $this->path = $fileInfo->getPathname(); - - $this->is_dir = $fileInfo->isDir(); - $this->is_file = $fileInfo->isFile(); - $this->is_link = $fileInfo->isLink(); - - if ($this->is_link) { - $this->linktarget = $fileInfo->getLinkTarget(); - } - - switch ($this->perms & 0xF000) { - case 0xC000: - $this->typename = 'Socket'; - $this->typeflag = 's'; - break; - case 0x6000: - $this->typename = 'Block device'; - $this->typeflag = 'b'; - break; - case 0x2000: - $this->typename = 'Character device'; - $this->typeflag = 'c'; - break; - case 0x1000: - $this->typename = 'Named pipe'; - $this->typeflag = 'p'; - break; - default: - if ($this->is_file) { - if ($this->is_link) { - $this->typename = 'File symlink'; - $this->typeflag = 'l'; - } else { - $this->typename = 'File'; - $this->typeflag = '-'; - } - } elseif ($this->is_dir) { - if ($this->is_link) { - $this->typename = 'Directory symlink'; - $this->typeflag = 'l'; - } else { - $this->typename = 'Directory'; - $this->typeflag = 'd'; - } - } - break; - } - - $this->flags = array($this->typeflag); - - // User - $this->flags[] = (($this->perms & 0400) ? 'r' : '-'); - $this->flags[] = (($this->perms & 0200) ? 'w' : '-'); - if ($this->perms & 0100) { - $this->flags[] = ($this->perms & 04000) ? 's' : 'x'; - } else { - $this->flags[] = ($this->perms & 04000) ? 'S' : '-'; - } - - // Group - $this->flags[] = (($this->perms & 0040) ? 'r' : '-'); - $this->flags[] = (($this->perms & 0020) ? 'w' : '-'); - if ($this->perms & 0010) { - $this->flags[] = ($this->perms & 02000) ? 's' : 'x'; - } else { - $this->flags[] = ($this->perms & 02000) ? 'S' : '-'; - } - - // Other - $this->flags[] = (($this->perms & 0004) ? 'r' : '-'); - $this->flags[] = (($this->perms & 0002) ? 'w' : '-'); - if ($this->perms & 0001) { - $this->flags[] = ($this->perms & 01000) ? 's' : 'x'; - } else { - $this->flags[] = ($this->perms & 01000) ? 'S' : '-'; - } - - $this->contents = \implode($this->flags).' '.$this->owner.' '.$this->group; - $this->contents .= ' '.$this->getSize().' '.$this->getMTime().' '; - - if ($this->is_link && $this->linktarget) { - $this->contents .= $this->path.' -> '.$this->linktarget; - } elseif (null !== $this->realpath && \strlen($this->realpath) < \strlen($this->path)) { - $this->contents .= $this->realpath; - } else { - $this->contents .= $this->path; - } - } - - public function getLabel() - { - return $this->typename.' ('.$this->getSize().')'; - } - - public function getSize() - { - if ($this->size) { - $size = Utils::getHumanReadableBytes($this->size); - - return \round($size['value'], 2).$size['unit']; - } - } - - public function getMTime() - { - $year = \date('Y', $this->mtime); - - if ($year !== \date('Y')) { - return \date('M d Y', $this->mtime); - } - - return \date('M d H:i', $this->mtime); - } -} diff --git a/system/ThirdParty/Kint/Object/ResourceObject.php b/system/ThirdParty/Kint/Object/ResourceObject.php deleted file mode 100644 index a43f85d9..00000000 --- a/system/ThirdParty/Kint/Object/ResourceObject.php +++ /dev/null @@ -1,49 +0,0 @@ -resource_type) { - return $this->resource_type.' resource'; - } - - return 'resource'; - } - - public function transplant(BasicObject $old) - { - parent::transplant($old); - - if ($old instanceof self) { - $this->resource_type = $old->resource_type; - } - } -} diff --git a/system/ThirdParty/Kint/Object/StreamObject.php b/system/ThirdParty/Kint/Object/StreamObject.php deleted file mode 100644 index 358f2743..00000000 --- a/system/ThirdParty/Kint/Object/StreamObject.php +++ /dev/null @@ -1,54 +0,0 @@ -stream_meta = $meta; - } - - public function getValueShort() - { - if (empty($this->stream_meta['uri'])) { - return; - } - - $uri = $this->stream_meta['uri']; - - if (\stream_is_local($uri)) { - return Kint::shortenPath($uri); - } - - return $uri; - } -} diff --git a/system/ThirdParty/Kint/Object/ThrowableObject.php b/system/ThirdParty/Kint/Object/ThrowableObject.php deleted file mode 100644 index 2a86d575..00000000 --- a/system/ThirdParty/Kint/Object/ThrowableObject.php +++ /dev/null @@ -1,54 +0,0 @@ -message = $throw->getMessage(); - } - - public function getValueShort() - { - if (\strlen($this->message)) { - return '"'.$this->message.'"'; - } - } -} diff --git a/system/ThirdParty/Kint/Object/TraceFrameObject.php b/system/ThirdParty/Kint/Object/TraceFrameObject.php deleted file mode 100644 index 4259aeee..00000000 --- a/system/ThirdParty/Kint/Object/TraceFrameObject.php +++ /dev/null @@ -1,100 +0,0 @@ -transplant($base); - - $this->trace = array( - 'function' => isset($raw_frame['function']) ? $raw_frame['function'] : null, - 'line' => isset($raw_frame['line']) ? $raw_frame['line'] : null, - 'file' => isset($raw_frame['file']) ? $raw_frame['file'] : null, - 'class' => isset($raw_frame['class']) ? $raw_frame['class'] : null, - 'type' => isset($raw_frame['type']) ? $raw_frame['type'] : null, - 'object' => null, - 'args' => null, - ); - - if ($this->trace['class'] && \method_exists($this->trace['class'], $this->trace['function'])) { - $func = new ReflectionMethod($this->trace['class'], $this->trace['function']); - $this->trace['function'] = new MethodObject($func); - } elseif (!$this->trace['class'] && \function_exists($this->trace['function'])) { - $func = new ReflectionFunction($this->trace['function']); - $this->trace['function'] = new MethodObject($func); - } - - foreach ($this->value->contents as $frame_prop) { - if ('object' === $frame_prop->name) { - $this->trace['object'] = $frame_prop; - $this->trace['object']->name = null; - $this->trace['object']->operator = BasicObject::OPERATOR_NONE; - } - if ('args' === $frame_prop->name) { - $this->trace['args'] = $frame_prop->value->contents; - - if ($this->trace['function'] instanceof MethodObject) { - foreach (\array_values($this->trace['function']->parameters) as $param) { - if (isset($this->trace['args'][$param->position])) { - $this->trace['args'][$param->position]->name = $param->getName(); - } - } - } - } - } - - $this->clearRepresentations(); - - if (isset($this->trace['file'], $this->trace['line']) && \is_readable($this->trace['file'])) { - $this->addRepresentation(new SourceRepresentation($this->trace['file'], $this->trace['line'])); - } - - if ($this->trace['args']) { - $args = new Representation('Arguments'); - $args->contents = $this->trace['args']; - $this->addRepresentation($args); - } - - if ($this->trace['object']) { - $callee = new Representation('object'); - $callee->label = 'Callee object ['.$this->trace['object']->classname.']'; - $callee->contents[] = $this->trace['object']; - $this->addRepresentation($callee); - } - } -} diff --git a/system/ThirdParty/Kint/Object/TraceObject.php b/system/ThirdParty/Kint/Object/TraceObject.php deleted file mode 100644 index a780b082..00000000 --- a/system/ThirdParty/Kint/Object/TraceObject.php +++ /dev/null @@ -1,45 +0,0 @@ -size) { - return 'empty'; - } - - return parent::getSize(); - } -} diff --git a/system/ThirdParty/Kint/Parser/ArrayObjectPlugin.php b/system/ThirdParty/Kint/Parser/ArrayObjectPlugin.php deleted file mode 100644 index 286d255b..00000000 --- a/system/ThirdParty/Kint/Parser/ArrayObjectPlugin.php +++ /dev/null @@ -1,63 +0,0 @@ -getFlags(); - - if (ArrayObject::STD_PROP_LIST === $flags) { - return; - } - - $var->setFlags(ArrayObject::STD_PROP_LIST); - - $o = $this->parser->parse($var, $o); - - $var->setFlags($flags); - - $this->parser->haltParse(); - } -} diff --git a/system/ThirdParty/Kint/Parser/Base64Plugin.php b/system/ThirdParty/Kint/Parser/Base64Plugin.php deleted file mode 100644 index 3d7d6bc2..00000000 --- a/system/ThirdParty/Kint/Parser/Base64Plugin.php +++ /dev/null @@ -1,95 +0,0 @@ -depth = $o->depth + 1; - $base_obj->name = 'base64_decode('.$o->name.')'; - - if ($o->access_path) { - $base_obj->access_path = 'base64_decode('.$o->access_path.')'; - } - - $r = new Representation('Base64'); - $r->contents = $this->parser->parse($data, $base_obj); - - if (\strlen($var) > self::$min_length_soft) { - $o->addRepresentation($r, 0); - } else { - $o->addRepresentation($r); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/BinaryPlugin.php b/system/ThirdParty/Kint/Parser/BinaryPlugin.php deleted file mode 100644 index 327c297c..00000000 --- a/system/ThirdParty/Kint/Parser/BinaryPlugin.php +++ /dev/null @@ -1,49 +0,0 @@ -encoding, array('ASCII', 'UTF-8'), true)) { - $o->value->hints[] = 'binary'; - } - } -} diff --git a/system/ThirdParty/Kint/Parser/BlacklistPlugin.php b/system/ThirdParty/Kint/Parser/BlacklistPlugin.php deleted file mode 100644 index b37e45ff..00000000 --- a/system/ThirdParty/Kint/Parser/BlacklistPlugin.php +++ /dev/null @@ -1,143 +0,0 @@ -parseObject($var, $o); - } - if (\is_array($var)) { - return $this->parseArray($var, $o); - } - } - - protected function parseObject(&$var, BasicObject &$o) - { - foreach (self::$blacklist as $class) { - if ($var instanceof $class) { - return $this->blacklistObject($var, $o); - } - } - - if ($o->depth <= 0) { - return; - } - - foreach (self::$shallow_blacklist as $class) { - if ($var instanceof $class) { - return $this->blacklistObject($var, $o); - } - } - } - - protected function blacklistObject(&$var, BasicObject &$o) - { - $object = new InstanceObject(); - $object->transplant($o); - $object->classname = \get_class($var); - $object->hash = \spl_object_hash($var); - $object->clearRepresentations(); - $object->value = null; - $object->size = null; - $object->hints[] = 'blacklist'; - - $o = $object; - - $this->parser->haltParse(); - } - - protected function parseArray(array &$var, BasicObject &$o) - { - if (\count($var) > self::$array_limit) { - return $this->blacklistArray($var, $o); - } - - if ($o->depth <= 0) { - return; - } - - if (\count($var) > self::$shallow_array_limit) { - return $this->blacklistArray($var, $o); - } - } - - protected function blacklistArray(array &$var, BasicObject &$o) - { - $object = new BasicObject(); - $object->transplant($o); - $object->value = null; - $object->size = \count($var); - $object->hints[] = 'blacklist'; - - $o = $object; - - $this->parser->haltParse(); - } -} diff --git a/system/ThirdParty/Kint/Parser/ClassMethodsPlugin.php b/system/ThirdParty/Kint/Parser/ClassMethodsPlugin.php deleted file mode 100644 index e4c23716..00000000 --- a/system/ThirdParty/Kint/Parser/ClassMethodsPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -getMethods() as $method) { - $methods[] = new MethodObject($method); - } - - \usort($methods, array('Kint\\Parser\\ClassMethodsPlugin', 'sort')); - - self::$cache[$class] = $methods; - } - - if (!empty(self::$cache[$class])) { - $rep = new Representation('Available methods', 'methods'); - - // Can't cache access paths - foreach (self::$cache[$class] as $m) { - $method = clone $m; - $method->depth = $o->depth + 1; - - if (!$this->parser->childHasPath($o, $method)) { - $method->access_path = null; - } else { - $method->setAccessPathFrom($o); - } - - if ($method->owner_class !== $class && $ds = $method->getRepresentation('docstring')) { - $ds = clone $ds; - $ds->class = $method->owner_class; - $method->replaceRepresentation($ds); - } - - $rep->contents[] = $method; - } - - $o->addRepresentation($rep); - } - } - - private static function sort(MethodObject $a, MethodObject $b) - { - $sort = ((int) $a->static) - ((int) $b->static); - if ($sort) { - return $sort; - } - - $sort = BasicObject::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - $sort = InstanceObject::sortByHierarchy($a->owner_class, $b->owner_class); - if ($sort) { - return $sort; - } - - return $a->startline - $b->startline; - } -} diff --git a/system/ThirdParty/Kint/Parser/ClassStaticsPlugin.php b/system/ThirdParty/Kint/Parser/ClassStaticsPlugin.php deleted file mode 100644 index 0ba58ca2..00000000 --- a/system/ThirdParty/Kint/Parser/ClassStaticsPlugin.php +++ /dev/null @@ -1,122 +0,0 @@ -getConstants() as $name => $val) { - $const = BasicObject::blank($name, '\\'.$class.'::'.$name); - $const->const = true; - $const->depth = $o->depth + 1; - $const->owner_class = $class; - $const->operator = BasicObject::OPERATOR_STATIC; - $const = $this->parser->parse($val, $const); - - $consts[] = $const; - } - - self::$cache[$class] = $consts; - } - - $statics = new Representation('Static class properties', 'statics'); - $statics->contents = self::$cache[$class]; - - foreach ($reflection->getProperties(ReflectionProperty::IS_STATIC) as $static) { - $prop = new BasicObject(); - $prop->name = '$'.$static->getName(); - $prop->depth = $o->depth + 1; - $prop->static = true; - $prop->operator = BasicObject::OPERATOR_STATIC; - $prop->owner_class = $static->getDeclaringClass()->name; - - $prop->access = BasicObject::ACCESS_PUBLIC; - if ($static->isProtected()) { - $prop->access = BasicObject::ACCESS_PROTECTED; - } elseif ($static->isPrivate()) { - $prop->access = BasicObject::ACCESS_PRIVATE; - } - - if ($this->parser->childHasPath($o, $prop)) { - $prop->access_path = '\\'.$prop->owner_class.'::'.$prop->name; - } - - $static->setAccessible(true); - $static = $static->getValue(); - $statics->contents[] = $this->parser->parse($static, $prop); - } - - if (empty($statics->contents)) { - return; - } - - \usort($statics->contents, array('Kint\\Parser\\ClassStaticsPlugin', 'sort')); - - $o->addRepresentation($statics); - } - - private static function sort(BasicObject $a, BasicObject $b) - { - $sort = ((int) $a->const) - ((int) $b->const); - if ($sort) { - return $sort; - } - - $sort = BasicObject::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - return InstanceObject::sortByHierarchy($a->owner_class, $b->owner_class); - } -} diff --git a/system/ThirdParty/Kint/Parser/ClosurePlugin.php b/system/ThirdParty/Kint/Parser/ClosurePlugin.php deleted file mode 100644 index 73e367b2..00000000 --- a/system/ThirdParty/Kint/Parser/ClosurePlugin.php +++ /dev/null @@ -1,94 +0,0 @@ -transplant($o); - $o = $object; - $object->removeRepresentation('properties'); - - $closure = new ReflectionFunction($var); - - $o->filename = $closure->getFileName(); - $o->startline = $closure->getStartLine(); - - foreach ($closure->getParameters() as $param) { - $o->parameters[] = new ParameterObject($param); - } - - $p = new Representation('Parameters'); - $p->contents = &$o->parameters; - $o->addRepresentation($p, 0); - - $statics = array(); - - if (\method_exists($closure, 'getClosureThis') && $v = $closure->getClosureThis()) { - $statics = array('this' => $v); - } - - if (\count($statics = $statics + $closure->getStaticVariables())) { - $statics_parsed = array(); - - foreach ($statics as $name => &$static) { - $obj = BasicObject::blank('$'.$name); - $obj->depth = $o->depth + 1; - $statics_parsed[$name] = $this->parser->parse($static, $obj); - if (null === $statics_parsed[$name]->value) { - $statics_parsed[$name]->access_path = null; - } - } - - $r = new Representation('Uses'); - $r->contents = $statics_parsed; - $o->addRepresentation($r, 0); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/ColorPlugin.php b/system/ThirdParty/Kint/Parser/ColorPlugin.php deleted file mode 100644 index 0d748f2c..00000000 --- a/system/ThirdParty/Kint/Parser/ColorPlugin.php +++ /dev/null @@ -1,63 +0,0 @@ - 32) { - return; - } - - $trimmed = \strtolower(\trim($var)); - - if (!isset(ColorRepresentation::$color_map[$trimmed]) && !\preg_match('/^(?:(?:rgb|hsl)[^\\)]{6,}\\)|#[0-9a-fA-F]{3,8})$/', $trimmed)) { - return; - } - - $rep = new ColorRepresentation($var); - - if ($rep->variant) { - $o->removeRepresentation($o->value); - $o->addRepresentation($rep, 0); - $o->hints[] = 'color'; - } - } -} diff --git a/system/ThirdParty/Kint/Parser/DOMDocumentPlugin.php b/system/ThirdParty/Kint/Parser/DOMDocumentPlugin.php deleted file mode 100644 index ec08d311..00000000 --- a/system/ThirdParty/Kint/Parser/DOMDocumentPlugin.php +++ /dev/null @@ -1,328 +0,0 @@ - 'DOMNode', - 'firstChild' => 'DOMNode', - 'lastChild' => 'DOMNode', - 'previousSibling' => 'DOMNode', - 'nextSibling' => 'DOMNode', - 'ownerDocument' => 'DOMDocument', - ); - - /** - * Show all properties and methods. - * - * @var bool - */ - public static $verbose = false; - - public function getTypes() - { - return array('object'); - } - - public function getTriggers() - { - return Parser::TRIGGER_SUCCESS; - } - - public function parse(&$var, BasicObject &$o, $trigger) - { - if (!$o instanceof InstanceObject) { - return; - } - - if ($var instanceof DOMNamedNodeMap || $var instanceof DOMNodeList) { - return $this->parseList($var, $o, $trigger); - } - - if ($var instanceof DOMNode) { - return $this->parseNode($var, $o); - } - } - - protected function parseList(&$var, InstanceObject &$o, $trigger) - { - // Recursion should never happen, should always be stopped at the parent - // DOMNode. Depth limit on the other hand we're going to skip since - // that would show an empty iterator and rather useless. Let the depth - // limit hit the children (DOMNodeList only has DOMNode as children) - if ($trigger & Parser::TRIGGER_RECURSION) { - return; - } - - $o->size = $var->length; - if (0 === $o->size) { - $o->replaceRepresentation(new Representation('Iterator')); - $o->size = null; - - return; - } - - // Depth limit - // Make empty iterator representation since we need it in DOMNode to point out depth limits - if ($this->parser->getDepthLimit() && $o->depth + 1 >= $this->parser->getDepthLimit()) { - $b = new BasicObject(); - $b->name = $o->classname.' Iterator Contents'; - $b->access_path = 'iterator_to_array('.$o->access_path.')'; - $b->depth = $o->depth + 1; - $b->hints[] = 'depth_limit'; - - $r = new Representation('Iterator'); - $r->contents = array($b); - $o->replaceRepresentation($r, 0); - - return; - } - - $data = \iterator_to_array($var); - - $r = new Representation('Iterator'); - $o->replaceRepresentation($r, 0); - - foreach ($data as $key => $item) { - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $item->nodeName; - - if ($o->access_path) { - if ($var instanceof DOMNamedNodeMap) { - $base_obj->access_path = $o->access_path.'->getNamedItem('.\var_export($key, true).')'; - } elseif ($var instanceof DOMNodeList) { - $base_obj->access_path = $o->access_path.'->item('.\var_export($key, true).')'; - } else { - $base_obj->access_path = 'iterator_to_array('.$o->access_path.')'; - } - } - - $r->contents[] = $this->parser->parse($item, $base_obj); - } - } - - protected function parseNode(&$var, InstanceObject &$o) - { - // Fill the properties - // They can't be enumerated through reflection or casting, - // so we have to trust the docs and try them one at a time - $known_properties = array( - 'nodeValue', - 'childNodes', - 'attributes', - ); - - if (self::$verbose) { - $known_properties = array( - 'nodeName', - 'nodeValue', - 'nodeType', - 'parentNode', - 'childNodes', - 'firstChild', - 'lastChild', - 'previousSibling', - 'nextSibling', - 'attributes', - 'ownerDocument', - 'namespaceURI', - 'prefix', - 'localName', - 'baseURI', - 'textContent', - ); - } - - $childNodes = array(); - $attributes = array(); - - $rep = $o->value; - - foreach ($known_properties as $prop) { - $prop_obj = $this->parseProperty($o, $prop, $var); - $rep->contents[] = $prop_obj; - - if ('childNodes' === $prop) { - $childNodes = $prop_obj->getRepresentation('iterator'); - } elseif ('attributes' === $prop) { - $attributes = $prop_obj->getRepresentation('iterator'); - } - } - - if (!self::$verbose) { - $o->removeRepresentation('methods'); - $o->removeRepresentation('properties'); - } - - // Attributes and comments and text nodes don't - // need children or attributes of their own - if (\in_array($o->classname, array('DOMAttr', 'DOMText', 'DOMComment'), true)) { - return; - } - - // Set the attributes - if ($attributes) { - $a = new Representation('Attributes'); - foreach ($attributes->contents as $attribute) { - $a->contents[] = self::textualNodeToString($attribute); - } - $o->addRepresentation($a, 0); - } - - // Set the children - if ($childNodes) { - $c = new Representation('Children'); - - if (1 === \count($childNodes->contents) && ($node = \reset($childNodes->contents)) && \in_array('depth_limit', $node->hints, true)) { - $n = new InstanceObject(); - $n->transplant($node); - $n->name = 'childNodes'; - $n->classname = 'DOMNodeList'; - $c->contents = array($n); - } else { - foreach ($childNodes->contents as $index => $node) { - // Shortcircuit text nodes to plain strings - if ('DOMText' === $node->classname || 'DOMComment' === $node->classname) { - $node = self::textualNodeToString($node); - - // And remove them if they're empty - if (\ctype_space($node->value->contents) || '' === $node->value->contents) { - continue; - } - } - - $c->contents[] = $node; - } - } - - $o->addRepresentation($c, 0); - } - - if (isset($c) && \count($c->contents)) { - $o->size = \count($c->contents); - } - - if (!$o->size) { - $o->size = null; - } - } - - protected function parseProperty(InstanceObject $o, $prop, &$var) - { - // Duplicating (And slightly optimizing) the Parser::parseObject() code here - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->owner_class = $o->classname; - $base_obj->name = $prop; - $base_obj->operator = BasicObject::OPERATOR_OBJECT; - $base_obj->access = BasicObject::ACCESS_PUBLIC; - - if (null !== $o->access_path) { - $base_obj->access_path = $o->access_path; - - if (\preg_match('/^[A-Za-z0-9_]+$/', $base_obj->name)) { - $base_obj->access_path .= '->'.$base_obj->name; - } else { - $base_obj->access_path .= '->{'.\var_export($base_obj->name, true).'}'; - } - } - - if (!isset($var->{$prop})) { - $base_obj->type = 'null'; - } elseif (isset(self::$blacklist[$prop])) { - $b = new InstanceObject(); - $b->transplant($base_obj); - $base_obj = $b; - - $base_obj->hints[] = 'blacklist'; - $base_obj->classname = self::$blacklist[$prop]; - } elseif ('attributes' === $prop) { - $base_obj = $this->parser->parseDeep($var->{$prop}, $base_obj); - } else { - $base_obj = $this->parser->parse($var->{$prop}, $base_obj); - } - - return $base_obj; - } - - protected static function textualNodeToString(InstanceObject $o) - { - if (empty($o->value) || empty($o->value->contents) || empty($o->classname)) { - return; - } - - if (!\in_array($o->classname, array('DOMText', 'DOMAttr', 'DOMComment'), true)) { - return; - } - - foreach ($o->value->contents as $property) { - if ('nodeValue' === $property->name) { - $ret = clone $property; - $ret->name = $o->name; - - return $ret; - } - } - } -} diff --git a/system/ThirdParty/Kint/Parser/DateTimePlugin.php b/system/ThirdParty/Kint/Parser/DateTimePlugin.php deleted file mode 100644 index f2cebb64..00000000 --- a/system/ThirdParty/Kint/Parser/DateTimePlugin.php +++ /dev/null @@ -1,55 +0,0 @@ -transplant($o); - - $o = $object; - } -} diff --git a/system/ThirdParty/Kint/Parser/FsPathPlugin.php b/system/ThirdParty/Kint/Parser/FsPathPlugin.php deleted file mode 100644 index 3a8d1e05..00000000 --- a/system/ThirdParty/Kint/Parser/FsPathPlugin.php +++ /dev/null @@ -1,72 +0,0 @@ - 2048) { - return; - } - - if (!\preg_match('/[\\/\\'.DIRECTORY_SEPARATOR.']/', $var)) { - return; - } - - if (\preg_match('/[?<>"*|]/', $var)) { - return; - } - - if (!@\file_exists($var)) { - return; - } - - if (\in_array($var, self::$blacklist, true)) { - return; - } - - $r = new SplFileInfoRepresentation(new SplFileInfo($var)); - $r->hints[] = 'fspath'; - $o->addRepresentation($r, 0); - } -} diff --git a/system/ThirdParty/Kint/Parser/IteratorPlugin.php b/system/ThirdParty/Kint/Parser/IteratorPlugin.php deleted file mode 100644 index 0487a381..00000000 --- a/system/ThirdParty/Kint/Parser/IteratorPlugin.php +++ /dev/null @@ -1,110 +0,0 @@ -name = $class.' Iterator Contents'; - $b->access_path = 'iterator_to_array('.$o->access_path.', true)'; - $b->depth = $o->depth + 1; - $b->hints[] = 'blacklist'; - - $r = new Representation('Iterator'); - $r->contents = array($b); - - $o->addRepresentation($r); - - return; - } - } - - /** @var array|false */ - $data = \iterator_to_array($var); - - if (false === $data) { - return; - } - - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'iterator_to_array('.$o->access_path.')'; - } - - $r = new Representation('Iterator'); - $r->contents = $this->parser->parse($data, $base_obj); - $r->contents = $r->contents->value->contents; - - $primary = $o->getRepresentations(); - $primary = \reset($primary); - if ($primary && $primary === $o->value && $primary->contents === array()) { - $o->addRepresentation($r, 0); - } else { - $o->addRepresentation($r); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/JsonPlugin.php b/system/ThirdParty/Kint/Parser/JsonPlugin.php deleted file mode 100644 index 84b25195..00000000 --- a/system/ThirdParty/Kint/Parser/JsonPlugin.php +++ /dev/null @@ -1,73 +0,0 @@ -depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'json_decode('.$o->access_path.', true)'; - } - - $r = new Representation('Json'); - $r->contents = $this->parser->parse($json, $base_obj); - - if (!\in_array('depth_limit', $r->contents->hints, true)) { - $r->contents = $r->contents->value->contents; - } - - $o->addRepresentation($r, 0); - } -} diff --git a/system/ThirdParty/Kint/Parser/MicrotimePlugin.php b/system/ThirdParty/Kint/Parser/MicrotimePlugin.php deleted file mode 100644 index 5062b59a..00000000 --- a/system/ThirdParty/Kint/Parser/MicrotimePlugin.php +++ /dev/null @@ -1,105 +0,0 @@ -depth) { - return; - } - - if (\is_string($var)) { - if ('microtime()' !== $o->name || !\preg_match('/^0\\.[0-9]{8} [0-9]{10}$/', $var)) { - return; - } - - $usec = (int) \substr($var, 2, 6); - $sec = (int) \substr($var, 11, 10); - } else { - if ('microtime(...)' !== $o->name) { - return; - } - - $sec = \floor($var); - $usec = $var - $sec; - $usec = \floor($usec * 1000000); - } - - $time = $sec + ($usec / 1000000); - - if (null !== self::$last) { - $last_time = self::$last[0] + (self::$last[1] / 1000000); - $lap = $time - $last_time; - ++self::$times; - } else { - $lap = null; - self::$start = $time; - } - - self::$last = array($sec, $usec); - - if (null !== $lap) { - $total = $time - self::$start; - $r = new MicrotimeRepresentation($sec, $usec, self::$group, $lap, $total, self::$times); - } else { - $r = new MicrotimeRepresentation($sec, $usec, self::$group); - } - $r->contents = $var; - $r->implicit_label = true; - - $o->removeRepresentation($o->value); - $o->addRepresentation($r); - $o->hints[] = 'microtime'; - } - - public static function clean() - { - self::$last = null; - self::$start = null; - self::$times = 0; - ++self::$group; - } -} diff --git a/system/ThirdParty/Kint/Parser/MysqliPlugin.php b/system/ThirdParty/Kint/Parser/MysqliPlugin.php deleted file mode 100644 index 265299be..00000000 --- a/system/ThirdParty/Kint/Parser/MysqliPlugin.php +++ /dev/null @@ -1,129 +0,0 @@ - true, - 'connect_errno' => true, - 'connect_error' => true, - ); - - // These are readable on empty mysqli objects, but not on failed connections - protected $empty_readable = array( - 'client_info' => true, - 'errno' => true, - 'error' => true, - ); - - // These are only readable on connected mysqli objects - protected $connected_readable = array( - 'affected_rows' => true, - 'error_list' => true, - 'field_count' => true, - 'host_info' => true, - 'info' => true, - 'insert_id' => true, - 'server_info' => true, - 'server_version' => true, - 'stat' => true, - 'sqlstate' => true, - 'protocol_version' => true, - 'thread_id' => true, - 'warning_count' => true, - ); - - public function getTypes() - { - return array('object'); - } - - public function getTriggers() - { - return Parser::TRIGGER_COMPLETE; - } - - public function parse(&$var, BasicObject &$o, $trigger) - { - if (!$var instanceof Mysqli) { - return; - } - - $connected = false; - $empty = false; - - if (\is_string(@$var->sqlstate)) { - $connected = true; - } elseif (\is_string(@$var->client_info)) { - $empty = true; - } - - foreach ($o->value->contents as $key => $obj) { - if (isset($this->connected_readable[$obj->name])) { - if (!$connected) { - continue; - } - } elseif (isset($this->empty_readable[$obj->name])) { - if (!$connected && !$empty) { - continue; - } - } elseif (!isset($this->always_readable[$obj->name])) { - continue; - } - - if ('null' !== $obj->type) { - continue; - } - - $param = $var->{$obj->name}; - - if (null === $param) { - continue; - } - - $base = BasicObject::blank($obj->name, $obj->access_path); - - $base->depth = $obj->depth; - $base->owner_class = $obj->owner_class; - $base->operator = $obj->operator; - $base->access = $obj->access; - $base->reference = $obj->reference; - - $o->value->contents[$key] = $this->parser->parse($param, $base); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/Parser.php b/system/ThirdParty/Kint/Parser/Parser.php deleted file mode 100644 index b7f81c62..00000000 --- a/system/ThirdParty/Kint/Parser/Parser.php +++ /dev/null @@ -1,604 +0,0 @@ -marker = \uniqid("kint\0", true); - - $this->caller_class = $caller; - - if ($depth_limit) { - $this->depth_limit = $depth_limit; - } - } - - /** - * Set the caller class. - * - * @param null|string $caller Caller class name - */ - public function setCallerClass($caller = null) - { - $this->noRecurseCall(); - - $this->caller_class = $caller; - } - - public function getCallerClass() - { - return $this->caller_class; - } - - /** - * Set the depth limit. - * - * @param false|int $depth_limit Maximum depth to parse data - */ - public function setDepthLimit($depth_limit = false) - { - $this->noRecurseCall(); - - $this->depth_limit = $depth_limit; - } - - public function getDepthLimit() - { - return $this->depth_limit; - } - - /** - * Disables the depth limit and parses a variable. - * - * This should not be used unless you know what you're doing! - * - * @param mixed $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - public function parseDeep(&$var, BasicObject $o) - { - $depth_limit = $this->depth_limit; - $this->depth_limit = false; - - $out = $this->parse($var, $o); - - $this->depth_limit = $depth_limit; - - return $out; - } - - /** - * Parses a variable into a Kint object structure. - * - * @param mixed $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - public function parse(&$var, BasicObject $o) - { - $o->type = \strtolower(\gettype($var)); - - if (!$this->applyPlugins($var, $o, self::TRIGGER_BEGIN)) { - return $o; - } - - switch ($o->type) { - case 'array': - return $this->parseArray($var, $o); - case 'boolean': - case 'double': - case 'integer': - case 'null': - return $this->parseGeneric($var, $o); - case 'object': - return $this->parseObject($var, $o); - case 'resource': - return $this->parseResource($var, $o); - case 'string': - return $this->parseString($var, $o); - default: - return $this->parseUnknown($var, $o); - } - } - - public function addPlugin(Plugin $p) - { - if (!$types = $p->getTypes()) { - return false; - } - - if (!$triggers = $p->getTriggers()) { - return false; - } - - $p->setParser($this); - - foreach ($types as $type) { - if (!isset($this->plugins[$type])) { - $this->plugins[$type] = array( - self::TRIGGER_BEGIN => array(), - self::TRIGGER_SUCCESS => array(), - self::TRIGGER_RECURSION => array(), - self::TRIGGER_DEPTH_LIMIT => array(), - ); - } - - foreach ($this->plugins[$type] as $trigger => &$pool) { - if ($triggers & $trigger) { - $pool[] = $p; - } - } - } - - return true; - } - - public function clearPlugins() - { - $this->plugins = array(); - } - - public function haltParse() - { - $this->parse_break = true; - } - - public function childHasPath(InstanceObject $parent, BasicObject $child) - { - if ('object' === $parent->type && (null !== $parent->access_path || $child->static || $child->const)) { - if (BasicObject::ACCESS_PUBLIC === $child->access) { - return true; - } - - if (BasicObject::ACCESS_PRIVATE === $child->access && $this->caller_class) { - if ($this->caller_class === $child->owner_class) { - return true; - } - } elseif (BasicObject::ACCESS_PROTECTED === $child->access && $this->caller_class) { - if ($this->caller_class === $child->owner_class) { - return true; - } - - if (\is_subclass_of($this->caller_class, $child->owner_class)) { - return true; - } - - if (\is_subclass_of($child->owner_class, $this->caller_class)) { - return true; - } - } - } - - return false; - } - - /** - * Returns an array without the recursion marker in it. - * - * DO NOT pass an array that has had it's marker removed back - * into the parser, it will result in an extra recursion - * - * @param array $array Array potentially containing a recursion marker - * - * @return array Array with recursion marker removed - */ - public function getCleanArray(array $array) - { - unset($array[$this->marker]); - - return $array; - } - - protected function noRecurseCall() - { - $bt = \debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); - - $caller_frame = array( - 'function' => __FUNCTION__, - ); - - while (isset($bt[0]['object']) && $bt[0]['object'] === $this) { - $caller_frame = \array_shift($bt); - } - - foreach ($bt as $frame) { - if (isset($frame['object']) && $frame['object'] === $this) { - throw new DomainException(__CLASS__.'::'.$caller_frame['function'].' cannot be called from inside a parse'); - } - } - } - - private function parseGeneric(&$var, BasicObject $o) - { - $rep = new Representation('Contents'); - $rep->contents = $var; - $rep->implicit_label = true; - $o->addRepresentation($rep); - $o->value = $rep; - - $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); - - return $o; - } - - /** - * Parses a string into a Kint BlobObject structure. - * - * @param string $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - private function parseString(&$var, BasicObject $o) - { - $string = new BlobObject(); - $string->transplant($o); - $string->encoding = BlobObject::detectEncoding($var); - $string->size = BlobObject::strlen($var, $string->encoding); - - $rep = new Representation('Contents'); - $rep->contents = $var; - $rep->implicit_label = true; - - $string->addRepresentation($rep); - $string->value = $rep; - - $this->applyPlugins($var, $string, self::TRIGGER_SUCCESS); - - return $string; - } - - /** - * Parses an array into a Kint object structure. - * - * @param array $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - private function parseArray(array &$var, BasicObject $o) - { - $array = new BasicObject(); - $array->transplant($o); - $array->size = \count($var); - - if (isset($var[$this->marker])) { - --$array->size; - $array->hints[] = 'recursion'; - - $this->applyPlugins($var, $array, self::TRIGGER_RECURSION); - - return $array; - } - - $rep = new Representation('Contents'); - $rep->implicit_label = true; - $array->addRepresentation($rep); - $array->value = $rep; - - if (!$array->size) { - $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); - - return $array; - } - - if ($this->depth_limit && $o->depth >= $this->depth_limit) { - $array->hints[] = 'depth_limit'; - - $this->applyPlugins($var, $array, self::TRIGGER_DEPTH_LIMIT); - - return $array; - } - - $copy = \array_values($var); - - // It's really really hard to access numeric string keys in arrays, - // and it's really really hard to access integer properties in - // objects, so we just use array_values and index by counter to get - // at it reliably for reference testing. This also affects access - // paths since it's pretty much impossible to access these things - // without complicated stuff you should never need to do. - $i = 0; - - // Set the marker for recursion - $var[$this->marker] = $array->depth; - - $refmarker = new stdClass(); - - foreach ($var as $key => &$val) { - if ($key === $this->marker) { - continue; - } - - $child = new BasicObject(); - $child->name = $key; - $child->depth = $array->depth + 1; - $child->access = BasicObject::ACCESS_NONE; - $child->operator = BasicObject::OPERATOR_ARRAY; - - if (null !== $array->access_path) { - if (\is_string($key) && (string) (int) $key === $key) { - $child->access_path = 'array_values('.$array->access_path.')['.$i.']'; // @codeCoverageIgnore - } else { - $child->access_path = $array->access_path.'['.\var_export($key, true).']'; - } - } - - $stash = $val; - $copy[$i] = $refmarker; - if ($val === $refmarker) { - $child->reference = true; - $val = $stash; - } - - $rep->contents[] = $this->parse($val, $child); - ++$i; - } - - $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); - unset($var[$this->marker]); - - return $array; - } - - /** - * Parses an object into a Kint InstanceObject structure. - * - * @param object $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - private function parseObject(&$var, BasicObject $o) - { - $hash = \spl_object_hash($var); - $values = (array) $var; - - $object = new InstanceObject(); - $object->transplant($o); - $object->classname = \get_class($var); - $object->hash = $hash; - $object->size = \count($values); - - if (isset($this->object_hashes[$hash])) { - $object->hints[] = 'recursion'; - - $this->applyPlugins($var, $object, self::TRIGGER_RECURSION); - - return $object; - } - - $this->object_hashes[$hash] = $object; - - if ($this->depth_limit && $o->depth >= $this->depth_limit) { - $object->hints[] = 'depth_limit'; - - $this->applyPlugins($var, $object, self::TRIGGER_DEPTH_LIMIT); - unset($this->object_hashes[$hash]); - - return $object; - } - - $reflector = new ReflectionObject($var); - - if ($reflector->isUserDefined()) { - $object->filename = $reflector->getFileName(); - $object->startline = $reflector->getStartLine(); - } - - $rep = new Representation('Properties'); - - $copy = \array_values($values); - $refmarker = new stdClass(); - $i = 0; - - // Reflection will not show parent classes private properties, and if a - // property was unset it will happly trigger a notice looking for it. - foreach ($values as $key => &$val) { - // Casting object to array: - // private properties show in the form "\0$owner_class_name\0$property_name"; - // protected properties show in the form "\0*\0$property_name"; - // public properties show in the form "$property_name"; - // http://www.php.net/manual/en/language.types.array.php#language.types.array.casting - - $child = new BasicObject(); - $child->depth = $object->depth + 1; - $child->owner_class = $object->classname; - $child->operator = BasicObject::OPERATOR_OBJECT; - $child->access = BasicObject::ACCESS_PUBLIC; - - $split_key = \explode("\0", $key, 3); - - if (3 === \count($split_key) && '' === $split_key[0]) { - $child->name = $split_key[2]; - if ('*' === $split_key[1]) { - $child->access = BasicObject::ACCESS_PROTECTED; - } else { - $child->access = BasicObject::ACCESS_PRIVATE; - $child->owner_class = $split_key[1]; - } - } elseif (KINT_PHP72) { - $child->name = (string) $key; - } else { - $child->name = $key; // @codeCoverageIgnore - } - - if ($this->childHasPath($object, $child)) { - $child->access_path = $object->access_path; - - if (!KINT_PHP72 && \is_int($child->name)) { - $child->access_path = 'array_values((array) '.$child->access_path.')['.$i.']'; // @codeCoverageIgnore - } elseif (\preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $child->name)) { - $child->access_path .= '->'.$child->name; - } else { - $child->access_path .= '->{'.\var_export((string) $child->name, true).'}'; - } - } - - $stash = $val; - $copy[$i] = $refmarker; - if ($val === $refmarker) { - $child->reference = true; - $val = $stash; - } - - $rep->contents[] = $this->parse($val, $child); - ++$i; - } - - $object->addRepresentation($rep); - $object->value = $rep; - $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS); - unset($this->object_hashes[$hash]); - - return $object; - } - - /** - * Parses a resource into a Kint ResourceObject structure. - * - * @param resource $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - private function parseResource(&$var, BasicObject $o) - { - $resource = new ResourceObject(); - $resource->transplant($o); - $resource->resource_type = \get_resource_type($var); - - $this->applyPlugins($var, $resource, self::TRIGGER_SUCCESS); - - return $resource; - } - - /** - * Parses an unknown into a Kint object structure. - * - * @param mixed $var The input variable - * @param BasicObject $o The base object - * - * @return BasicObject - */ - private function parseUnknown(&$var, BasicObject $o) - { - $o->type = 'unknown'; - $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); - - return $o; - } - - /** - * Applies plugins for an object type. - * - * @param mixed $var variable - * @param BasicObject $o Kint object parsed so far - * @param int $trigger The trigger to check for the plugins - * - * @return bool Continue parsing - */ - private function applyPlugins(&$var, BasicObject &$o, $trigger) - { - $break_stash = $this->parse_break; - - /** @var bool Psalm bug workaround */ - $this->parse_break = false; - - $plugins = array(); - - if (isset($this->plugins[$o->type][$trigger])) { - $plugins = $this->plugins[$o->type][$trigger]; - } - - foreach ($plugins as $plugin) { - try { - $plugin->parse($var, $o, $trigger); - } catch (Exception $e) { - \trigger_error( - 'An exception ('.\get_class($e).') was thrown in '.$e->getFile().' on line '.$e->getLine().' while executing Kint Parser Plugin "'.\get_class($plugin).'". Error message: '.$e->getMessage(), - E_USER_WARNING - ); - } - - if ($this->parse_break) { - $this->parse_break = $break_stash; - - return false; - } - } - - $this->parse_break = $break_stash; - - return true; - } -} diff --git a/system/ThirdParty/Kint/Parser/Plugin.php b/system/ThirdParty/Kint/Parser/Plugin.php deleted file mode 100644 index 51d5f0b1..00000000 --- a/system/ThirdParty/Kint/Parser/Plugin.php +++ /dev/null @@ -1,55 +0,0 @@ -parser = $p; - } - - /** - * An array of types (As returned by gettype) for all data this plugin can operate on. - * - * @return array List of types - */ - public function getTypes() - { - return array(); - } - - public function getTriggers() - { - return Parser::TRIGGER_NONE; - } - - abstract public function parse(&$variable, BasicObject &$o, $trigger); -} diff --git a/system/ThirdParty/Kint/Parser/ProxyPlugin.php b/system/ThirdParty/Kint/Parser/ProxyPlugin.php deleted file mode 100644 index 3376d3aa..00000000 --- a/system/ThirdParty/Kint/Parser/ProxyPlugin.php +++ /dev/null @@ -1,66 +0,0 @@ -types = $types; - $this->triggers = $triggers; - $this->callback = $callback; - } - - public function getTypes() - { - return $this->types; - } - - public function getTriggers() - { - return $this->triggers; - } - - public function parse(&$var, BasicObject &$o, $trigger) - { - return \call_user_func_array($this->callback, array(&$var, &$o, $trigger, $this->parser)); - } -} diff --git a/system/ThirdParty/Kint/Parser/SerializePlugin.php b/system/ThirdParty/Kint/Parser/SerializePlugin.php deleted file mode 100644 index c5dadb88..00000000 --- a/system/ThirdParty/Kint/Parser/SerializePlugin.php +++ /dev/null @@ -1,108 +0,0 @@ - Unserialization can result in code being loaded and executed due to - * > object instantiation and autoloading, and a malicious user may be able - * > to exploit this. - * - * The natural way to stop that from happening is to just refuse to unserialize - * stuff by default. Which is what we're doing for anything that's not scalar. - * - * @var bool - */ - public static $safe_mode = true; - public static $options = array(true); - - public function getTypes() - { - return array('string'); - } - - public function getTriggers() - { - return Parser::TRIGGER_SUCCESS; - } - - public function parse(&$var, BasicObject &$o, $trigger) - { - $trimmed = \rtrim($var); - - if ('N;' !== $trimmed && !\preg_match('/^(?:[COabis]:\\d+[:;]|d:\\d+(?:\\.\\d+);)/', $trimmed)) { - return; - } - - if (!self::$safe_mode || !\in_array($trimmed[0], array('C', 'O', 'a'), true)) { - // Second parameter only supported on PHP 7 - if (KINT_PHP70) { - // Suppress warnings on unserializeable variable - $data = @\unserialize($trimmed, self::$options); - } else { - $data = @\unserialize($trimmed); - } - - if (false === $data && 'b:0;' !== \substr($trimmed, 0, 4)) { - return; - } - } - - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = 'unserialize('.$o->name.')'; - - if ($o->access_path) { - $base_obj->access_path = 'unserialize('.$o->access_path; - if (!KINT_PHP70 || self::$options === array(true)) { - $base_obj->access_path .= ')'; - } elseif (self::$options === array(false)) { - $base_obj->access_path .= ', false)'; - } else { - $base_obj->access_path .= ', Serialize::$options)'; - } - } - - $r = new Representation('Serialized'); - - if (isset($data)) { - $r->contents = $this->parser->parse($data, $base_obj); - } else { - $base_obj->hints[] = 'blacklist'; - $r->contents = $base_obj; - } - - $o->addRepresentation($r, 0); - } -} diff --git a/system/ThirdParty/Kint/Parser/SimpleXMLElementPlugin.php b/system/ThirdParty/Kint/Parser/SimpleXMLElementPlugin.php deleted file mode 100644 index b90c863f..00000000 --- a/system/ThirdParty/Kint/Parser/SimpleXMLElementPlugin.php +++ /dev/null @@ -1,154 +0,0 @@ -hints[] = 'simplexml_element'; - - if (!self::$verbose) { - $o->removeRepresentation('properties'); - $o->removeRepresentation('iterator'); - $o->removeRepresentation('methods'); - } - - // Attributes - $a = new Representation('Attributes'); - - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = '(string) '.$o->access_path; - } - - if ($attribs = $var->attributes()) { - $attribs = \iterator_to_array($attribs); - $attribs = \array_map('strval', $attribs); - } else { - $attribs = array(); - } - - // XML attributes are by definition strings and don't have children, - // so up the depth limit in case we're just below the limit since - // there won't be any recursive stuff anyway. - $a->contents = $this->parser->parseDeep($attribs, $base_obj)->value->contents; - - $o->addRepresentation($a, 0); - - // Children - // We need to check children() separately from the values we already parsed because - // text contents won't show up in children() but they will show up in properties. - // - // Why do we still need to check for attributes if we already have an attributes() - // method? Hell if I know! - $children = $var->children(); - - if ($o->value) { - $c = new Representation('Children'); - - foreach ($o->value->contents as $value) { - if ('@attributes' === $value->name) { - continue; - } - - if (isset($children->{$value->name})) { - $i = 0; - - while (isset($children->{$value->name}[$i])) { - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $value->name; - if ($value->access_path) { - $base_obj->access_path = $value->access_path.'['.$i.']'; - } - - $value = $this->parser->parse($children->{$value->name}[$i], $base_obj); - - if ($value->access_path && 'string' === $value->type) { - $value->access_path = '(string) '.$value->access_path; - } - - $c->contents[] = $value; - - ++$i; - } - } - } - - $o->size = \count($c->contents); - - if (!$o->size) { - $o->size = null; - - if (\strlen((string) $var)) { - $base_obj = new BlobObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $o->name; - if ($o->access_path) { - $base_obj->access_path = '(string) '.$o->access_path; - } - - $value = (string) $var; - - $c = new Representation('Contents'); - $c->implicit_label = true; - $c->contents = array($this->parser->parseDeep($value, $base_obj)); - } - } - - $o->addRepresentation($c, 0); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/SplFileInfoPlugin.php b/system/ThirdParty/Kint/Parser/SplFileInfoPlugin.php deleted file mode 100644 index 8b72193b..00000000 --- a/system/ThirdParty/Kint/Parser/SplFileInfoPlugin.php +++ /dev/null @@ -1,55 +0,0 @@ -addRepresentation($r, 0); - $o->size = $r->getSize(); - } -} diff --git a/system/ThirdParty/Kint/Parser/SplObjectStoragePlugin.php b/system/ThirdParty/Kint/Parser/SplObjectStoragePlugin.php deleted file mode 100644 index 03ff301d..00000000 --- a/system/ThirdParty/Kint/Parser/SplObjectStoragePlugin.php +++ /dev/null @@ -1,54 +0,0 @@ -getRepresentation('iterator'))) { - return; - } - - $r = $o->getRepresentation('iterator'); - if ($r) { - $o->size = !\is_array($r->contents) ? null : \count($r->contents); - } - } -} diff --git a/system/ThirdParty/Kint/Parser/StreamPlugin.php b/system/ThirdParty/Kint/Parser/StreamPlugin.php deleted file mode 100644 index 464a3fff..00000000 --- a/system/ThirdParty/Kint/Parser/StreamPlugin.php +++ /dev/null @@ -1,78 +0,0 @@ -resource_type) { - return; - } - - if (!$meta = \stream_get_meta_data($var)) { - return; - } - - $rep = new Representation('Stream'); - $rep->implicit_label = true; - - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'stream_get_meta_data('.$o->access_path.')'; - } - - $rep->contents = $this->parser->parse($meta, $base_obj); - - if (!\in_array('depth_limit', $rep->contents->hints, true)) { - $rep->contents = $rep->contents->value->contents; - } - - $o->addRepresentation($rep, 0); - $o->value = $rep; - - $stream = new StreamObject($meta); - $stream->transplant($o); - $o = $stream; - } -} diff --git a/system/ThirdParty/Kint/Parser/TablePlugin.php b/system/ThirdParty/Kint/Parser/TablePlugin.php deleted file mode 100644 index 510c4ff0..00000000 --- a/system/ThirdParty/Kint/Parser/TablePlugin.php +++ /dev/null @@ -1,87 +0,0 @@ -value->contents)) { - return; - } - - $array = $this->parser->getCleanArray($var); - - if (\count($array) < 2) { - return; - } - - // Ensure this is an array of arrays and that all child arrays have the - // same keys. We don't care about their children - if there's another - // "table" inside we'll just make another one down the value tab - $keys = null; - foreach ($array as $elem) { - if (!\is_array($elem) || \count($elem) < 2) { - return; - } - - if (null === $keys) { - $keys = \array_keys($elem); - } elseif (\array_keys($elem) !== $keys) { - return; - } - } - - // Ensure none of the child arrays are recursion or depth limit. We - // don't care if their children are since they are the table cells - foreach ($o->value->contents as $childarray) { - if (empty($childarray->value->contents)) { - return; - } - } - - // Objects by reference for the win! We can do a copy-paste of the value - // representation contents and just slap a new hint on there and hey - // presto we have our table representation with no extra memory used! - $table = new Representation('Table'); - $table->contents = $o->value->contents; - $table->hints[] = 'table'; - $o->addRepresentation($table, 0); - } -} diff --git a/system/ThirdParty/Kint/Parser/ThrowablePlugin.php b/system/ThirdParty/Kint/Parser/ThrowablePlugin.php deleted file mode 100644 index 8490d1d4..00000000 --- a/system/ThirdParty/Kint/Parser/ThrowablePlugin.php +++ /dev/null @@ -1,60 +0,0 @@ -transplant($o); - $r = new SourceRepresentation($var->getFile(), $var->getLine()); - $r->showfilename = true; - $throw->addRepresentation($r, 0); - - $o = $throw; - } -} diff --git a/system/ThirdParty/Kint/Parser/TimestampPlugin.php b/system/ThirdParty/Kint/Parser/TimestampPlugin.php deleted file mode 100644 index 72958d64..00000000 --- a/system/ThirdParty/Kint/Parser/TimestampPlugin.php +++ /dev/null @@ -1,71 +0,0 @@ -value->label = 'Timestamp'; - $o->value->hints[] = 'timestamp'; - } - } -} diff --git a/system/ThirdParty/Kint/Parser/ToStringPlugin.php b/system/ThirdParty/Kint/Parser/ToStringPlugin.php deleted file mode 100644 index 8b7a65fe..00000000 --- a/system/ThirdParty/Kint/Parser/ToStringPlugin.php +++ /dev/null @@ -1,67 +0,0 @@ -hasMethod('__toString')) { - return; - } - - foreach (self::$blacklist as $class) { - if ($var instanceof $class) { - return; - } - } - - $r = new Representation('toString'); - $r->contents = (string) $var; - - $o->addRepresentation($r); - } -} diff --git a/system/ThirdParty/Kint/Parser/TracePlugin.php b/system/ThirdParty/Kint/Parser/TracePlugin.php deleted file mode 100644 index 3554993d..00000000 --- a/system/ThirdParty/Kint/Parser/TracePlugin.php +++ /dev/null @@ -1,92 +0,0 @@ -value) { - return; - } - - $trace = $this->parser->getCleanArray($var); - - if (\count($trace) !== \count($o->value->contents) || !Utils::isTrace($trace)) { - return; - } - - $traceobj = new TraceObject(); - $traceobj->transplant($o); - $rep = $traceobj->value; - - $old_trace = $rep->contents; - - Utils::normalizeAliases(self::$blacklist); - - $rep->contents = array(); - - foreach ($old_trace as $frame) { - $index = $frame->name; - - if (!isset($trace[$index]['function'])) { - // Something's very very wrong here, but it's probably a plugin's fault - continue; - } - - if (Utils::traceFrameIsListed($trace[$index], self::$blacklist)) { - continue; - } - - $rep->contents[$index] = new TraceFrameObject($frame, $trace[$index]); - } - - \ksort($rep->contents); - $rep->contents = \array_values($rep->contents); - - $traceobj->clearRepresentations(); - $traceobj->addRepresentation($rep); - $traceobj->size = \count($rep->contents); - $o = $traceobj; - } -} diff --git a/system/ThirdParty/Kint/Parser/XmlPlugin.php b/system/ThirdParty/Kint/Parser/XmlPlugin.php deleted file mode 100644 index 0947e9a6..00000000 --- a/system/ThirdParty/Kint/Parser/XmlPlugin.php +++ /dev/null @@ -1,150 +0,0 @@ -access_path); - - if (empty($xml)) { - return; - } - - list($xml, $access_path, $name) = $xml; - - $base_obj = new BasicObject(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $name; - $base_obj->access_path = $access_path; - - $r = new Representation('XML'); - $r->contents = $this->parser->parse($xml, $base_obj); - - $o->addRepresentation($r, 0); - } - - protected static function xmlToSimpleXML($var, $parent_path) - { - try { - $errors = \libxml_use_internal_errors(true); - $xml = \simplexml_load_string($var); - \libxml_use_internal_errors($errors); - } catch (Exception $e) { - if (isset($errors)) { - \libxml_use_internal_errors($errors); - } - - return; - } - - if (!$xml) { - return; - } - - if (null === $parent_path) { - $access_path = null; - } else { - $access_path = 'simplexml_load_string('.$parent_path.')'; - } - - $name = $xml->getName(); - - return array($xml, $access_path, $name); - } - - /** - * Get the DOMDocument info. - * - * The documentation of DOMDocument::loadXML() states that while you can - * call it statically, it will give an E_STRICT warning. On my system it - * actually gives an E_DEPRECATED warning, but it works so we'll just add - * an error-silencing '@' to the access path. - * - * If it errors loading then we wouldn't have gotten this far in the first place. - * - * @param string $var The XML string - * @param null|string $parent_path The path to the parent, in this case the XML string - * - * @return null|array The root element DOMNode, the access path, and the root element name - */ - protected static function xmlToDOMDocument($var, $parent_path) - { - // There's no way to check validity in DOMDocument without making errors. For shame! - if (!self::xmlToSimpleXML($var, $parent_path)) { - return null; - } - - $xml = new DOMDocument(); - $xml->loadXML($var); - $xml = $xml->firstChild; - - if (null === $parent_path) { - $access_path = null; - } else { - $access_path = '@\\DOMDocument::loadXML('.$parent_path.')->firstChild'; - } - - $name = $xml->nodeName; - - return array($xml, $access_path, $name); - } -} diff --git a/system/ThirdParty/Kint/Renderer/CliRenderer.php b/system/ThirdParty/Kint/Renderer/CliRenderer.php deleted file mode 100644 index 0d0846a4..00000000 --- a/system/ThirdParty/Kint/Renderer/CliRenderer.php +++ /dev/null @@ -1,152 +0,0 @@ -windows_output = KINT_WIN; - } - - if (!self::$terminal_width) { - if (!KINT_WIN && self::$detect_width) { - self::$terminal_width = \exec('tput cols'); - } - - if (self::$terminal_width < self::$min_terminal_width) { - self::$terminal_width = self::$default_width; - } - } - - $this->colors = $this->windows_output ? false : self::$cli_colors; - - $this->header_width = self::$terminal_width; - } - - public function colorValue($string) - { - if (!$this->colors) { - return $string; - } - - return "\x1b[32m".\str_replace("\n", "\x1b[0m\n\x1b[32m", $string)."\x1b[0m"; - } - - public function colorType($string) - { - if (!$this->colors) { - return $string; - } - - return "\x1b[35;1m".\str_replace("\n", "\x1b[0m\n\x1b[35;1m", $string)."\x1b[0m"; - } - - public function colorTitle($string) - { - if (!$this->colors) { - return $string; - } - - return "\x1b[36m".\str_replace("\n", "\x1b[0m\n\x1b[36m", $string)."\x1b[0m"; - } - - public function renderTitle(BasicObject $o) - { - if ($this->windows_output) { - return $this->utf8ToWindows(parent::renderTitle($o)); - } - - return parent::renderTitle($o); - } - - public function preRender() - { - return PHP_EOL; - } - - public function postRender() - { - if ($this->windows_output) { - return $this->utf8ToWindows(parent::postRender()); - } - - return parent::postRender(); - } - - public function escape($string, $encoding = false) - { - return \str_replace("\x1b", '\\x1b', $string); - } - - protected function utf8ToWindows($string) - { - return \str_replace( - array('┌', '═', '┐', '│', '└', '─', '┘'), - array("\xda", "\xdc", "\xbf", "\xb3", "\xc0", "\xc4", "\xd9"), - $string - ); - } -} diff --git a/system/ThirdParty/Kint/Renderer/PlainRenderer.php b/system/ThirdParty/Kint/Renderer/PlainRenderer.php deleted file mode 100644 index 493a7743..00000000 --- a/system/ThirdParty/Kint/Renderer/PlainRenderer.php +++ /dev/null @@ -1,237 +0,0 @@ - array( - array('Kint\\Renderer\\PlainRenderer', 'renderJs'), - array('Kint\\Renderer\\Text\\MicrotimePlugin', 'renderJs'), - ), - 'style' => array( - array('Kint\\Renderer\\PlainRenderer', 'renderCss'), - ), - 'raw' => array(), - ); - - /** - * Path to the CSS file to load by default. - * - * @var string - */ - public static $theme = 'plain.css'; - - /** - * Output htmlentities instead of utf8. - * - * @var bool - */ - public static $disable_utf8 = false; - - public static $needs_pre_render = true; - - public static $always_pre_render = false; - - protected $force_pre_render = false; - protected $pre_render; - - public function __construct() - { - parent::__construct(); - - $this->pre_render = self::$needs_pre_render; - - if (self::$always_pre_render) { - $this->setPreRender(true); - } - } - - public function setCallInfo(array $info) - { - parent::setCallInfo($info); - - if (\in_array('@', $this->call_info['modifiers'], true)) { - $this->setPreRender(true); - } - } - - public function setStatics(array $statics) - { - parent::setStatics($statics); - - if (!empty($statics['return'])) { - $this->setPreRender(true); - } - } - - public function setPreRender($pre_render) - { - $this->pre_render = $pre_render; - $this->force_pre_render = true; - } - - public function getPreRender() - { - return $this->pre_render; - } - - public function colorValue($string) - { - return ''.$string.''; - } - - public function colorType($string) - { - return ''.$string.''; - } - - public function colorTitle($string) - { - return ''.$string.''; - } - - public function renderTitle(BasicObject $o) - { - if (self::$disable_utf8) { - return $this->utf8ToHtmlentity(parent::renderTitle($o)); - } - - return parent::renderTitle($o); - } - - public function preRender() - { - $output = ''; - - if ($this->pre_render) { - foreach (self::$pre_render_sources as $type => $values) { - $contents = ''; - foreach ($values as $v) { - $contents .= \call_user_func($v, $this); - } - - if (!\strlen($contents)) { - continue; - } - - switch ($type) { - case 'script': - $output .= ''; - break; - case 'style': - $output .= ''; - break; - default: - $output .= $contents; - } - } - - // Don't pre-render on every dump - if (!$this->force_pre_render) { - self::$needs_pre_render = false; - } - } - - return $output.'
'; - } - - public function postRender() - { - if (self::$disable_utf8) { - return $this->utf8ToHtmlentity(parent::postRender()).'
'; - } - - return parent::postRender().''; - } - - public function ideLink($file, $line) - { - $path = $this->escape(Kint::shortenPath($file)).':'.$line; - $ideLink = Kint::getIdeLink($file, $line); - - if (!$ideLink) { - return $path; - } - - $class = ''; - - if (\preg_match('/https?:\\/\\//i', $ideLink)) { - $class = 'class="kint-ide-link" '; - } - - return ''.$path.''; - } - - public function escape($string, $encoding = false) - { - if (false === $encoding) { - $encoding = BlobObject::detectEncoding($string); - } - - $original_encoding = $encoding; - - if (false === $encoding || 'ASCII' === $encoding) { - $encoding = 'UTF-8'; - } - - $string = \htmlspecialchars($string, ENT_NOQUOTES, $encoding); - - // this call converts all non-ASCII characters into numeirc htmlentities - if (\function_exists('mb_encode_numericentity') && 'ASCII' !== $original_encoding) { - $string = \mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding); - } - - return $string; - } - - protected function utf8ToHtmlentity($string) - { - return \str_replace( - array('┌', '═', '┐', '│', '└', '─', '┘'), - array('┌', '═', '┐', '│', '└', '─', '┘'), - $string - ); - } - - protected static function renderJs() - { - return \file_get_contents(KINT_DIR.'/resources/compiled/shared.js').\file_get_contents(KINT_DIR.'/resources/compiled/plain.js'); - } - - protected static function renderCss() - { - if (\file_exists(KINT_DIR.'/resources/compiled/'.self::$theme)) { - return \file_get_contents(KINT_DIR.'/resources/compiled/'.self::$theme); - } - - return \file_get_contents(self::$theme); - } -} diff --git a/system/ThirdParty/Kint/Renderer/Renderer.php b/system/ThirdParty/Kint/Renderer/Renderer.php deleted file mode 100644 index cf8b0a78..00000000 --- a/system/ThirdParty/Kint/Renderer/Renderer.php +++ /dev/null @@ -1,185 +0,0 @@ -call_info = array( - 'params' => $info['params'], - 'modifiers' => $info['modifiers'], - 'callee' => $info['callee'], - 'caller' => $info['caller'], - 'trace' => $info['trace'], - ); - } - - public function getCallInfo() - { - return $this->call_info; - } - - public function setStatics(array $statics) - { - $this->statics = $statics; - $this->setShowTrace(!empty($statics['display_called_from'])); - } - - public function getStatics() - { - return $this->statics; - } - - public function setShowTrace($show_trace) - { - $this->show_trace = $show_trace; - } - - public function getShowTrace() - { - return $this->show_trace; - } - - /** - * Returns the first compatible plugin available. - * - * @param array $plugins Array of hints to class strings - * @param array $hints Array of object hints - * - * @return array Array of hints to class strings filtered and sorted by object hints - */ - public function matchPlugins(array $plugins, array $hints) - { - $out = array(); - - foreach ($hints as $key) { - if (isset($plugins[$key])) { - $out[$key] = $plugins[$key]; - } - } - - return $out; - } - - public function filterParserPlugins(array $plugins) - { - return $plugins; - } - - public function preRender() - { - return ''; - } - - public function postRender() - { - return ''; - } - - public static function sortPropertiesFull(BasicObject $a, BasicObject $b) - { - $sort = BasicObject::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - $sort = BasicObject::sortByName($a, $b); - if ($sort) { - return $sort; - } - - return InstanceObject::sortByHierarchy($a->owner_class, $b->owner_class); - } - - /** - * Sorts an array of BasicObject. - * - * @param BasicObject[] $contents Object properties to sort - * @param int $sort - * - * @return BasicObject[] - */ - public static function sortProperties(array $contents, $sort) - { - switch ($sort) { - case self::SORT_VISIBILITY: - /** @var array Containers to quickly stable sort by type */ - $containers = array( - BasicObject::ACCESS_PUBLIC => array(), - BasicObject::ACCESS_PROTECTED => array(), - BasicObject::ACCESS_PRIVATE => array(), - BasicObject::ACCESS_NONE => array(), - ); - - foreach ($contents as $item) { - $containers[$item->access][] = $item; - } - - return \call_user_func_array('array_merge', $containers); - case self::SORT_FULL: - \usort($contents, array('Kint\\Renderer\\Renderer', 'sortPropertiesFull')); - // no break - default: - return $contents; - } - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/BinaryPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/BinaryPlugin.php deleted file mode 100644 index 5b4d613f..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/BinaryPlugin.php +++ /dev/null @@ -1,51 +0,0 @@ -'; - - $chunks = \str_split($r->contents, self::$line_length); - - foreach ($chunks as $index => $chunk) { - $out .= \sprintf('%08X', $index * self::$line_length).":\t"; - $out .= \implode(' ', \str_split(\str_pad(\bin2hex($chunk), 2 * self::$line_length, ' '), self::$chunk_length)); - $out .= "\t".\preg_replace('/[^\\x20-\\x7E]/', '.', $chunk)."\n"; - } - - $out .= ''; - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/BlacklistPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/BlacklistPlugin.php deleted file mode 100644 index fcfedc1a..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/BlacklistPlugin.php +++ /dev/null @@ -1,36 +0,0 @@ -'.$this->renderLockedHeader($o, 'Blacklisted').''; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/CallablePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/CallablePlugin.php deleted file mode 100644 index 5834017b..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/CallablePlugin.php +++ /dev/null @@ -1,174 +0,0 @@ -renderMethod($o); - } - - if ($o instanceof ClosureObject) { - return $this->renderClosure($o); - } - - return $this->renderCallable($o); - } - - protected function renderClosure(ClosureObject $o) - { - $children = $this->renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).')'; - } - - if (null !== ($s = $o->getValueShort())) { - if (RichRenderer::$strlen_max && BlobObject::strlen($s) > RichRenderer::$strlen_max) { - $s = \substr($s, 0, RichRenderer::$strlen_max).'...'; - } - $header .= ' '.$this->renderer->escape($s); - } - - return '
'.$this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header).$children.'
'; - } - - protected function renderCallable(BasicObject $o) - { - $children = $this->renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).''; - } - - if (null !== ($s = $o->getValueShort())) { - if (RichRenderer::$strlen_max && BlobObject::strlen($s) > RichRenderer::$strlen_max) { - $s = \substr($s, 0, RichRenderer::$strlen_max).'...'; - } - $header .= ' '.$this->renderer->escape($s); - } - - return '
'.$this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header).$children.'
'; - } - - protected function renderMethod(MethodObject $o) - { - if (!empty(self::$method_cache[$o->owner_class][$o->name])) { - $children = self::$method_cache[$o->owner_class][$o->name]['children']; - - $header = $this->renderer->renderHeaderWrapper( - $o, - (bool) \strlen($children), - self::$method_cache[$o->owner_class][$o->name]['header'] - ); - - return '
'.$header.$children.'
'; - } - - $children = $this->renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers()) || $o->return_reference) { - $header .= ''.$s; - - if ($o->return_reference) { - if ($s) { - $header .= ' '; - } - $header .= $this->renderer->escape('&'); - } - - $header .= ' '; - } - - if (null !== ($s = $o->getName())) { - $function = $this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).')'; - - if (null !== ($url = $o->getPhpDocUrl())) { - $function = ''.$function.''; - } - - $header .= ''.$function.''; - } - - if (!empty($o->returntype)) { - $header .= ': '; - - if ($o->return_reference) { - $header .= $this->renderer->escape('&'); - } - - $header .= $this->renderer->escape($o->returntype).''; - } elseif ($o->docstring) { - if (\preg_match('/@return\\s+(.*)\\r?\\n/m', $o->docstring, $matches)) { - if (\trim($matches[1])) { - $header .= ': '.$this->renderer->escape(\trim($matches[1])).''; - } - } - } - - if (null !== ($s = $o->getValueShort())) { - if (RichRenderer::$strlen_max && BlobObject::strlen($s) > RichRenderer::$strlen_max) { - $s = \substr($s, 0, RichRenderer::$strlen_max).'...'; - } - $header .= ' '.$this->renderer->escape($s); - } - - if (\strlen($o->owner_class) && \strlen($o->name)) { - self::$method_cache[$o->owner_class][$o->name] = array( - 'header' => $header, - 'children' => $children, - ); - } - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/ClosurePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/ClosurePlugin.php deleted file mode 100644 index 79a9926c..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/ClosurePlugin.php +++ /dev/null @@ -1,59 +0,0 @@ -renderer->renderChildren($o); - - if (!($o instanceof ClosureObject)) { - $header = $this->renderer->renderHeader($o); - } else { - $header = ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).') '; - } - - $header .= 'Closure '; - $header .= $this->renderer->escape(Kint::shortenPath($o->filename)).':'.(int) $o->startline; - } - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/ColorPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/ColorPlugin.php deleted file mode 100644 index 241a8154..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/ColorPlugin.php +++ /dev/null @@ -1,100 +0,0 @@ -getRepresentation('color'); - - if (!$r instanceof ColorRepresentation) { - return; - } - - $children = $this->renderer->renderChildren($o); - - $header = $this->renderer->renderHeader($o); - $header .= '
'; - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } - - public function renderTab(Representation $r) - { - if (!$r instanceof ColorRepresentation) { - return; - } - - $out = ''; - - if ($color = $r->getColor(ColorRepresentation::COLOR_NAME)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_3)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_6)) { - $out .= ''.$color."\n"; - } - - if ($r->hasAlpha()) { - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_4)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_8)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_RGBA)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HSLA)) { - $out .= ''.$color."\n"; - } - } else { - if ($color = $r->getColor(ColorRepresentation::COLOR_RGB)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HSL)) { - $out .= ''.$color."\n"; - } - } - - if (!\strlen($out)) { - return false; - } - - return '
'.$out.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php deleted file mode 100644 index cd92b417..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/DepthLimitPlugin.php +++ /dev/null @@ -1,36 +0,0 @@ -'.$this->renderLockedHeader($o, 'Depth Limit').''; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php deleted file mode 100644 index 19c53095..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/DocstringPlugin.php +++ /dev/null @@ -1,70 +0,0 @@ -contents) as $line) { - $docstring[] = \trim($line); - } - - $docstring = \implode("\n", $docstring); - - $location = array(); - - if ($r->class) { - $location[] = 'Inherited from '.$this->renderer->escape($r->class); - } - if ($r->file && $r->line) { - $location[] = 'Defined in '.$this->renderer->escape(Kint::shortenPath($r->file)).':'.((int) $r->line); - } - - $location = \implode("\n", $location); - - if ($location) { - if (\strlen($docstring)) { - $docstring .= "\n\n"; - } - - $location = ''.$location.''; - } elseif (0 === \strlen($docstring)) { - return ''; - } - - return '
'.$this->renderer->escape($docstring).$location.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php deleted file mode 100644 index a56bb23e..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/MicrotimePlugin.php +++ /dev/null @@ -1,68 +0,0 @@ -getDateTime()->format('Y-m-d H:i:s.u'); - if (null !== $r->lap) { - $out .= '
SINCE LAST CALL: '.\round($r->lap, 4).'s.'; - } - if (null !== $r->total) { - $out .= '
SINCE START: '.\round($r->total, 4).'s.'; - } - if (null !== $r->avg) { - $out .= '
AVERAGE DURATION: '.\round($r->avg, 4).'s.'; - } - - $bytes = Utils::getHumanReadableBytes($r->mem); - $out .= '
MEMORY USAGE: '.$r->mem.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_real); - $out .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - $bytes = Utils::getHumanReadableBytes($r->mem_peak); - $out .= '
PEAK MEMORY USAGE: '.$r->mem_peak.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_peak_real); - $out .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - return '
'.$out.'
'; - } - - public static function renderJs() - { - return \file_get_contents(KINT_DIR.'/resources/compiled/microtime.js'); - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php b/system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php deleted file mode 100644 index f46aa294..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/ObjectPluginInterface.php +++ /dev/null @@ -1,33 +0,0 @@ -renderer = $r; - } - - /** - * Renders a locked header. - * - * @param BasicObject $o - * @param string $content - */ - public function renderLockedHeader(BasicObject $o, $content) - { - $header = '
'; - - if (RichRenderer::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { - $header .= ''; - } - - $header .= ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).' '; - - if ($s = $o->getOperator()) { - $header .= $this->renderer->escape($s, 'ASCII').' '; - } - } - - if (null !== ($s = $o->getType())) { - $s = $this->renderer->escape($s); - - if ($o->reference) { - $s = '&'.$s; - } - - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getSize())) { - $header .= '('.$this->renderer->escape($s).') '; - } - - $header .= $content; - - if (!empty($ap)) { - $header .= '
'.$this->renderer->escape($ap).'
'; - } - - return $header.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/PluginInterface.php b/system/ThirdParty/Kint/Renderer/Rich/PluginInterface.php deleted file mode 100644 index 79828e7d..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/PluginInterface.php +++ /dev/null @@ -1,33 +0,0 @@ -'.$this->renderLockedHeader($o, 'Recursion').''; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php deleted file mode 100644 index 6c18931e..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/SimpleXMLElementPlugin.php +++ /dev/null @@ -1,81 +0,0 @@ -renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).' '; - - if ($s = $o->getOperator()) { - $header .= $this->renderer->escape($s, 'ASCII').' '; - } - } - - if (null !== ($s = $o->getType())) { - $s = $this->renderer->escape($s); - - if ($o->reference) { - $s = '&'.$s; - } - - $header .= ''.$this->renderer->escape($s).' '; - } - - if (null !== ($s = $o->getSize())) { - $header .= '('.$this->renderer->escape($s).') '; - } - - if (null === $s && $c = $o->getRepresentation('contents')) { - $c = \reset($c->contents); - - if ($c && null !== ($s = $c->getValueShort())) { - if (RichRenderer::$strlen_max && BlobObject::strlen($s) > RichRenderer::$strlen_max) { - $s = \substr($s, 0, RichRenderer::$strlen_max).'...'; - } - $header .= $this->renderer->escape($s); - } - } - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php deleted file mode 100644 index 5443dbfd..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/SourcePlugin.php +++ /dev/null @@ -1,79 +0,0 @@ -source)) { - return false; - } - - $source = $r->source; - - // Trim empty lines from the start and end of the source - foreach ($source as $linenum => $line) { - if (\strlen(\trim($line)) || $linenum === $r->line) { - break; - } - - unset($source[$linenum]); - } - - foreach (\array_reverse($source, true) as $linenum => $line) { - if (\strlen(\trim($line)) || $linenum === $r->line) { - break; - } - - unset($source[$linenum]); - } - - $output = ''; - - foreach ($source as $linenum => $line) { - if ($linenum === $r->line) { - $output .= '
'.$this->renderer->escape($line)."\n".'
'; - } else { - $output .= '
'.$this->renderer->escape($line)."\n".'
'; - } - } - - if ($output) { - \reset($source); - - $data = ''; - if ($r->showfilename) { - $data = ' data-kint-filename="'.$this->renderer->escape($r->filename).'"'; - } - - return '
'.$output.'
'; - } - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php b/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php deleted file mode 100644 index 7cdbde72..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/TabPluginInterface.php +++ /dev/null @@ -1,33 +0,0 @@ -'; - - $firstrow = \reset($r->contents); - - foreach ($firstrow->value->contents as $field) { - $out .= ''; - } - - $out .= ''; - - foreach ($r->contents as $row) { - $out .= ''; - - foreach ($row->value->contents as $field) { - $out .= 'getType())) { - $type = $this->renderer->escape($s); - - if ($field->reference) { - $ref = '&'; - $type = $ref.$type; - } - - if (null !== ($s = $field->getSize())) { - $size .= ' ('.$this->renderer->escape($s).')'; - } - } - - if ($type) { - $out .= ' title="'.$type.$size.'"'; - } - - $out .= '>'; - - switch ($field->type) { - case 'boolean': - $out .= $field->value->contents ? ''.$ref.'true' : ''.$ref.'false'; - break; - case 'integer': - case 'double': - $out .= (string) $field->value->contents; - break; - case 'null': - $out .= ''.$ref.'null'; - break; - case 'string': - if ($field->encoding) { - $val = $field->value->contents; - if (RichRenderer::$strlen_max && self::$respect_str_length && BlobObject::strlen($val) > RichRenderer::$strlen_max) { - $val = \substr($val, 0, RichRenderer::$strlen_max).'...'; - } - - $out .= $this->renderer->escape($val); - } else { - $out .= ''.$type.''; - } - break; - case 'array': - $out .= ''.$ref.'array'.$size; - break; - case 'object': - $out .= ''.$ref.$this->renderer->escape($field->classname).''.$size; - break; - case 'resource': - $out .= ''.$ref.'resource'; - break; - default: - $out .= ''.$ref.'unknown'; - break; - } - - if (\in_array('blacklist', $field->hints, true)) { - $out .= ' Blacklisted'; - } elseif (\in_array('recursion', $field->hints, true)) { - $out .= ' Recursion'; - } elseif (\in_array('depth_limit', $field->hints, true)) { - $out .= ' Depth Limit'; - } - - $out .= ''; - } - - $out .= ''; - } - - $out .= '
'.$this->renderer->escape($field->name).'
'; - $out .= $this->renderer->escape($row->name); - $out .= '
'; - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php b/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php deleted file mode 100644 index 6e3a2f8c..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/TimestampPlugin.php +++ /dev/null @@ -1,42 +0,0 @@ -contents); - - if ($dt) { - return '
'.$dt->setTimeZone(new DateTimeZone('UTC'))->format('Y-m-d H:i:s T').'
'; - } - } -} diff --git a/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php b/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php deleted file mode 100644 index 6ca19bb6..00000000 --- a/system/ThirdParty/Kint/Renderer/Rich/TraceFramePlugin.php +++ /dev/null @@ -1,68 +0,0 @@ -trace['file']) && !empty($o->trace['line'])) { - $header = ''.$this->renderer->ideLink($o->trace['file'], (int) $o->trace['line']).' '; - } else { - $header = 'PHP internal call '; - } - - if ($o->trace['class']) { - $header .= $this->renderer->escape($o->trace['class'].$o->trace['type']); - } - - if (\is_string($o->trace['function'])) { - $function = $this->renderer->escape($o->trace['function'].'()'); - } else { - $function = $this->renderer->escape( - $o->trace['function']->getName().'('.$o->trace['function']->getParams().')' - ); - - if (null !== ($url = $o->trace['function']->getPhpDocUrl())) { - $function = ''.$function.''; - } - } - - $header .= ''.$function.''; - - $children = $this->renderer->renderChildren($o); - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/RichRenderer.php b/system/ThirdParty/Kint/Renderer/RichRenderer.php deleted file mode 100644 index dcd39eec..00000000 --- a/system/ThirdParty/Kint/Renderer/RichRenderer.php +++ /dev/null @@ -1,612 +0,0 @@ - 'Kint\\Renderer\\Rich\\BlacklistPlugin', - 'callable' => 'Kint\\Renderer\\Rich\\CallablePlugin', - 'closure' => 'Kint\\Renderer\\Rich\\ClosurePlugin', - 'color' => 'Kint\\Renderer\\Rich\\ColorPlugin', - 'depth_limit' => 'Kint\\Renderer\\Rich\\DepthLimitPlugin', - 'recursion' => 'Kint\\Renderer\\Rich\\RecursionPlugin', - 'simplexml_element' => 'Kint\\Renderer\\Rich\\SimpleXMLElementPlugin', - 'trace_frame' => 'Kint\\Renderer\\Rich\\TraceFramePlugin', - ); - - /** - * RichRenderer tab plugins should implement Kint\Renderer\Rich\TabPluginInterface. - */ - public static $tab_plugins = array( - 'binary' => 'Kint\\Renderer\\Rich\\BinaryPlugin', - 'color' => 'Kint\\Renderer\\Rich\\ColorPlugin', - 'docstring' => 'Kint\\Renderer\\Rich\\DocstringPlugin', - 'microtime' => 'Kint\\Renderer\\Rich\\MicrotimePlugin', - 'source' => 'Kint\\Renderer\\Rich\\SourcePlugin', - 'table' => 'Kint\\Renderer\\Rich\\TablePlugin', - 'timestamp' => 'Kint\\Renderer\\Rich\\TimestampPlugin', - ); - - public static $pre_render_sources = array( - 'script' => array( - array('Kint\\Renderer\\RichRenderer', 'renderJs'), - array('Kint\\Renderer\\Rich\\MicrotimePlugin', 'renderJs'), - ), - 'style' => array( - array('Kint\\Renderer\\RichRenderer', 'renderCss'), - ), - 'raw' => array(), - ); - - /** - * Whether or not to render access paths. - * - * Access paths can become incredibly heavy with very deep and wide - * structures. Given mostly public variables it will typically make - * up one quarter of the output HTML size. - * - * If this is an unacceptably large amount and your browser is groaning - * under the weight of the access paths - your first order of buisiness - * should be to get a new browser. Failing that, use this to turn them off. - * - * @var bool - */ - public static $access_paths = true; - - /** - * The maximum length of a string before it is truncated. - * - * Falsey to disable - * - * @var int - */ - public static $strlen_max = 80; - - /** - * Path to the CSS file to load by default. - * - * @var string - */ - public static $theme = 'original.css'; - - /** - * Assume types and sizes don't need to be escaped. - * - * Turn this off if you use anything but ascii in your class names, - * but it'll cause a slowdown of around 10% - * - * @var bool - */ - public static $escape_types = false; - - /** - * Move all dumps to a folder at the bottom of the body. - * - * @var bool - */ - public static $folder = true; - - /** - * Sort mode for object properties. - * - * @var int - */ - public static $sort = self::SORT_NONE; - - public static $needs_pre_render = true; - public static $needs_folder_render = true; - - public static $always_pre_render = false; - - protected $plugin_objs = array(); - protected $expand = false; - protected $force_pre_render = false; - protected $pre_render; - protected $use_folder; - - public function __construct() - { - $this->pre_render = self::$needs_pre_render; - $this->use_folder = self::$folder; - - if (self::$always_pre_render) { - $this->setForcePreRender(); - } - } - - public function setCallInfo(array $info) - { - parent::setCallInfo($info); - - if (\in_array('!', $this->call_info['modifiers'], true)) { - $this->setExpand(true); - $this->use_folder = false; - } - - if (\in_array('@', $this->call_info['modifiers'], true)) { - $this->setForcePreRender(); - } - } - - public function setStatics(array $statics) - { - parent::setStatics($statics); - - if (!empty($statics['expanded'])) { - $this->setExpand(true); - } - - if (!empty($statics['return'])) { - $this->setForcePreRender(); - } - } - - public function setExpand($expand) - { - $this->expand = $expand; - } - - public function getExpand() - { - return $this->expand; - } - - public function setForcePreRender() - { - $this->force_pre_render = true; - $this->pre_render = true; - } - - public function setPreRender($pre_render) - { - $this->setForcePreRender(); // TODO: Remove line in next major version - $this->pre_render = $pre_render; - } - - public function getPreRender() - { - return $this->pre_render; - } - - public function setUseFolder($use_folder) - { - $this->use_folder = $use_folder; - } - - public function getUseFolder() - { - return $this->use_folder; - } - - public function render(BasicObject $o) - { - if ($plugin = $this->getPlugin(self::$object_plugins, $o->hints)) { - if (\strlen($output = $plugin->renderObject($o))) { - return $output; - } - } - - $children = $this->renderChildren($o); - $header = $this->renderHeaderWrapper($o, (bool) \strlen($children), $this->renderHeader($o)); - - return '
'.$header.$children.'
'; - } - - public function renderNothing() - { - return '
No argument
'; - } - - public function renderHeaderWrapper(BasicObject $o, $has_children, $contents) - { - $out = 'expand) { - $out .= ' kint-show'; - } - - $out .= '"'; - } - - $out .= '>'; - - if (self::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { - $out .= ''; - } - - if ($has_children) { - $out .= ''; - - if (0 === $o->depth) { - $out .= ''; - $out .= ''; - } - - $out .= ''; - } - - $out .= $contents; - - if (!empty($ap)) { - $out .= '
'.$this->escape($ap).'
'; - } - - return $out.''; - } - - public function renderHeader(BasicObject $o) - { - $output = ''; - - if (null !== ($s = $o->getModifiers())) { - $output .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $output .= ''.$this->escape($s).' '; - - if ($s = $o->getOperator()) { - $output .= $this->escape($s, 'ASCII').' '; - } - } - - if (null !== ($s = $o->getType())) { - if (self::$escape_types) { - $s = $this->escape($s); - } - - if ($o->reference) { - $s = '&'.$s; - } - - $output .= ''.$s.' '; - } - - if (null !== ($s = $o->getSize())) { - if (self::$escape_types) { - $s = $this->escape($s); - } - $output .= '('.$s.') '; - } - - if (null !== ($s = $o->getValueShort())) { - $s = \preg_replace('/\\s+/', ' ', $s); - - if (self::$strlen_max) { - $s = Utils::truncateString($s, self::$strlen_max); - } - - $output .= $this->escape($s); - } - - return \trim($output); - } - - public function renderChildren(BasicObject $o) - { - $contents = array(); - $tabs = array(); - - foreach ($o->getRepresentations() as $rep) { - $result = $this->renderTab($o, $rep); - if (\strlen($result)) { - $contents[] = $result; - $tabs[] = $rep; - } - } - - if (empty($tabs)) { - return ''; - } - - $output = '
'; - - if (1 === \count($tabs) && $tabs[0]->labelIsImplicit()) { - $output .= \reset($contents); - } else { - $output .= '
    '; - - foreach ($tabs as $i => $tab) { - if (0 === $i) { - $output .= '
  • '; - } else { - $output .= '
  • '; - } - - $output .= $this->escape($tab->getLabel()).'
  • '; - } - - $output .= '
    '; - - foreach ($contents as $tab) { - $output .= '
  • '.$tab.'
  • '; - } - - $output .= '
'; - } - - return $output.'
'; - } - - public function preRender() - { - $output = ''; - - if ($this->pre_render) { - foreach (self::$pre_render_sources as $type => $values) { - $contents = ''; - foreach ($values as $v) { - $contents .= \call_user_func($v, $this); - } - - if (!\strlen($contents)) { - continue; - } - - switch ($type) { - case 'script': - $output .= ''; - break; - case 'style': - $output .= ''; - break; - default: - $output .= $contents; - } - } - - // Don't pre-render on every dump - if (!$this->force_pre_render) { - self::$needs_pre_render = false; - } - } - - $output .= '
'; - - return $output; - } - - public function postRender() - { - if (!$this->show_trace) { - return '
'; - } - - $output = '
'; - $output .= ' '; - - if (!empty($this->call_info['trace']) && \count($this->call_info['trace']) > 1) { - $output .= ''; - } - - if (isset($this->call_info['callee']['file'])) { - $output .= 'Called from '.$this->ideLink( - $this->call_info['callee']['file'], - $this->call_info['callee']['line'] - ); - } - - if (isset($this->call_info['callee']['function']) && ( - !empty($this->call_info['callee']['class']) || - !\in_array( - $this->call_info['callee']['function'], - array('include', 'include_once', 'require', 'require_once'), - true - ) - ) - ) { - $output .= ' ['; - if (isset($this->call_info['callee']['class'])) { - $output .= $this->call_info['callee']['class']; - } - if (isset($this->call_info['callee']['type'])) { - $output .= $this->call_info['callee']['type']; - } - $output .= $this->call_info['callee']['function'].'()]'; - } - - if (!empty($this->call_info['trace']) && \count($this->call_info['trace']) > 1) { - $output .= '
    '; - foreach ($this->call_info['trace'] as $index => $step) { - if (!$index) { - continue; - } - - $output .= '
  1. '.$this->ideLink($step['file'], $step['line']); // closing tag not required - if (isset($step['function']) - && !\in_array($step['function'], array('include', 'include_once', 'require', 'require_once'), true) - ) { - $output .= ' ['; - if (isset($step['class'])) { - $output .= $step['class']; - } - if (isset($step['type'])) { - $output .= $step['type']; - } - $output .= $step['function'].'()]'; - } - } - $output .= '
'; - } - - $output .= '
'; - - return $output; - } - - public function escape($string, $encoding = false) - { - if (false === $encoding) { - $encoding = BlobObject::detectEncoding($string); - } - - $original_encoding = $encoding; - - if (false === $encoding || 'ASCII' === $encoding) { - $encoding = 'UTF-8'; - } - - $string = \htmlspecialchars($string, ENT_NOQUOTES, $encoding); - - // this call converts all non-ASCII characters into numeirc htmlentities - if (\function_exists('mb_encode_numericentity') && 'ASCII' !== $original_encoding) { - $string = \mb_encode_numericentity($string, array(0x80, 0xffff, 0, 0xffff), $encoding); - } - - return $string; - } - - public function ideLink($file, $line) - { - $path = $this->escape(Kint::shortenPath($file)).':'.$line; - $ideLink = Kint::getIdeLink($file, $line); - - if (!$ideLink) { - return $path; - } - - $class = ''; - - if (\preg_match('/https?:\\/\\//i', $ideLink)) { - $class = 'class="kint-ide-link" '; - } - - return ''.$path.''; - } - - protected function renderTab(BasicObject $o, Representation $rep) - { - if ($plugin = $this->getPlugin(self::$tab_plugins, $rep->hints)) { - if (\strlen($output = $plugin->renderTab($rep))) { - return $output; - } - } - - if (\is_array($rep->contents)) { - $output = ''; - - if ($o instanceof InstanceObject && 'properties' === $rep->getName()) { - foreach (self::sortProperties($rep->contents, self::$sort) as $obj) { - $output .= $this->render($obj); - } - } else { - foreach ($rep->contents as $obj) { - $output .= $this->render($obj); - } - } - - return $output; - } - - if (\is_string($rep->contents)) { - $show_contents = false; - - // If it is the value representation of a string and its whitespace - // was truncated in the header, always display the full string - if ('string' !== $o->type || $o->value !== $rep) { - $show_contents = true; - } else { - if (\preg_match('/(:?[\\r\\n\\t\\f\\v]| {2})/', $rep->contents)) { - $show_contents = true; - } elseif (self::$strlen_max && BlobObject::strlen($o->getValueShort()) > self::$strlen_max) { - $show_contents = true; - } - - if (empty($o->encoding)) { - $show_contents = false; - } - } - - if ($show_contents) { - return '
'.$this->escape($rep->contents)."\n
"; - } - } - - if ($rep->contents instanceof BasicObject) { - return $this->render($rep->contents); - } - } - - protected function getPlugin(array $plugins, array $hints) - { - if ($plugins = $this->matchPlugins($plugins, $hints)) { - $plugin = \end($plugins); - - if (!isset($this->plugin_objs[$plugin])) { - $this->plugin_objs[$plugin] = new $plugin($this); - } - - return $this->plugin_objs[$plugin]; - } - } - - protected static function renderJs() - { - return \file_get_contents(KINT_DIR.'/resources/compiled/shared.js').\file_get_contents(KINT_DIR.'/resources/compiled/rich.js'); - } - - protected static function renderCss() - { - if (\file_exists(KINT_DIR.'/resources/compiled/'.self::$theme)) { - return \file_get_contents(KINT_DIR.'/resources/compiled/'.self::$theme); - } - - return \file_get_contents(self::$theme); - } - - protected static function renderFolder() - { - return '
Kint
'; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php b/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php deleted file mode 100644 index 127d32a1..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/BlacklistPlugin.php +++ /dev/null @@ -1,44 +0,0 @@ -depth) { - $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('BLACKLISTED').PHP_EOL; - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php b/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php deleted file mode 100644 index 310b87e4..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/DepthLimitPlugin.php +++ /dev/null @@ -1,44 +0,0 @@ -depth) { - $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('DEPTH LIMIT').PHP_EOL; - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php b/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php deleted file mode 100644 index 9128032c..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/MicrotimePlugin.php +++ /dev/null @@ -1,128 +0,0 @@ -renderer instanceof PlainRenderer) { - $this->useJs = true; - } - } - - public function render(BasicObject $o) - { - $r = $o->getRepresentation('microtime'); - - if (!$r instanceof MicrotimeRepresentation) { - return false; - } - - $out = ''; - - if (0 == $o->depth) { - $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderer->renderHeader($o); - $out .= $this->renderer->renderChildren($o).PHP_EOL; - - $indent = \str_repeat(' ', ($o->depth + 1) * $this->renderer->indent_width); - - if ($this->useJs) { - $out .= ''; - } - - $out .= $indent.$this->renderer->colorType('TIME:').' '; - $out .= $this->renderer->colorValue($r->getDateTime()->format('Y-m-d H:i:s.u')).PHP_EOL; - - if (null !== $r->lap) { - $out .= $indent.$this->renderer->colorType('SINCE LAST CALL:').' '; - - $lap = \round($r->lap, 4); - - if ($this->useJs) { - $lap = ''.$lap.''; - } - - $out .= $this->renderer->colorValue($lap.'s').'.'.PHP_EOL; - } - if (null !== $r->total) { - $out .= $indent.$this->renderer->colorType('SINCE START:').' '; - $out .= $this->renderer->colorValue(\round($r->total, 4).'s').'.'.PHP_EOL; - } - if (null !== $r->avg) { - $out .= $indent.$this->renderer->colorType('AVERAGE DURATION:').' '; - - $avg = \round($r->avg, 4); - - if ($this->useJs) { - $avg = ''.$avg.''; - } - - $out .= $this->renderer->colorValue($avg.'s').'.'.PHP_EOL; - } - - $bytes = Utils::getHumanReadableBytes($r->mem); - $mem = $r->mem.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_real); - $mem .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - $out .= $indent.$this->renderer->colorType('MEMORY USAGE:').' '; - $out .= $this->renderer->colorValue($mem).'.'.PHP_EOL; - - $bytes = Utils::getHumanReadableBytes($r->mem_peak); - $mem = $r->mem_peak.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_peak_real); - $mem .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - $out .= $indent.$this->renderer->colorType('PEAK MEMORY USAGE:').' '; - $out .= $this->renderer->colorValue($mem).'.'.PHP_EOL; - - if ($this->useJs) { - $out .= ''; - } - - return $out; - } - - public static function renderJs() - { - return RichPlugin::renderJs(); - } -} diff --git a/system/ThirdParty/Kint/Renderer/Text/Plugin.php b/system/ThirdParty/Kint/Renderer/Text/Plugin.php deleted file mode 100644 index 9de25c1a..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/Plugin.php +++ /dev/null @@ -1,41 +0,0 @@ -renderer = $r; - } - - abstract public function render(BasicObject $o); -} diff --git a/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php b/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php deleted file mode 100644 index 72c2257c..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/RecursionPlugin.php +++ /dev/null @@ -1,44 +0,0 @@ -depth) { - $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderer->renderHeader($o).' '.$this->renderer->colorValue('RECURSION').PHP_EOL; - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php b/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php deleted file mode 100644 index 5833840c..00000000 --- a/system/ThirdParty/Kint/Renderer/Text/TracePlugin.php +++ /dev/null @@ -1,111 +0,0 @@ -depth) { - $out .= $this->renderer->colorTitle($this->renderer->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderer->renderHeader($o).':'.PHP_EOL; - - $indent = \str_repeat(' ', ($o->depth + 1) * $this->renderer->indent_width); - - $i = 1; - foreach ($o->value->contents as $frame) { - $framedesc = $indent.\str_pad($i.': ', 4, ' '); - - if ($frame->trace['file']) { - $framedesc .= $this->renderer->ideLink($frame->trace['file'], $frame->trace['line']).PHP_EOL; - } else { - $framedesc .= 'PHP internal call'.PHP_EOL; - } - - $framedesc .= $indent.' '; - - if ($frame->trace['class']) { - $framedesc .= $this->renderer->escape($frame->trace['class']); - - if ($frame->trace['object']) { - $framedesc .= $this->renderer->escape('->'); - } else { - $framedesc .= '::'; - } - } - - if (\is_string($frame->trace['function'])) { - $framedesc .= $this->renderer->escape($frame->trace['function']).'(...)'; - } elseif ($frame->trace['function'] instanceof MethodObject) { - $framedesc .= $this->renderer->escape($frame->trace['function']->getName()); - $framedesc .= '('.$this->renderer->escape($frame->trace['function']->getParams()).')'; - } - - $out .= $this->renderer->colorType($framedesc).PHP_EOL.PHP_EOL; - - if ($source = $frame->getRepresentation('source')) { - $line_wanted = $source->line; - $source = $source->source; - - // Trim empty lines from the start and end of the source - foreach ($source as $linenum => $line) { - if (\trim($line) || $linenum === $line_wanted) { - break; - } - - unset($source[$linenum]); - } - - foreach (\array_reverse($source, true) as $linenum => $line) { - if (\trim($line) || $linenum === $line_wanted) { - break; - } - - unset($source[$linenum]); - } - - foreach ($source as $lineno => $line) { - if ($lineno == $line_wanted) { - $out .= $indent.$this->renderer->colorValue($this->renderer->escape($line)).PHP_EOL; - } else { - $out .= $indent.$this->renderer->escape($line).PHP_EOL; - } - } - } - - ++$i; - } - - return $out; - } -} diff --git a/system/ThirdParty/Kint/Renderer/TextRenderer.php b/system/ThirdParty/Kint/Renderer/TextRenderer.php deleted file mode 100644 index 43b6c40d..00000000 --- a/system/ThirdParty/Kint/Renderer/TextRenderer.php +++ /dev/null @@ -1,346 +0,0 @@ - 'Kint\\Renderer\\Text\\BlacklistPlugin', - 'depth_limit' => 'Kint\\Renderer\\Text\\DepthLimitPlugin', - 'microtime' => 'Kint\\Renderer\\Text\\MicrotimePlugin', - 'recursion' => 'Kint\\Renderer\\Text\\RecursionPlugin', - 'trace' => 'Kint\\Renderer\\Text\\TracePlugin', - ); - - /** - * Parser plugins must be instanceof one of these or - * it will be removed for performance reasons. - */ - public static $parser_plugin_whitelist = array( - 'Kint\\Parser\\BlacklistPlugin', - 'Kint\\Parser\\MicrotimePlugin', - 'Kint\\Parser\\StreamPlugin', - 'Kint\\Parser\\TracePlugin', - ); - - /** - * The maximum length of a string before it is truncated. - * - * Falsey to disable - * - * @var int - */ - public static $strlen_max = 0; - - /** - * The default width of the terminal for headers. - * - * @var int - */ - public static $default_width = 80; - - /** - * Indentation width. - * - * @var int - */ - public static $default_indent = 4; - - /** - * Decorate the header and footer. - * - * @var bool - */ - public static $decorations = true; - - /** - * Sort mode for object properties. - * - * @var int - */ - public static $sort = self::SORT_NONE; - - public $header_width = 80; - public $indent_width = 4; - - protected $plugin_objs = array(); - - public function __construct() - { - $this->header_width = self::$default_width; - $this->indent_width = self::$default_indent; - } - - public function render(BasicObject $o) - { - if ($plugin = $this->getPlugin(self::$plugins, $o->hints)) { - if (\strlen($output = $plugin->render($o))) { - return $output; - } - } - - $out = ''; - - if (0 == $o->depth) { - $out .= $this->colorTitle($this->renderTitle($o)).PHP_EOL; - } - - $out .= $this->renderHeader($o); - $out .= $this->renderChildren($o).PHP_EOL; - - return $out; - } - - public function renderNothing() - { - if (self::$decorations) { - return $this->colorTitle( - $this->boxText('No argument', $this->header_width) - ).PHP_EOL; - } - - return $this->colorTitle('No argument').PHP_EOL; - } - - public function boxText($text, $width) - { - $out = '┌'.\str_repeat('─', $width - 2).'┐'.PHP_EOL; - - if (\strlen($text)) { - $text = Utils::truncateString($text, $width - 4); - $text = \str_pad($text, $width - 4); - - $out .= '│ '.$this->escape($text).' │'.PHP_EOL; - } - - $out .= '└'.\str_repeat('─', $width - 2).'┘'; - - return $out; - } - - public function renderTitle(BasicObject $o) - { - $name = (string) $o->getName(); - - if (self::$decorations) { - return $this->boxText($name, $this->header_width); - } - - return Utils::truncateString($name, $this->header_width); - } - - public function renderHeader(BasicObject $o) - { - $output = array(); - - if ($o->depth) { - if (null !== ($s = $o->getModifiers())) { - $output[] = $s; - } - - if (null !== $o->name) { - $output[] = $this->escape(\var_export($o->name, true)); - - if (null !== ($s = $o->getOperator())) { - $output[] = $this->escape($s); - } - } - } - - if (null !== ($s = $o->getType())) { - if ($o->reference) { - $s = '&'.$s; - } - - $output[] = $this->colorType($this->escape($s)); - } - - if (null !== ($s = $o->getSize())) { - $output[] = '('.$this->escape($s).')'; - } - - if (null !== ($s = $o->getValueShort())) { - if (self::$strlen_max) { - $s = Utils::truncateString($s, self::$strlen_max); - } - $output[] = $this->colorValue($this->escape($s)); - } - - return \str_repeat(' ', $o->depth * $this->indent_width).\implode(' ', $output); - } - - public function renderChildren(BasicObject $o) - { - if ('array' === $o->type) { - $output = ' ['; - } elseif ('object' === $o->type) { - $output = ' ('; - } else { - return ''; - } - - $children = ''; - - if ($o->value && \is_array($o->value->contents)) { - if ($o instanceof InstanceObject && 'properties' === $o->value->getName()) { - foreach (self::sortProperties($o->value->contents, self::$sort) as $obj) { - $children .= $this->render($obj); - } - } else { - foreach ($o->value->contents as $child) { - $children .= $this->render($child); - } - } - } - - if ($children) { - $output .= PHP_EOL.$children; - $output .= \str_repeat(' ', $o->depth * $this->indent_width); - } - - if ('array' === $o->type) { - $output .= ']'; - } else { - $output .= ')'; - } - - return $output; - } - - public function colorValue($string) - { - return $string; - } - - public function colorType($string) - { - return $string; - } - - public function colorTitle($string) - { - return $string; - } - - public function postRender() - { - if (self::$decorations) { - $output = \str_repeat('═', $this->header_width); - } else { - $output = ''; - } - - if (!$this->show_trace) { - return $this->colorTitle($output); - } - - if ($output) { - $output .= PHP_EOL; - } - - return $this->colorTitle($output.$this->calledFrom().PHP_EOL); - } - - public function filterParserPlugins(array $plugins) - { - $return = array(); - - foreach ($plugins as $index => $plugin) { - foreach (self::$parser_plugin_whitelist as $whitelist) { - if ($plugin instanceof $whitelist) { - $return[] = $plugin; - continue 2; - } - } - } - - return $return; - } - - public function ideLink($file, $line) - { - return $this->escape(Kint::shortenPath($file)).':'.$line; - } - - public function escape($string, $encoding = false) - { - return $string; - } - - protected function calledFrom() - { - $output = ''; - - if (isset($this->call_info['callee']['file'])) { - $output .= 'Called from '.$this->ideLink( - $this->call_info['callee']['file'], - $this->call_info['callee']['line'] - ); - } - - if (isset($this->call_info['callee']['function']) && ( - !empty($this->call_info['callee']['class']) || - !\in_array( - $this->call_info['callee']['function'], - array('include', 'include_once', 'require', 'require_once'), - true - ) - ) - ) { - $output .= ' ['; - if (isset($this->call_info['callee']['class'])) { - $output .= $this->call_info['callee']['class']; - } - if (isset($this->call_info['callee']['type'])) { - $output .= $this->call_info['callee']['type']; - } - $output .= $this->call_info['callee']['function'].'()]'; - } - - return $output; - } - - protected function getPlugin(array $plugins, array $hints) - { - if ($plugins = $this->matchPlugins($plugins, $hints)) { - $plugin = \end($plugins); - - if (!isset($this->plugin_objs[$plugin])) { - $this->plugin_objs[$plugin] = new $plugin($this); - } - - return $this->plugin_objs[$plugin]; - } - } -} diff --git a/system/ThirdParty/Kint/Utils.php b/system/ThirdParty/Kint/Utils.php deleted file mode 100644 index 27a24913..00000000 --- a/system/ThirdParty/Kint/Utils.php +++ /dev/null @@ -1,240 +0,0 @@ - (float) ($value / \pow(1024, $i)), - 'unit' => $unit[$i], - ); - } - - public static function isSequential(array $array) - { - return \array_keys($array) === \range(0, \count($array) - 1); - } - - public static function composerGetExtras($key = 'kint') - { - $extras = array(); - - if (0 === \strpos(KINT_DIR, 'phar://')) { - // Only run inside phar file, so skip for code coverage - return $extras; // @codeCoverageIgnore - } - - $folder = KINT_DIR.'/vendor'; - - for ($i = 0; $i < 4; ++$i) { - $installed = $folder.'/composer/installed.json'; - - if (\file_exists($installed) && \is_readable($installed)) { - $packages = \json_decode(\file_get_contents($installed), true); - - foreach ($packages as $package) { - if (isset($package['extra'][$key]) && \is_array($package['extra'][$key])) { - $extras = \array_replace($extras, $package['extra'][$key]); - } - } - - $folder = \dirname($folder); - - if (\file_exists($folder.'/composer.json') && \is_readable($folder.'/composer.json')) { - $composer = \json_decode(\file_get_contents($folder.'/composer.json'), true); - - if (isset($composer['extra'][$key]) && \is_array($composer['extra'][$key])) { - $extras = \array_replace($extras, $composer['extra'][$key]); - } - } - - break; - } - - $folder = \dirname($folder); - } - - return $extras; - } - - /** - * @codeCoverageIgnore - */ - public static function composerSkipFlags() - { - $extras = self::composerGetExtras(); - - if (!empty($extras['disable-facade']) && !\defined('KINT_SKIP_FACADE')) { - \define('KINT_SKIP_FACADE', true); - } - - if (!empty($extras['disable-helpers']) && !\defined('KINT_SKIP_HELPERS')) { - \define('KINT_SKIP_HELPERS', true); - } - } - - public static function isTrace(array $trace) - { - if (!self::isSequential($trace)) { - return false; - } - - static $bt_structure = array( - 'function' => 'string', - 'line' => 'integer', - 'file' => 'string', - 'class' => 'string', - 'object' => 'object', - 'type' => 'string', - 'args' => 'array', - ); - - $file_found = false; - - foreach ($trace as $frame) { - if (!\is_array($frame) || !isset($frame['function'])) { - return false; - } - - foreach ($frame as $key => $val) { - if (!isset($bt_structure[$key])) { - return false; - } - - if (\gettype($val) !== $bt_structure[$key]) { - return false; - } - - if ('file' === $key) { - $file_found = true; - } - } - } - - return $file_found; - } - - public static function traceFrameIsListed(array $frame, array $matches) - { - if (isset($frame['class'])) { - $called = array(\strtolower($frame['class']), \strtolower($frame['function'])); - } else { - $called = \strtolower($frame['function']); - } - - return \in_array($called, $matches, true); - } - - public static function normalizeAliases(array &$aliases) - { - static $name_regex = '[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*'; - - foreach ($aliases as $index => &$alias) { - if (\is_array($alias) && 2 === \count($alias)) { - $alias = \array_values(\array_filter($alias, 'is_string')); - - if (2 === \count($alias) && - \preg_match('/^'.$name_regex.'$/', $alias[1]) && - \preg_match('/^\\\\?('.$name_regex.'\\\\)*'.$name_regex.'$/', $alias[0]) - ) { - $alias = array( - \strtolower(\ltrim($alias[0], '\\')), - \strtolower($alias[1]), - ); - } else { - unset($aliases[$index]); - continue; - } - } elseif (\is_string($alias)) { - if (\preg_match('/^\\\\?('.$name_regex.'\\\\)*'.$name_regex.'$/', $alias)) { - $alias = \explode('\\', \strtolower($alias)); - $alias = \end($alias); - } else { - unset($aliases[$index]); - continue; - } - } else { - unset($aliases[$index]); - } - } - - $aliases = \array_values($aliases); - } - - public static function truncateString($input, $length = PHP_INT_MAX, $end = '...', $encoding = false) - { - $length = (int) $length; - $endlength = BlobObject::strlen($end); - - if ($endlength >= $length) { - throw new InvalidArgumentException('Can\'t truncate a string to '.$length.' characters if ending with string '.$endlength.' characters long'); - } - - if (BlobObject::strlen($input, $encoding) > $length) { - return BlobObject::substr($input, 0, $length - $endlength, $encoding).$end; - } - - return $input; - } - - public static function getTypeString(ReflectionType $type) - { - if ($type instanceof ReflectionNamedType) { - return $type->getName(); - } - - return (string) $type; // @codeCoverageIgnore - } -} diff --git a/system/ThirdParty/Kint/init.php b/system/ThirdParty/Kint/init.php deleted file mode 100644 index 952e0414..00000000 --- a/system/ThirdParty/Kint/init.php +++ /dev/null @@ -1,62 +0,0 @@ -= 0)); -\define('KINT_PHP70', (\version_compare(PHP_VERSION, '7.0') >= 0)); -\define('KINT_PHP72', (\version_compare(PHP_VERSION, '7.2') >= 0)); -\define('KINT_PHP73', (\version_compare(PHP_VERSION, '7.3') >= 0)); -\define('KINT_PHP74', (\version_compare(PHP_VERSION, '7.4') >= 0)); - -// Dynamic default settings -Kint::$file_link_format = \ini_get('xdebug.file_link_format'); -if (isset($_SERVER['DOCUMENT_ROOT'])) { - Kint::$app_root_dirs = array( - $_SERVER['DOCUMENT_ROOT'] => '', - \realpath($_SERVER['DOCUMENT_ROOT']) => '', - ); -} - -Utils::composerSkipFlags(); - -if ((!\defined('KINT_SKIP_FACADE') || !KINT_SKIP_FACADE) && !\class_exists('Kint')) { - \class_alias('Kint\\Kint', 'Kint'); -} - -if (!\defined('KINT_SKIP_HELPERS') || !KINT_SKIP_HELPERS) { - require_once __DIR__.'/init_helpers.php'; -} diff --git a/system/ThirdParty/Kint/init_helpers.php b/system/ThirdParty/Kint/init_helpers.php deleted file mode 100644 index b961d67f..00000000 --- a/system/ThirdParty/Kint/init_helpers.php +++ /dev/null @@ -1,84 +0,0 @@ -dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxwYXRoIGQ9Ik02IDdoMThsLTkgMTV6bTAgMzBoMThsLTkgMTV6bTAgNDVoMThsLTktMTV6bTAgMzBoMThsLTktMTV6bTAgMTJsMTggMThtLTE4IDBsMTgtMTgiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNNiAxMjZsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSIjNTU1Ii8+PC9zdmc+") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#06f;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:red}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#f8f8f8;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#f8f8f8}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #d7d7d7;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#f8f8f8;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#f8f8f8;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f8f8f8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#f8f8f8;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint-rich ul.kint-tabs>li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#aaa;color:red}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:red}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #d7d7d7;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#aaa}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-rich table td{background:#f8f8f8;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-rich table tr:hover var{color:red}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #f8f8f8}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #aaa;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#f8f8f8}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #aaa,0 1px #aaa,1px 0 #aaa,0 -1px #aaa;color:#f8f8f8;font-weight:bold}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich dt{font-weight:normal}.kint-rich dt.kint-parent{margin-top:4px}.kint-rich dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint-rich>dl>dt{background:#f8f8f8}.kint-rich ul{margin:0;padding-left:0}.kint-rich ul:not(.kint-tabs)>li{border-left:0}.kint-rich ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint-rich ul.kint-tabs li,.kint-rich ul.kint-tabs li+li{margin:0 0 0 4px}.kint-rich ul.kint-tabs li{border-bottom-width:0;height:25px}.kint-rich ul.kint-tabs li:first-child{margin-left:0}.kint-rich ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}.kint-rich ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint-rich ul>li>pre{border:1px solid #d7d7d7}.kint-rich dt:hover+dd>ul{border-color:#aaa}.kint-rich pre{background:#fff;margin-top:4px;margin-left:25px}.kint-rich .kint-source{margin-left:-1px}.kint-rich .kint-source .kint-highlight{background:#cfc}.kint-rich .kint-parent.kint-show>.kint-search{border-bottom-width:1px}.kint-rich table td{background:#fff}.kint-rich table td>dl{padding:0;margin:0}.kint-rich table td>dl>dt.kint-parent{margin:0}.kint-rich table td:first-child,.kint-rich table td,.kint-rich table th{padding:2px 4px}.kint-rich table dd,.kint-rich table dt{background:#fff}.kint-rich table tr:hover>td{box-shadow:none;background:#cfc} diff --git a/system/ThirdParty/Kint/resources/compiled/microtime.js b/system/ThirdParty/Kint/resources/compiled/microtime.js deleted file mode 100644 index 20e3445b..00000000 --- a/system/ThirdParty/Kint/resources/compiled/microtime.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintMicrotimeInitialized&&(window.kintMicrotimeInitialized=1,window.addEventListener("load",function(){"use strict";var c={},i=Array.prototype.slice.call(document.querySelectorAll("[data-kint-microtime-group]"),0);i.forEach(function(i){if(i.querySelector(".kint-microtime-lap")){var t=i.getAttribute("data-kint-microtime-group"),e=parseFloat(i.querySelector(".kint-microtime-lap").innerHTML),r=parseFloat(i.querySelector(".kint-microtime-avg").innerHTML);void 0===c[t]&&(c[t]={}),(void 0===c[t].min||c[t].min>e)&&(c[t].min=e),(void 0===c[t].max||c[t].maxdl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxnIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0iI0ZGRiI+PHBhdGggZD0iTTEgMWgyOHYyOEgxem01IDE0aDE4bS05IDlWNk0xIDYxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzM3OSIvPjxwYXRoIGQ9Ik0xIDMxaDI4djI4SDF6bTUgMTRoMThtLTkgOVYzNk0xIDkxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzVBMyIvPjxwYXRoIGQ9Ik0xIDEyMWgyOHYyOEgxem01IDVsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZT0iI0NDQyIvPjwvZz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#0092db;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#5cb730}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#e0eaef;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#e0eaef}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #b6cedb;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#c1d4df;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#d0d0d0;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#e8e8e8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#c1d4df;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint-rich ul.kint-tabs>li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #b6cedb;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#0092db}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #b6cedb;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-rich table td{background:#e0eaef;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-rich table tr:hover var{color:#5cb730}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #c1d4df}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #0092db;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#c1d4df}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #0092db,0 1px #0092db,1px 0 #0092db,0 -1px #0092db;color:#e0eaef;font-weight:bold}.kint-rich>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}.kint-rich ul.kint-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint-rich>dl.kint-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}.kint-rich .kint-source .kint-highlight{background:#f0eb96} diff --git a/system/ThirdParty/Kint/resources/compiled/plain.css b/system/ThirdParty/Kint/resources/compiled/plain.css deleted file mode 100644 index ba1eba0a..00000000 --- a/system/ThirdParty/Kint/resources/compiled/plain.css +++ /dev/null @@ -1 +0,0 @@ -.kint-plain{background:rgba(255,255,255,0.9);white-space:pre;display:block;font-family:monospace;color:#222}.kint-plain i{color:#d00;font-style:normal}.kint-plain u{color:#030;text-decoration:none;font-weight:bold}.kint-plain .kint-microtime-lap{font-weight:bold;text-shadow:1px 0 #fff, 0 1px #fff, -1px 0 #fff, 0 -1px #fff} diff --git a/system/ThirdParty/Kint/resources/compiled/plain.js b/system/ThirdParty/Kint/resources/compiled/plain.js deleted file mode 100644 index 9791fc9f..00000000 --- a/system/ThirdParty/Kint/resources/compiled/plain.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintPlain&&(window.kintPlain=function(){"use strict";var i={initLoad:function(){i.style=window.kintShared.dedupe("style.kint-plain-style",i.style),i.script=window.kintShared.dedupe("script.kint-plain-script",i.script)},style:null,script:null};return i}()),window.kintShared.runOnce(window.kintPlain.initLoad); diff --git a/system/ThirdParty/Kint/resources/compiled/rich.js b/system/ThirdParty/Kint/resources/compiled/rich.js deleted file mode 100644 index 18fb072e..00000000 --- a/system/ThirdParty/Kint/resources/compiled/rich.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintRich&&(window.kintRich=function(){"use strict";var n={selectText:function(e){var t=window.getSelection(),a=document.createRange();a.selectNodeContents(e),t.removeAllRanges(),t.addRange(a)},each:function(e,t){Array.prototype.slice.call(document.querySelectorAll(e),0).forEach(t)},hasClass:function(e,t){return!!e.classList&&(void 0===t&&(t="kint-show"),e.classList.contains(t))},addClass:function(e,t){void 0===t&&(t="kint-show"),e.classList.add(t)},removeClass:function(e,t){return void 0===t&&(t="kint-show"),e.classList.remove(t),e},toggle:function(e,t){var a=n.getChildren(e);a&&(void 0===t&&(t=n.hasClass(e)),t?n.removeClass(e):n.addClass(e),1===a.childNodes.length&&(a=a.childNodes[0].childNodes[0])&&n.hasClass(a,"kint-parent")&&n.toggle(a,t))},toggleChildren:function(e,t){var a=n.getChildren(e);if(a){var r=a.getElementsByClassName("kint-parent"),o=r.length;for(void 0===t&&(t=!n.hasClass(e));o--;)n.toggle(r[o],t)}},toggleAll:function(e){for(var t=document.getElementsByClassName("kint-parent"),a=t.length,r=!n.hasClass(e.parentNode);a--;)n.toggle(t[a],r)},switchTab:function(e){var t,a=e.previousSibling,r=0;for(n.removeClass(e.parentNode.getElementsByClassName("kint-active-tab")[0],"kint-active-tab"),n.addClass(e,"kint-active-tab");a;)1===a.nodeType&&r++,a=a.previousSibling;t=e.parentNode.nextSibling.childNodes;for(var o=0;o"},openInNewWindow:function(e){var t=window.open();t&&(t.document.open(),t.document.write(n.mktag("html")+n.mktag("head")+n.mktag("title")+"Kint ("+(new Date).toISOString()+")"+n.mktag("/title")+n.mktag('meta charset="utf-8"')+document.getElementsByClassName("kint-rich-script")[0].outerHTML+document.getElementsByClassName("kint-rich-style")[0].outerHTML+n.mktag("/head")+n.mktag("body")+'
'+e.parentNode.outerHTML+"
"+n.mktag("/body")),t.document.close())},sortTable:function(e,a){var t=e.tBodies[0];[].slice.call(e.tBodies[0].rows).sort(function(e,t){if(e=e.cells[a].textContent.trim().toLocaleLowerCase(),t=t.cells[a].textContent.trim().toLocaleLowerCase(),isNaN(e)||isNaN(t)){if(isNaN(e)&&!isNaN(t))return 1;if(isNaN(t)&&!isNaN(e))return-1}else e=parseFloat(e),t=parseFloat(t);return eli:not(.kint-active-tab)",function(e){0===e.offsetWidth&&0===e.offsetHeight||n.keyboardNav.targets.push(e)})},sync:function(e){var t=document.querySelector(".kint-focused");if(t&&n.removeClass(t,"kint-focused"),n.keyboardNav.active){var a=n.keyboardNav.targets[n.keyboardNav.target];n.addClass(a,"kint-focused"),e||n.keyboardNav.scroll(a)}},scroll:function(e){var t=function(e){return e.offsetTop+(e.offsetParent?t(e.offsetParent):0)},a=t(e);if(n.folder){var r=n.folder.querySelector("dd.kint-folder");r.scrollTo(0,a-r.clientHeight/2)}else window.scrollTo(0,a-window.innerHeight/2)},moveCursor:function(e){for(n.keyboardNav.target+=e;n.keyboardNav.target<0;)n.keyboardNav.target+=n.keyboardNav.targets.length;for(;n.keyboardNav.target>=n.keyboardNav.targets.length;)n.keyboardNav.target-=n.keyboardNav.targets.length;n.keyboardNav.sync()},setCursor:function(e){n.keyboardNav.fetchTargets();for(var t=0;tdl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzAgMTUwIj48ZGVmcz48cGF0aCBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNCAzYTI0IDMyIDAgMCAxIDAgMjQgNDAgMjAtMTAgMCAxIDIzLTEyQTQwIDIwIDEwIDAgMSA0IDN6IiBpZD0iYSIvPjwvZGVmcz48ZyBmaWxsPSIjOTNhMWExIiBzdHJva2U9IiM5M2ExYTEiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxnIGZpbGw9IiM1ODZlNzUiIHN0cm9rZT0iIzU4NmU3NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzMCkiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxwYXRoIGQ9Ik02IDEyNmwxOCAxOG0tMTggMGwxOC0xOCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiM1ODZlNzUiLz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #586e75}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#93a1a1}.kint-rich pre{color:#839496;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(131,148,150,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#002b36;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#839496;background:#002b36}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #586e75;border-top-width:0;border-bottom-width:0;padding:5px;float:right !important;margin:-5px 0;color:#93a1a1;background:#073642;height:26px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#252525;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#1b1b1b}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#073642;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#839496}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#839496;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #586e75}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}.kint-rich ul.kint-tabs>li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#002b36;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #586e75;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #586e75;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#073642;color:#93a1a1}.kint-rich table td{background:#002b36;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:5px;padding-bottom:5px;border-bottom:1px solid #073642}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #268bd2;padding-right:10px;margin-right:10px}.kint-rich pre.kint-source>div.kint-highlight{background:#073642}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #268bd2,0 1px #268bd2,1px 0 #268bd2,0 -1px #268bd2;color:#002b36;font-weight:bold}body{background:#073642;color:#fff}.kint-rich{box-shadow:0 0 5px 3px #073642}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px}.kint-rich footer li{color:#ddd} diff --git a/system/ThirdParty/Kint/resources/compiled/solarized.css b/system/ThirdParty/Kint/resources/compiled/solarized.css deleted file mode 100644 index db5da0d2..00000000 --- a/system/ThirdParty/Kint/resources/compiled/solarized.css +++ /dev/null @@ -1 +0,0 @@ -.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich.kint-folder{position:fixed;bottom:0;left:0;right:0;z-index:999999;width:100%;margin:0;display:none}.kint-rich.kint-folder.kint-show{display:block}.kint-rich.kint-folder dd.kint-folder{max-height:calc(100vh - 100px);padding-right:10px;overflow-y:scroll}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#268bd2;color:#657b83}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #2aa198}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#657b83;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:10px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:5px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#268bd2}.kint-rich>dl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzAgMTUwIj48ZGVmcz48cGF0aCBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNCAzYTI0IDMyIDAgMCAxIDAgMjQgNDAgMjAtMTAgMCAxIDIzLTEyQTQwIDIwIDEwIDAgMSA0IDN6IiBpZD0iYSIvPjwvZGVmcz48ZyBmaWxsPSIjOTNhMWExIiBzdHJva2U9IiM5M2ExYTEiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxnIGZpbGw9IiM1ODZlNzUiIHN0cm9rZT0iIzU4NmU3NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzMCkiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxwYXRoIGQ9Ik02IDEyNmwxOCAxOG0tMTggMGwxOC0xOCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiM1ODZlNzUiLz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #93a1a1}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#586e75}.kint-rich pre{color:#657b83;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(101,123,131,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#fdf6e3;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#657b83;background:#fdf6e3}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #93a1a1;border-top-width:0;border-bottom-width:0;padding:5px;float:right !important;margin:-5px 0;color:#586e75;background:#eee8d5;height:26px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#e2e2e2;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f0f0f0}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#eee8d5;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#657b83}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#657b83;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#586e75;border-bottom:1px dotted #586e75}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #93a1a1}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}.kint-rich ul.kint-tabs>li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #93a1a1;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #93a1a1;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#eee8d5;color:#586e75}.kint-rich table td{background:#fdf6e3;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:5px;padding-bottom:5px;border-bottom:1px solid #eee8d5}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #268bd2;padding-right:10px;margin-right:10px}.kint-rich pre.kint-source>div.kint-highlight{background:#eee8d5}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #268bd2,0 1px #268bd2,1px 0 #268bd2,0 -1px #268bd2;color:#fdf6e3;font-weight:bold}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px} diff --git a/system/ThirdParty/PSR/Log/AbstractLogger.php b/system/ThirdParty/PSR/Log/AbstractLogger.php deleted file mode 100644 index d5106da5..00000000 --- a/system/ThirdParty/PSR/Log/AbstractLogger.php +++ /dev/null @@ -1,120 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * @return null - */ - public function alert($message, array $context = []) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * @return null - */ - public function critical($message, array $context = []) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * @return null - */ - public function error($message, array $context = []) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * @return null - */ - public function warning($message, array $context = []) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * @return null - */ - public function notice($message, array $context = []) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * @return null - */ - public function info($message, array $context = []) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * @return null - */ - public function debug($message, array $context = []) - { - $this->log(LogLevel::DEBUG, $message, $context); - } -} diff --git a/system/ThirdParty/PSR/Log/InvalidArgumentException.php b/system/ThirdParty/PSR/Log/InvalidArgumentException.php deleted file mode 100644 index 67f852d1..00000000 --- a/system/ThirdParty/PSR/Log/InvalidArgumentException.php +++ /dev/null @@ -1,7 +0,0 @@ -logger = $logger; - } -} diff --git a/system/ThirdParty/PSR/Log/LoggerInterface.php b/system/ThirdParty/PSR/Log/LoggerInterface.php deleted file mode 100644 index 20c7ff0b..00000000 --- a/system/ThirdParty/PSR/Log/LoggerInterface.php +++ /dev/null @@ -1,112 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * @return null - */ - public function alert($message, array $context = []) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * @return null - */ - public function critical($message, array $context = []) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * @return null - */ - public function error($message, array $context = []) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * @return null - */ - public function warning($message, array $context = []) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * @return null - */ - public function notice($message, array $context = []) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * @return null - */ - public function info($message, array $context = []) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * @return null - */ - public function debug($message, array $context = []) - { - $this->log(LogLevel::DEBUG, $message, $context); - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * @return null - */ - abstract public function log($level, $message, array $context = []); -} diff --git a/system/ThirdParty/PSR/Log/NullLogger.php b/system/ThirdParty/PSR/Log/NullLogger.php deleted file mode 100644 index e47d4b96..00000000 --- a/system/ThirdParty/PSR/Log/NullLogger.php +++ /dev/null @@ -1,27 +0,0 @@ -logger) { }` - * blocks. - */ -class NullLogger extends AbstractLogger -{ - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * @return null - */ - public function log($level, $message, array $context = []) - { - // noop - } -} diff --git a/system/Throttle/Throttler.php b/system/Throttle/Throttler.php deleted file mode 100644 index c843434f..00000000 --- a/system/Throttle/Throttler.php +++ /dev/null @@ -1,212 +0,0 @@ -cache = $cache; - } - - //-------------------------------------------------------------------- - - /** - * Returns the number of seconds until the next available token will - * be released for usage. - * - * @return integer - */ - public function getTokenTime(): int - { - return $this->tokenTime; - } - - //-------------------------------------------------------------------- - - /** - * Restricts the number of requests made by a single IP address within - * a set number of seconds. - * - * Example: - * - * if (! $throttler->check($request->ipAddress(), 60, MINUTE)) - * { - * die('You submitted over 60 requests within a minute.'); - * } - * - * @param string $key The name to use as the "bucket" name. - * @param integer $capacity The number of requests the "bucket" can hold - * @param integer $seconds The time it takes the "bucket" to completely refill - * @param integer $cost The number of tokens this action uses. - * - * @return boolean - * @internal param int $maxRequests - */ - public function check(string $key, int $capacity, int $seconds, int $cost = 1): bool - { - $tokenName = $this->prefix . $key; - - // Check to see if the bucket has even been created yet. - if (($tokens = $this->cache->get($tokenName)) === null) - { - // If it hasn't been created, then we'll set it to the maximum - // capacity - 1, and save it to the cache. - $this->cache->save($tokenName, $capacity - $cost, $seconds); - $this->cache->save($tokenName . 'Time', time(), $seconds); - - return true; - } - - // If $tokens > 0, then we need to replenish the bucket - // based on how long it's been since the last update. - $throttleTime = $this->cache->get($tokenName . 'Time'); - $elapsed = $this->time() - $throttleTime; - - // Number of tokens to add back per second - $rate = $capacity / $seconds; - - // How many seconds till a new token is available. - // We must have a minimum wait of 1 second for a new token. - // Primarily stored to allow devs to report back to users. - $newTokenAvailable = (1 / $rate) - $elapsed; - $this->tokenTime = max(1, $newTokenAvailable); - - // Add tokens based up on number per second that - // should be refilled, then checked against capacity - // to be sure the bucket didn't overflow. - $tokens += $rate * $elapsed; - $tokens = $tokens > $capacity ? $capacity : $tokens; - - // If $tokens >= 1, then we are safe to perform the action, but - // we need to decrement the number of available tokens. - if ($tokens >= 1) - { - $this->cache->save($tokenName, $tokens - $cost, $seconds); - $this->cache->save($tokenName . 'Time', time(), $seconds); - - return true; - } - - return false; - } - - //-------------------------------------------------------------------- - - /** - * Used during testing to set the current timestamp to use. - * - * @param integer $time - * - * @return $this - */ - public function setTestTime(int $time) - { - $this->testTime = $time; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Return the test time, defaulting to current. - * - * @return integer - */ - public function time(): int - { - return $this->testTime ?? time(); - } -} diff --git a/system/Throttle/ThrottlerInterface.php b/system/Throttle/ThrottlerInterface.php deleted file mode 100644 index ef7d7872..00000000 --- a/system/Throttle/ThrottlerInterface.php +++ /dev/null @@ -1,76 +0,0 @@ -checkIPAddress($request->ipAddress(), 60, MINUTE)) - * { - * die('You submitted over 60 requests within a minute.'); - * } - * - * @param string $key The name to use as the "bucket" name. - * @param integer $capacity The number of requests the "bucket" can hold - * @param integer $seconds The time it takes the "bucket" to completely refill - * @param integer $cost The number of tokens this action uses. - * - * @return boolean - */ - public function check(string $key, int $capacity, int $seconds, int $cost); - - //-------------------------------------------------------------------- - - /** - * Returns the number of seconds until the next available token will - * be released for usage. - * - * @return integer - */ - public function getTokenTime(): int; -} diff --git a/system/Typography/Typography.php b/system/Typography/Typography.php deleted file mode 100644 index 4e632d23..00000000 --- a/system/Typography/Typography.php +++ /dev/null @@ -1,408 +0,0 @@ - tags - * - * @var string - */ - public $blockElements = 'address|blockquote|div|dl|fieldset|form|h\d|hr|noscript|object|ol|p|pre|script|table|ul'; - - /** - * Elements that should not have

and
tags within them. - * - * @var string - */ - public $skipElements = 'p|pre|ol|ul|dl|object|table|h\d'; - - /** - * Tags we want the parser to completely ignore when splitting the string. - * - * @var string - */ - public $inlineElements = 'a|abbr|acronym|b|bdo|big|br|button|cite|code|del|dfn|em|i|img|ins|input|label|map|kbd|q|samp|select|small|span|strong|sub|sup|textarea|tt|var'; - - /** - * array of block level elements that require inner content to be within another block level element - * - * @var array - */ - public $innerBlockRequired = ['blockquote']; - - /** - * the last block element parsed - * - * @var string - */ - public $lastBlockElement = ''; - - /** - * whether or not to protect quotes within { curly braces } - * - * @var boolean - */ - public $protectBracedQuotes = false; - - /** - * Auto Typography - * - * This function converts text, making it typographically correct: - * - Converts double spaces into paragraphs. - * - Converts single line breaks into
tags - * - Converts single and double quotes into correctly facing curly quote entities. - * - Converts three dots into ellipsis. - * - Converts double dashes into em-dashes. - * - Converts two spaces into entities - * - * @param string $str - * @param boolean $reduce_linebreaks whether to reduce more then two consecutive newlines to two - * - * @return string - */ - public function autoTypography(string $str, bool $reduce_linebreaks = false): string - { - if ($str === '') - { - return ''; - } - - // Standardize Newlines to make matching easier - if (strpos($str, "\r") !== false) - { - $str = str_replace(["\r\n", "\r"], "\n", $str); - } - - // Reduce line breaks. If there are more than two consecutive linebreaks - // we'll compress them down to a maximum of two since there's no benefit to more. - if ($reduce_linebreaks === false) - { - $str = preg_replace("/\n\n+/", "\n\n", $str); - } - - // HTML comment tags don't conform to patterns of normal tags, so pull them out separately, only if needed - $html_comments = []; - if (strpos($str, '' . PHP_EOL - . $output . PHP_EOL - . '' . PHP_EOL; - } - } - - // Should we cache? - if (isset($this->renderVars['options']['cache'])) - { - cache()->save($this->renderVars['cacheName'], $output, (int) $this->renderVars['options']['cache']); - } - - $this->tempData = null; - - return $output; - } - - //-------------------------------------------------------------------- - - /** - * Builds the output based upon a string and any - * data that has already been set. - * Cache does not apply, because there is no "key". - * - * @param string $view The view contents - * @param array $options Reserved for 3rd-party uses since - * it might be needed to pass additional info - * to other template engines. - * @param boolean $saveData If true, will save data for use with any other calls, - * if false, will clean the data after displaying the view, - * if not specified, use the config setting. - * - * @return string - */ - public function renderString(string $view, array $options = null, bool $saveData = null): string - { - $start = microtime(true); - - if (is_null($saveData)) - { - $saveData = $this->saveData; - } - - if (is_null($this->tempData)) - { - $this->tempData = $this->data; - } - - extract($this->tempData); - - if ($saveData) - { - $this->data = $this->tempData; - } - - ob_start(); - $incoming = '?>' . $view; - eval($incoming); - $output = ob_get_contents(); - @ob_end_clean(); - - $this->logPerformance($start, microtime(true), $this->excerpt($view)); - - $this->tempData = null; - - return $output; - } - - //-------------------------------------------------------------------- - - /** - * Extract first bit of a long string and add ellipsis - * - * @param string $string - * @param integer $length - * @return string - */ - public function excerpt(string $string, int $length = 20): string - { - return (strlen($string) > $length) ? substr($string, 0, $length - 3) . '...' : $string; - } - - //-------------------------------------------------------------------- - - /** - * Sets several pieces of view data at once. - * - * @param array $data - * @param string $context The context to escape it for: html, css, js, url - * If null, no escaping will happen - * - * @return RendererInterface - */ - public function setData(array $data = [], string $context = null): RendererInterface - { - if (! empty($context)) - { - $data = \esc($data, $context); - } - - $this->tempData = $this->tempData ?? $this->data; - $this->tempData = array_merge($this->tempData, $data); - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Sets a single piece of view data. - * - * @param string $name - * @param mixed $value - * @param string $context The context to escape it for: html, css, js, url - * If null, no escaping will happen - * - * @return RendererInterface - */ - public function setVar(string $name, $value = null, string $context = null): RendererInterface - { - if (! empty($context)) - { - $value = \esc($value, $context); - } - - $this->tempData = $this->tempData ?? $this->data; - $this->tempData[$name] = $value; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Removes all of the view data from the system. - * - * @return RendererInterface - */ - public function resetData(): RendererInterface - { - $this->data = []; - - return $this; - } - - //-------------------------------------------------------------------- - - /** - * Returns the current data that will be displayed in the view. - * - * @return array - */ - public function getData(): array - { - return is_null($this->tempData) ? $this->data : $this->tempData; - } - - //-------------------------------------------------------------------- - - /** - * Specifies that the current view should extend an existing layout. - * - * @param string $layout - * - * @return void - */ - public function extend(string $layout) - { - $this->layout = $layout; - } - - //-------------------------------------------------------------------- - - /** - * Starts holds content for a section within the layout. - * - * @param string $name - */ - public function section(string $name) - { - $this->currentSection = $name; - - ob_start(); - } - - //-------------------------------------------------------------------- - - /** - * - * - * @throws \Laminas\Escaper\Exception\RuntimeException - */ - public function endSection() - { - $contents = ob_get_clean(); - - if (empty($this->currentSection)) - { - throw new \RuntimeException('View themes, no current section.'); - } - - // Ensure an array exists so we can store multiple entries for this. - if (! array_key_exists($this->currentSection, $this->sections)) - { - $this->sections[$this->currentSection] = []; - } - $this->sections[$this->currentSection][] = $contents; - - $this->currentSection = null; - } - - //-------------------------------------------------------------------- - - /** - * Renders a section's contents. - * - * @param string $sectionName - */ - public function renderSection(string $sectionName) - { - if (! isset($this->sections[$sectionName])) - { - echo ''; - - return; - } - - foreach ($this->sections[$sectionName] as $key => $contents) - { - echo $contents; - unset($this->sections[$sectionName][$key]); - } - } - - //-------------------------------------------------------------------- - - /** - * Used within layout views to include additional views. - * - * @param string $view - * @param array|null $options - * @param null $saveData - * - * @return string - */ - public function include(string $view, array $options = null, $saveData = true): string - { - return $this->render($view, $options, $saveData); - } - - //-------------------------------------------------------------------- - - /** - * Returns the performance data that might have been collected - * during the execution. Used primarily in the Debug Toolbar. - * - * @return array - */ - public function getPerformanceData(): array - { - return $this->performanceData; - } - - //-------------------------------------------------------------------- - - /** - * Logs performance data for rendering a view. - * - * @param float $start - * @param float $end - * @param string $view - */ - protected function logPerformance(float $start, float $end, string $view) - { - if (! $this->debug) - { - return; - } - - $this->performanceData[] = [ - 'start' => $start, - 'end' => $end, - 'view' => $view, - ]; - } - - //-------------------------------------------------------------------- -} diff --git a/system/bootstrap.php b/system/bootstrap.php deleted file mode 100644 index 9298bafd..00000000 --- a/system/bootstrap.php +++ /dev/null @@ -1,183 +0,0 @@ -appDirectory) . DIRECTORY_SEPARATOR); -} - -/** - * The path to the project root directory. Just above APPPATH. - */ -if (! defined('ROOTPATH')) -{ - define('ROOTPATH', realpath(APPPATH . '../') . DIRECTORY_SEPARATOR); -} - -/** - * The path to the system directory. - */ -if (! defined('SYSTEMPATH')) -{ - define('SYSTEMPATH', realpath($paths->systemDirectory) . DIRECTORY_SEPARATOR); -} - -/** - * The path to the writable directory. - */ -if (! defined('WRITEPATH')) -{ - define('WRITEPATH', realpath($paths->writableDirectory) . DIRECTORY_SEPARATOR); -} - -/** - * The path to the tests directory - */ -if (! defined('TESTPATH')) -{ - define('TESTPATH', realpath($paths->testsDirectory) . DIRECTORY_SEPARATOR); -} - -/* - * --------------------------------------------------------------- - * GRAB OUR CONSTANTS & COMMON - * --------------------------------------------------------------- - */ -if (! defined('APP_NAMESPACE')) -{ - require_once APPPATH . 'Config/Constants.php'; -} - -// Let's see if an app/Common.php file exists -if (file_exists(APPPATH . 'Common.php')) -{ - require_once APPPATH . 'Common.php'; -} - -// Require system/Common.php -require_once SYSTEMPATH . 'Common.php'; - -/* - * --------------------------------------------------------------- - * LOAD OUR AUTOLOADER - * --------------------------------------------------------------- - * - * The autoloader allows all of the pieces to work together - * in the framework. We have to load it here, though, so - * that the config files can use the path constants. - */ - -if (! class_exists(Config\Autoload::class, false)) -{ - require_once SYSTEMPATH . 'Config/AutoloadConfig.php'; - require_once APPPATH . 'Config/Autoload.php'; - require_once SYSTEMPATH . 'Modules/Modules.php'; - require_once APPPATH . 'Config/Modules.php'; -} - -require_once SYSTEMPATH . 'Autoloader/Autoloader.php'; -require_once SYSTEMPATH . 'Config/BaseService.php'; -require_once SYSTEMPATH . 'Config/Services.php'; -require_once APPPATH . 'Config/Services.php'; - -// Use Config\Services as CodeIgniter\Services -if (! class_exists('CodeIgniter\Services', false)) -{ - class_alias('Config\Services', 'CodeIgniter\Services'); -} - -$loader = CodeIgniter\Services::autoloader(); -$loader->initialize(new Config\Autoload(), new Config\Modules()); -$loader->register(); // Register the loader with the SPL autoloader stack. - -// Now load Composer's if it's available -if (is_file(COMPOSER_PATH)) -{ - /** - * The path to the vendor directory. - * - * We do not want to enforce this, so set the constant if Composer was used. - */ - if (! defined('VENDORPATH')) - { - define('VENDORPATH', realpath(ROOTPATH . 'vendor') . DIRECTORY_SEPARATOR); - } - - require_once COMPOSER_PATH; -} - -// Load environment settings from .env files -// into $_SERVER and $_ENV -require_once SYSTEMPATH . 'Config/DotEnv.php'; - -$env = new \CodeIgniter\Config\DotEnv(ROOTPATH); -$env->load(); - -// Always load the URL helper - -// it should be used in 90% of apps. -helper('url'); - -/* - * --------------------------------------------------------------- - * GRAB OUR CODEIGNITER INSTANCE - * --------------------------------------------------------------- - * - * The CodeIgniter class contains the core functionality to make - * the application run, and does all of the dirty work to get - * the pieces all working together. - */ - -$appConfig = config(\Config\App::class); -$app = new \CodeIgniter\CodeIgniter($appConfig); -$app->initialize(); - -return $app; diff --git a/system/core/Benchmark.php b/system/core/Benchmark.php new file mode 100644 index 00000000..b3ac79c6 --- /dev/null +++ b/system/core/Benchmark.php @@ -0,0 +1,133 @@ +marker[$name] = microtime(TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Elapsed time + * + * Calculates the time difference between two marked points. + * + * If the first parameter is empty this function instead returns the + * {elapsed_time} pseudo-variable. This permits the full system + * execution time to be shown in a template. The output class will + * swap the real value for this variable. + * + * @param string $point1 A particular marked point + * @param string $point2 A particular marked point + * @param int $decimals Number of decimal places + * + * @return string Calculated elapsed time on success, + * an '{elapsed_string}' if $point1 is empty + * or an empty string if $point1 is not found. + */ + public function elapsed_time($point1 = '', $point2 = '', $decimals = 4) + { + if ($point1 === '') + { + return '{elapsed_time}'; + } + + if ( ! isset($this->marker[$point1])) + { + return ''; + } + + if ( ! isset($this->marker[$point2])) + { + $this->marker[$point2] = microtime(TRUE); + } + + return number_format($this->marker[$point2] - $this->marker[$point1], $decimals); + } + + // -------------------------------------------------------------------- + + /** + * Memory Usage + * + * Simply returns the {memory_usage} marker. + * + * This permits it to be put it anywhere in a template + * without the memory being calculated until the end. + * The output class will swap the real value for this variable. + * + * @return string '{memory_usage}' + */ + public function memory_usage() + { + return '{memory_usage}'; + } + +} diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php new file mode 100644 index 00000000..0d03293f --- /dev/null +++ b/system/core/CodeIgniter.php @@ -0,0 +1,559 @@ + '_ENV', 'G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'S' => '_SERVER') as $key => $superglobal) + { + if (strpos($_registered, $key) === FALSE) + { + continue; + } + + foreach (array_keys($$superglobal) as $var) + { + if (isset($GLOBALS[$var]) && ! in_array($var, $_protected, TRUE)) + { + $GLOBALS[$var] = NULL; + } + } + } + } +} + + +/* + * ------------------------------------------------------ + * Define a custom error handler so we can log PHP errors + * ------------------------------------------------------ + */ + set_error_handler('_error_handler'); + set_exception_handler('_exception_handler'); + register_shutdown_function('_shutdown_handler'); + +/* + * ------------------------------------------------------ + * Set the subclass_prefix + * ------------------------------------------------------ + * + * Normally the "subclass_prefix" is set in the config file. + * The subclass prefix allows CI to know if a core class is + * being extended via a library in the local application + * "libraries" folder. Since CI allows config items to be + * overridden via data set in the main index.php file, + * before proceeding we need to know if a subclass_prefix + * override exists. If so, we will set this value now, + * before any classes are loaded + * Note: Since the config file data is cached it doesn't + * hurt to load it here. + */ + if ( ! empty($assign_to_config['subclass_prefix'])) + { + get_config(array('subclass_prefix' => $assign_to_config['subclass_prefix'])); + } + +/* + * ------------------------------------------------------ + * Should we use a Composer autoloader? + * ------------------------------------------------------ + */ + if ($composer_autoload = config_item('composer_autoload')) + { + if ($composer_autoload === TRUE) + { + file_exists(APPPATH.'vendor/autoload.php') + ? require_once(APPPATH.'vendor/autoload.php') + : log_message('error', '$config[\'composer_autoload\'] is set to TRUE but '.APPPATH.'vendor/autoload.php was not found.'); + } + elseif (file_exists($composer_autoload)) + { + require_once($composer_autoload); + } + else + { + log_message('error', 'Could not find the specified $config[\'composer_autoload\'] path: '.$composer_autoload); + } + } + +/* + * ------------------------------------------------------ + * Start the timer... tick tock tick tock... + * ------------------------------------------------------ + */ + $BM =& load_class('Benchmark', 'core'); + $BM->mark('total_execution_time_start'); + $BM->mark('loading_time:_base_classes_start'); + +/* + * ------------------------------------------------------ + * Instantiate the hooks class + * ------------------------------------------------------ + */ + $EXT =& load_class('Hooks', 'core'); + +/* + * ------------------------------------------------------ + * Is there a "pre_system" hook? + * ------------------------------------------------------ + */ + $EXT->call_hook('pre_system'); + +/* + * ------------------------------------------------------ + * Instantiate the config class + * ------------------------------------------------------ + * + * Note: It is important that Config is loaded first as + * most other classes depend on it either directly or by + * depending on another class that uses it. + * + */ + $CFG =& load_class('Config', 'core'); + + // Do we have any manually set config items in the index.php file? + if (isset($assign_to_config) && is_array($assign_to_config)) + { + foreach ($assign_to_config as $key => $value) + { + $CFG->set_item($key, $value); + } + } + +/* + * ------------------------------------------------------ + * Important charset-related stuff + * ------------------------------------------------------ + * + * Configure mbstring and/or iconv if they are enabled + * and set MB_ENABLED and ICONV_ENABLED constants, so + * that we don't repeatedly do extension_loaded() or + * function_exists() calls. + * + * Note: UTF-8 class depends on this. It used to be done + * in it's constructor, but it's _not_ class-specific. + * + */ + $charset = strtoupper(config_item('charset')); + ini_set('default_charset', $charset); + + if (extension_loaded('mbstring')) + { + define('MB_ENABLED', TRUE); + // mbstring.internal_encoding is deprecated starting with PHP 5.6 + // and it's usage triggers E_DEPRECATED messages. + @ini_set('mbstring.internal_encoding', $charset); + // This is required for mb_convert_encoding() to strip invalid characters. + // That's utilized by CI_Utf8, but it's also done for consistency with iconv. + mb_substitute_character('none'); + } + else + { + define('MB_ENABLED', FALSE); + } + + // There's an ICONV_IMPL constant, but the PHP manual says that using + // iconv's predefined constants is "strongly discouraged". + if (extension_loaded('iconv')) + { + define('ICONV_ENABLED', TRUE); + // iconv.internal_encoding is deprecated starting with PHP 5.6 + // and it's usage triggers E_DEPRECATED messages. + @ini_set('iconv.internal_encoding', $charset); + } + else + { + define('ICONV_ENABLED', FALSE); + } + + if (is_php('5.6')) + { + ini_set('php.internal_encoding', $charset); + } + +/* + * ------------------------------------------------------ + * Load compatibility features + * ------------------------------------------------------ + */ + + require_once(BASEPATH.'core/compat/mbstring.php'); + require_once(BASEPATH.'core/compat/hash.php'); + require_once(BASEPATH.'core/compat/password.php'); + require_once(BASEPATH.'core/compat/standard.php'); + +/* + * ------------------------------------------------------ + * Instantiate the UTF-8 class + * ------------------------------------------------------ + */ + $UNI =& load_class('Utf8', 'core'); + +/* + * ------------------------------------------------------ + * Instantiate the URI class + * ------------------------------------------------------ + */ + $URI =& load_class('URI', 'core'); + +/* + * ------------------------------------------------------ + * Instantiate the routing class and set the routing + * ------------------------------------------------------ + */ + $RTR =& load_class('Router', 'core', isset($routing) ? $routing : NULL); + +/* + * ------------------------------------------------------ + * Instantiate the output class + * ------------------------------------------------------ + */ + $OUT =& load_class('Output', 'core'); + +/* + * ------------------------------------------------------ + * Is there a valid cache file? If so, we're done... + * ------------------------------------------------------ + */ + if ($EXT->call_hook('cache_override') === FALSE && $OUT->_display_cache($CFG, $URI) === TRUE) + { + exit; + } + +/* + * ----------------------------------------------------- + * Load the security class for xss and csrf support + * ----------------------------------------------------- + */ + $SEC =& load_class('Security', 'core'); + +/* + * ------------------------------------------------------ + * Load the Input class and sanitize globals + * ------------------------------------------------------ + */ + $IN =& load_class('Input', 'core'); + +/* + * ------------------------------------------------------ + * Load the Language class + * ------------------------------------------------------ + */ + $LANG =& load_class('Lang', 'core'); + +/* + * ------------------------------------------------------ + * Load the app controller and local controller + * ------------------------------------------------------ + * + */ + // Load the base controller class + require_once BASEPATH.'core/Controller.php'; + + /** + * Reference to the CI_Controller method. + * + * Returns current CI instance object + * + * @return CI_Controller + */ + function &get_instance() + { + return CI_Controller::get_instance(); + } + + if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php')) + { + require_once APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'; + } + + // Set a mark point for benchmarking + $BM->mark('loading_time:_base_classes_end'); + +/* + * ------------------------------------------------------ + * Sanity checks + * ------------------------------------------------------ + * + * The Router class has already validated the request, + * leaving us with 3 options here: + * + * 1) an empty class name, if we reached the default + * controller, but it didn't exist; + * 2) a query string which doesn't go through a + * file_exists() check + * 3) a regular request for a non-existing page + * + * We handle all of these as a 404 error. + * + * Furthermore, none of the methods in the app controller + * or the loader class can be called via the URI, nor can + * controller methods that begin with an underscore. + */ + + $e404 = FALSE; + $class = ucfirst($RTR->class); + $method = $RTR->method; + + if (empty($class) OR ! file_exists(APPPATH.'controllers/'.$RTR->directory.$class.'.php')) + { + $e404 = TRUE; + } + else + { + require_once(APPPATH.'controllers/'.$RTR->directory.$class.'.php'); + + if ( ! class_exists($class, FALSE) OR $method[0] === '_' OR method_exists('CI_Controller', $method)) + { + $e404 = TRUE; + } + elseif (method_exists($class, '_remap')) + { + $params = array($method, array_slice($URI->rsegments, 2)); + $method = '_remap'; + } + elseif ( ! method_exists($class, $method)) + { + $e404 = TRUE; + } + /** + * DO NOT CHANGE THIS, NOTHING ELSE WORKS! + * + * - method_exists() returns true for non-public methods, which passes the previous elseif + * - is_callable() returns false for PHP 4-style constructors, even if there's a __construct() + * - method_exists($class, '__construct') won't work because CI_Controller::__construct() is inherited + * - People will only complain if this doesn't work, even though it is documented that it shouldn't. + * + * ReflectionMethod::isConstructor() is the ONLY reliable check, + * knowing which method will be executed as a constructor. + */ + elseif ( ! is_callable(array($class, $method))) + { + $reflection = new ReflectionMethod($class, $method); + if ( ! $reflection->isPublic() OR $reflection->isConstructor()) + { + $e404 = TRUE; + } + } + } + + if ($e404) + { + if ( ! empty($RTR->routes['404_override'])) + { + if (sscanf($RTR->routes['404_override'], '%[^/]/%s', $error_class, $error_method) !== 2) + { + $error_method = 'index'; + } + + $error_class = ucfirst($error_class); + + if ( ! class_exists($error_class, FALSE)) + { + if (file_exists(APPPATH.'controllers/'.$RTR->directory.$error_class.'.php')) + { + require_once(APPPATH.'controllers/'.$RTR->directory.$error_class.'.php'); + $e404 = ! class_exists($error_class, FALSE); + } + // Were we in a directory? If so, check for a global override + elseif ( ! empty($RTR->directory) && file_exists(APPPATH.'controllers/'.$error_class.'.php')) + { + require_once(APPPATH.'controllers/'.$error_class.'.php'); + if (($e404 = ! class_exists($error_class, FALSE)) === FALSE) + { + $RTR->directory = ''; + } + } + } + else + { + $e404 = FALSE; + } + } + + // Did we reset the $e404 flag? If so, set the rsegments, starting from index 1 + if ( ! $e404) + { + $class = $error_class; + $method = $error_method; + + $URI->rsegments = array( + 1 => $class, + 2 => $method + ); + } + else + { + show_404($RTR->directory.$class.'/'.$method); + } + } + + if ($method !== '_remap') + { + $params = array_slice($URI->rsegments, 2); + } + +/* + * ------------------------------------------------------ + * Is there a "pre_controller" hook? + * ------------------------------------------------------ + */ + $EXT->call_hook('pre_controller'); + +/* + * ------------------------------------------------------ + * Instantiate the requested controller + * ------------------------------------------------------ + */ + // Mark a start point so we can benchmark the controller + $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start'); + + $CI = new $class(); + +/* + * ------------------------------------------------------ + * Is there a "post_controller_constructor" hook? + * ------------------------------------------------------ + */ + $EXT->call_hook('post_controller_constructor'); + +/* + * ------------------------------------------------------ + * Call the requested method + * ------------------------------------------------------ + */ + call_user_func_array(array(&$CI, $method), $params); + + // Mark a benchmark end point + $BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end'); + +/* + * ------------------------------------------------------ + * Is there a "post_controller" hook? + * ------------------------------------------------------ + */ + $EXT->call_hook('post_controller'); + +/* + * ------------------------------------------------------ + * Send the final rendered output to the browser + * ------------------------------------------------------ + */ + if ($EXT->call_hook('display_override') === FALSE) + { + $OUT->_display(); + } + +/* + * ------------------------------------------------------ + * Is there a "post_system" hook? + * ------------------------------------------------------ + */ + $EXT->call_hook('post_system'); diff --git a/system/core/Common.php b/system/core/Common.php new file mode 100644 index 00000000..d6a1fdb4 --- /dev/null +++ b/system/core/Common.php @@ -0,0 +1,849 @@ +='); + } + + return $_is_php[$version]; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('is_really_writable')) +{ + /** + * Tests for file writability + * + * is_writable() returns TRUE on Windows servers when you really can't write to + * the file, based on the read-only attribute. is_writable() is also unreliable + * on Unix servers if safe_mode is on. + * + * @link https://bugs.php.net/bug.php?id=54709 + * @param string + * @return bool + */ + function is_really_writable($file) + { + // If we're on a Unix server with safe_mode off we call is_writable + if (DIRECTORY_SEPARATOR === '/' && (is_php('5.4') OR ! ini_get('safe_mode'))) + { + return is_writable($file); + } + + /* For Windows servers and safe_mode "on" installations we'll actually + * write a file then read it. Bah... + */ + if (is_dir($file)) + { + $file = rtrim($file, '/').'/'.md5(mt_rand()); + if (($fp = @fopen($file, 'ab')) === FALSE) + { + return FALSE; + } + + fclose($fp); + @chmod($file, 0777); + @unlink($file); + return TRUE; + } + elseif ( ! is_file($file) OR ($fp = @fopen($file, 'ab')) === FALSE) + { + return FALSE; + } + + fclose($fp); + return TRUE; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('load_class')) +{ + /** + * Class registry + * + * This function acts as a singleton. If the requested class does not + * exist it is instantiated and set to a static variable. If it has + * previously been instantiated the variable is returned. + * + * @param string the class name being requested + * @param string the directory where the class should be found + * @param mixed an optional argument to pass to the class constructor + * @return object + */ + function &load_class($class, $directory = 'libraries', $param = NULL) + { + static $_classes = array(); + + // Does the class exist? If so, we're done... + if (isset($_classes[$class])) + { + return $_classes[$class]; + } + + $name = FALSE; + + // Look for the class first in the local application/libraries folder + // then in the native system/libraries folder + foreach (array(APPPATH, BASEPATH) as $path) + { + if (file_exists($path.$directory.'/'.$class.'.php')) + { + $name = 'CI_'.$class; + + if (class_exists($name, FALSE) === FALSE) + { + require_once($path.$directory.'/'.$class.'.php'); + } + + break; + } + } + + // Is the request a class extension? If so we load it too + if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php')) + { + $name = config_item('subclass_prefix').$class; + + if (class_exists($name, FALSE) === FALSE) + { + require_once(APPPATH.$directory.'/'.$name.'.php'); + } + } + + // Did we find the class? + if ($name === FALSE) + { + // Note: We use exit() rather than show_error() in order to avoid a + // self-referencing loop with the Exceptions class + set_status_header(503); + echo 'Unable to locate the specified class: '.$class.'.php'; + exit(5); // EXIT_UNK_CLASS + } + + // Keep track of what we just loaded + is_loaded($class); + + $_classes[$class] = isset($param) + ? new $name($param) + : new $name(); + return $_classes[$class]; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('is_loaded')) +{ + /** + * Keeps track of which libraries have been loaded. This function is + * called by the load_class() function above + * + * @param string + * @return array + */ + function &is_loaded($class = '') + { + static $_is_loaded = array(); + + if ($class !== '') + { + $_is_loaded[strtolower($class)] = $class; + } + + return $_is_loaded; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('get_config')) +{ + /** + * Loads the main config.php file + * + * This function lets us grab the config file even if the Config class + * hasn't been instantiated yet + * + * @param array + * @return array + */ + function &get_config(Array $replace = array()) + { + static $config; + + if (empty($config)) + { + $file_path = APPPATH.'config/config.php'; + $found = FALSE; + if (file_exists($file_path)) + { + $found = TRUE; + require($file_path); + } + + // Is the config file in the environment folder? + if (file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php')) + { + require($file_path); + } + elseif ( ! $found) + { + set_status_header(503); + echo 'The configuration file does not exist.'; + exit(3); // EXIT_CONFIG + } + + // Does the $config array exist in the file? + if ( ! isset($config) OR ! is_array($config)) + { + set_status_header(503); + echo 'Your config file does not appear to be formatted correctly.'; + exit(3); // EXIT_CONFIG + } + } + + // Are any values being dynamically added or replaced? + foreach ($replace as $key => $val) + { + $config[$key] = $val; + } + + return $config; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('config_item')) +{ + /** + * Returns the specified config item + * + * @param string + * @return mixed + */ + function config_item($item) + { + static $_config; + + if (empty($_config)) + { + // references cannot be directly assigned to static variables, so we use an array + $_config[0] =& get_config(); + } + + return isset($_config[0][$item]) ? $_config[0][$item] : NULL; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('get_mimes')) +{ + /** + * Returns the MIME types array from config/mimes.php + * + * @return array + */ + function &get_mimes() + { + static $_mimes; + + if (empty($_mimes)) + { + $_mimes = file_exists(APPPATH.'config/mimes.php') + ? include(APPPATH.'config/mimes.php') + : array(); + + if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php')) + { + $_mimes = array_merge($_mimes, include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php')); + } + } + + return $_mimes; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('is_https')) +{ + /** + * Is HTTPS? + * + * Determines if the application is accessed via an encrypted + * (HTTPS) connection. + * + * @return bool + */ + function is_https() + { + if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') + { + return TRUE; + } + elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') + { + return TRUE; + } + elseif ( ! empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') + { + return TRUE; + } + + return FALSE; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('is_cli')) +{ + + /** + * Is CLI? + * + * Test to see if a request was made from the command line. + * + * @return bool + */ + function is_cli() + { + return (PHP_SAPI === 'cli' OR defined('STDIN')); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('show_error')) +{ + /** + * Error Handler + * + * This function lets us invoke the exception class and + * display errors using the standard error template located + * in application/views/errors/error_general.php + * This function will send the error page directly to the + * browser and exit. + * + * @param string + * @param int + * @param string + * @return void + */ + function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered') + { + $status_code = abs($status_code); + if ($status_code < 100) + { + $exit_status = $status_code + 9; // 9 is EXIT__AUTO_MIN + $status_code = 500; + } + else + { + $exit_status = 1; // EXIT_ERROR + } + + $_error =& load_class('Exceptions', 'core'); + echo $_error->show_error($heading, $message, 'error_general', $status_code); + exit($exit_status); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('show_404')) +{ + /** + * 404 Page Handler + * + * This function is similar to the show_error() function above + * However, instead of the standard error template it displays + * 404 errors. + * + * @param string + * @param bool + * @return void + */ + function show_404($page = '', $log_error = TRUE) + { + $_error =& load_class('Exceptions', 'core'); + $_error->show_404($page, $log_error); + exit(4); // EXIT_UNKNOWN_FILE + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('log_message')) +{ + /** + * Error Logging Interface + * + * We use this as a simple mechanism to access the logging + * class and send messages to be logged. + * + * @param string the error level: 'error', 'debug' or 'info' + * @param string the error message + * @return void + */ + function log_message($level, $message) + { + static $_log; + + if ($_log === NULL) + { + // references cannot be directly assigned to static variables, so we use an array + $_log[0] =& load_class('Log', 'core'); + } + + $_log[0]->write_log($level, $message); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('set_status_header')) +{ + /** + * Set HTTP Status Header + * + * @param int the status code + * @param string + * @return void + */ + function set_status_header($code = 200, $text = '') + { + if (is_cli()) + { + return; + } + + if (empty($code) OR ! is_numeric($code)) + { + show_error('Status codes must be numeric', 500); + } + + if (empty($text)) + { + is_int($code) OR $code = (int) $code; + $stati = array( + 100 => 'Continue', + 101 => 'Switching Protocols', + + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 307 => 'Temporary Redirect', + + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + 422 => 'Unprocessable Entity', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 511 => 'Network Authentication Required', + ); + + if (isset($stati[$code])) + { + $text = $stati[$code]; + } + else + { + show_error('No status text available. Please check your status code number or supply your own message text.', 500); + } + } + + if (strpos(PHP_SAPI, 'cgi') === 0) + { + header('Status: '.$code.' '.$text, TRUE); + return; + } + + $server_protocol = (isset($_SERVER['SERVER_PROTOCOL']) && in_array($_SERVER['SERVER_PROTOCOL'], array('HTTP/1.0', 'HTTP/1.1', 'HTTP/2'), TRUE)) + ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1'; + header($server_protocol.' '.$code.' '.$text, TRUE, $code); + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('_error_handler')) +{ + /** + * Error Handler + * + * This is the custom error handler that is declared at the (relative) + * top of CodeIgniter.php. The main reason we use this is to permit + * PHP errors to be logged in our own log files since the user may + * not have access to server logs. Since this function effectively + * intercepts PHP errors, however, we also need to display errors + * based on the current error_reporting level. + * We do that with the use of a PHP error template. + * + * @param int $severity + * @param string $message + * @param string $filepath + * @param int $line + * @return void + */ + function _error_handler($severity, $message, $filepath, $line) + { + $is_error = (((E_ERROR | E_PARSE | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity); + + // When an error occurred, set the status header to '500 Internal Server Error' + // to indicate to the client something went wrong. + // This can't be done within the $_error->show_php_error method because + // it is only called when the display_errors flag is set (which isn't usually + // the case in a production environment) or when errors are ignored because + // they are above the error_reporting threshold. + if ($is_error) + { + set_status_header(500); + } + + // Should we ignore the error? We'll get the current error_reporting + // level and add its bits with the severity bits to find out. + if (($severity & error_reporting()) !== $severity) + { + return; + } + + $_error =& load_class('Exceptions', 'core'); + $_error->log_exception($severity, $message, $filepath, $line); + + // Should we display the error? + if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))) + { + $_error->show_php_error($severity, $message, $filepath, $line); + } + + // If the error is fatal, the execution of the script should be stopped because + // errors can't be recovered from. Halting the script conforms with PHP's + // default error handling. See http://www.php.net/manual/en/errorfunc.constants.php + if ($is_error) + { + exit(1); // EXIT_ERROR + } + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('_exception_handler')) +{ + /** + * Exception Handler + * + * Sends uncaught exceptions to the logger and displays them + * only if display_errors is On so that they don't show up in + * production environments. + * + * @param Exception $exception + * @return void + */ + function _exception_handler($exception) + { + $_error =& load_class('Exceptions', 'core'); + $_error->log_exception('error', 'Exception: '.$exception->getMessage(), $exception->getFile(), $exception->getLine()); + + is_cli() OR set_status_header(500); + // Should we display the error? + if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))) + { + $_error->show_exception($exception); + } + + exit(1); // EXIT_ERROR + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('_shutdown_handler')) +{ + /** + * Shutdown Handler + * + * This is the shutdown handler that is declared at the top + * of CodeIgniter.php. The main reason we use this is to simulate + * a complete custom exception handler. + * + * E_STRICT is purposively neglected because such events may have + * been caught. Duplication or none? None is preferred for now. + * + * @link http://insomanic.me.uk/post/229851073/php-trick-catching-fatal-errors-e-error-with-a + * @return void + */ + function _shutdown_handler() + { + $last_error = error_get_last(); + if (isset($last_error) && + ($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))) + { + _error_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']); + } + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('remove_invisible_characters')) +{ + /** + * Remove Invisible Characters + * + * This prevents sandwiching null characters + * between ascii characters, like Java\0script. + * + * @param string + * @param bool + * @return string + */ + function remove_invisible_characters($str, $url_encoded = TRUE) + { + $non_displayables = array(); + + // every control character except newline (dec 10), + // carriage return (dec 13) and horizontal tab (dec 09) + if ($url_encoded) + { + $non_displayables[] = '/%0[0-8bcef]/i'; // url encoded 00-08, 11, 12, 14, 15 + $non_displayables[] = '/%1[0-9a-f]/i'; // url encoded 16-31 + $non_displayables[] = '/%7f/i'; // url encoded 127 + } + + $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127 + + do + { + $str = preg_replace($non_displayables, '', $str, -1, $count); + } + while ($count); + + return $str; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('html_escape')) +{ + /** + * Returns HTML escaped variable. + * + * @param mixed $var The input string or array of strings to be escaped. + * @param bool $double_encode $double_encode set to FALSE prevents escaping twice. + * @return mixed The escaped string or array of strings as a result. + */ + function html_escape($var, $double_encode = TRUE) + { + if (empty($var)) + { + return $var; + } + + if (is_array($var)) + { + foreach (array_keys($var) as $key) + { + $var[$key] = html_escape($var[$key], $double_encode); + } + + return $var; + } + + return htmlspecialchars($var, ENT_QUOTES, config_item('charset'), $double_encode); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('_stringify_attributes')) +{ + /** + * Stringify attributes for use in HTML tags. + * + * Helper function used to convert a string, array, or object + * of attributes to a string. + * + * @param mixed string, array, object + * @param bool + * @return string + */ + function _stringify_attributes($attributes, $js = FALSE) + { + $atts = NULL; + + if (empty($attributes)) + { + return $atts; + } + + if (is_string($attributes)) + { + return ' '.$attributes; + } + + $attributes = (array) $attributes; + + foreach ($attributes as $key => $val) + { + $atts .= ($js) ? $key.'='.$val.',' : ' '.$key.'="'.$val.'"'; + } + + return rtrim($atts, ','); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('function_usable')) +{ + /** + * Function usable + * + * Executes a function_exists() check, and if the Suhosin PHP + * extension is loaded - checks whether the function that is + * checked might be disabled in there as well. + * + * This is useful as function_exists() will return FALSE for + * functions disabled via the *disable_functions* php.ini + * setting, but not for *suhosin.executor.func.blacklist* and + * *suhosin.executor.disable_eval*. These settings will just + * terminate script execution if a disabled function is executed. + * + * The above described behavior turned out to be a bug in Suhosin, + * but even though a fix was committed for 0.9.34 on 2012-02-12, + * that version is yet to be released. This function will therefore + * be just temporary, but would probably be kept for a few years. + * + * @link http://www.hardened-php.net/suhosin/ + * @param string $function_name Function to check for + * @return bool TRUE if the function exists and is safe to call, + * FALSE otherwise. + */ + function function_usable($function_name) + { + static $_suhosin_func_blacklist; + + if (function_exists($function_name)) + { + if ( ! isset($_suhosin_func_blacklist)) + { + $_suhosin_func_blacklist = extension_loaded('suhosin') + ? explode(',', trim(ini_get('suhosin.executor.func.blacklist'))) + : array(); + } + + return ! in_array($function_name, $_suhosin_func_blacklist, TRUE); + } + + return FALSE; + } +} diff --git a/system/core/Config.php b/system/core/Config.php new file mode 100644 index 00000000..cda62241 --- /dev/null +++ b/system/core/Config.php @@ -0,0 +1,379 @@ +config =& get_config(); + + // Set the base_url automatically if none was provided + if (empty($this->config['base_url'])) + { + if (isset($_SERVER['SERVER_ADDR'])) + { + if (strpos($_SERVER['SERVER_ADDR'], ':') !== FALSE) + { + $server_addr = '['.$_SERVER['SERVER_ADDR'].']'; + } + else + { + $server_addr = $_SERVER['SERVER_ADDR']; + } + + $base_url = (is_https() ? 'https' : 'http').'://'.$server_addr + .substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'], basename($_SERVER['SCRIPT_FILENAME']))); + } + else + { + $base_url = 'http://localhost/'; + } + + $this->set_item('base_url', $base_url); + } + + log_message('info', 'Config Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Load Config File + * + * @param string $file Configuration file name + * @param bool $use_sections Whether configuration values should be loaded into their own section + * @param bool $fail_gracefully Whether to just return FALSE or display an error message + * @return bool TRUE if the file was loaded correctly or FALSE on failure + */ + public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) + { + $file = ($file === '') ? 'config' : str_replace('.php', '', $file); + $loaded = FALSE; + + foreach ($this->_config_paths as $path) + { + foreach (array($file, ENVIRONMENT.DIRECTORY_SEPARATOR.$file) as $location) + { + $file_path = $path.'config/'.$location.'.php'; + if (in_array($file_path, $this->is_loaded, TRUE)) + { + return TRUE; + } + + if ( ! file_exists($file_path)) + { + continue; + } + + include($file_path); + + if ( ! isset($config) OR ! is_array($config)) + { + if ($fail_gracefully === TRUE) + { + return FALSE; + } + + show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.'); + } + + if ($use_sections === TRUE) + { + $this->config[$file] = isset($this->config[$file]) + ? array_merge($this->config[$file], $config) + : $config; + } + else + { + $this->config = array_merge($this->config, $config); + } + + $this->is_loaded[] = $file_path; + $config = NULL; + $loaded = TRUE; + log_message('debug', 'Config file loaded: '.$file_path); + } + } + + if ($loaded === TRUE) + { + return TRUE; + } + elseif ($fail_gracefully === TRUE) + { + return FALSE; + } + + show_error('The configuration file '.$file.'.php does not exist.'); + } + + // -------------------------------------------------------------------- + + /** + * Fetch a config file item + * + * @param string $item Config item name + * @param string $index Index name + * @return string|null The configuration item or NULL if the item doesn't exist + */ + public function item($item, $index = '') + { + if ($index == '') + { + return isset($this->config[$item]) ? $this->config[$item] : NULL; + } + + return isset($this->config[$index], $this->config[$index][$item]) ? $this->config[$index][$item] : NULL; + } + + // -------------------------------------------------------------------- + + /** + * Fetch a config file item with slash appended (if not empty) + * + * @param string $item Config item name + * @return string|null The configuration item or NULL if the item doesn't exist + */ + public function slash_item($item) + { + if ( ! isset($this->config[$item])) + { + return NULL; + } + elseif (trim($this->config[$item]) === '') + { + return ''; + } + + return rtrim($this->config[$item], '/').'/'; + } + + // -------------------------------------------------------------------- + + /** + * Site URL + * + * Returns base_url . index_page [. uri_string] + * + * @uses CI_Config::_uri_string() + * + * @param string|string[] $uri URI string or an array of segments + * @param string $protocol + * @return string + */ + public function site_url($uri = '', $protocol = NULL) + { + $base_url = $this->slash_item('base_url'); + + if (isset($protocol)) + { + // For protocol-relative links + if ($protocol === '') + { + $base_url = substr($base_url, strpos($base_url, '//')); + } + else + { + $base_url = $protocol.substr($base_url, strpos($base_url, '://')); + } + } + + if (empty($uri)) + { + return $base_url.$this->item('index_page'); + } + + $uri = $this->_uri_string($uri); + + if ($this->item('enable_query_strings') === FALSE) + { + $suffix = isset($this->config['url_suffix']) ? $this->config['url_suffix'] : ''; + + if ($suffix !== '') + { + if (($offset = strpos($uri, '?')) !== FALSE) + { + $uri = substr($uri, 0, $offset).$suffix.substr($uri, $offset); + } + else + { + $uri .= $suffix; + } + } + + return $base_url.$this->slash_item('index_page').$uri; + } + elseif (strpos($uri, '?') === FALSE) + { + $uri = '?'.$uri; + } + + return $base_url.$this->item('index_page').$uri; + } + + // ------------------------------------------------------------- + + /** + * Base URL + * + * Returns base_url [. uri_string] + * + * @uses CI_Config::_uri_string() + * + * @param string|string[] $uri URI string or an array of segments + * @param string $protocol + * @return string + */ + public function base_url($uri = '', $protocol = NULL) + { + $base_url = $this->slash_item('base_url'); + + if (isset($protocol)) + { + // For protocol-relative links + if ($protocol === '') + { + $base_url = substr($base_url, strpos($base_url, '//')); + } + else + { + $base_url = $protocol.substr($base_url, strpos($base_url, '://')); + } + } + + return $base_url.$this->_uri_string($uri); + } + + // ------------------------------------------------------------- + + /** + * Build URI string + * + * @used-by CI_Config::site_url() + * @used-by CI_Config::base_url() + * + * @param string|string[] $uri URI string or an array of segments + * @return string + */ + protected function _uri_string($uri) + { + if ($this->item('enable_query_strings') === FALSE) + { + is_array($uri) && $uri = implode('/', $uri); + return ltrim($uri, '/'); + } + elseif (is_array($uri)) + { + return http_build_query($uri); + } + + return $uri; + } + + // -------------------------------------------------------------------- + + /** + * System URL + * + * @deprecated 3.0.0 Encourages insecure practices + * @return string + */ + public function system_url() + { + $x = explode('/', preg_replace('|/*(.+?)/*$|', '\\1', BASEPATH)); + return $this->slash_item('base_url').end($x).'/'; + } + + // -------------------------------------------------------------------- + + /** + * Set a config file item + * + * @param string $item Config item key + * @param string $value Config item value + * @return void + */ + public function set_item($item, $value) + { + $this->config[$item] = $value; + } + +} diff --git a/system/core/Controller.php b/system/core/Controller.php new file mode 100644 index 00000000..59a91673 --- /dev/null +++ b/system/core/Controller.php @@ -0,0 +1,96 @@ + $class) + { + $this->$var =& load_class($class); + } + + $this->load =& load_class('Loader', 'core'); + $this->load->initialize(); + log_message('info', 'Controller Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Get the CI singleton + * + * @static + * @return object + */ + public static function &get_instance() + { + return self::$instance; + } + +} diff --git a/system/core/Exceptions.php b/system/core/Exceptions.php new file mode 100644 index 00000000..52690960 --- /dev/null +++ b/system/core/Exceptions.php @@ -0,0 +1,274 @@ + 'Error', + E_WARNING => 'Warning', + E_PARSE => 'Parsing Error', + E_NOTICE => 'Notice', + E_CORE_ERROR => 'Core Error', + E_CORE_WARNING => 'Core Warning', + E_COMPILE_ERROR => 'Compile Error', + E_COMPILE_WARNING => 'Compile Warning', + E_USER_ERROR => 'User Error', + E_USER_WARNING => 'User Warning', + E_USER_NOTICE => 'User Notice', + E_STRICT => 'Runtime Notice' + ); + + /** + * Class constructor + * + * @return void + */ + public function __construct() + { + $this->ob_level = ob_get_level(); + // Note: Do not log messages from this constructor. + } + + // -------------------------------------------------------------------- + + /** + * Exception Logger + * + * Logs PHP generated error messages + * + * @param int $severity Log level + * @param string $message Error message + * @param string $filepath File path + * @param int $line Line number + * @return void + */ + public function log_exception($severity, $message, $filepath, $line) + { + $severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity; + log_message('error', 'Severity: '.$severity.' --> '.$message.' '.$filepath.' '.$line); + } + + // -------------------------------------------------------------------- + + /** + * 404 Error Handler + * + * @uses CI_Exceptions::show_error() + * + * @param string $page Page URI + * @param bool $log_error Whether to log the error + * @return void + */ + public function show_404($page = '', $log_error = TRUE) + { + if (is_cli()) + { + $heading = 'Not Found'; + $message = 'The controller/method pair you requested was not found.'; + } + else + { + $heading = '404 Page Not Found'; + $message = 'The page you requested was not found.'; + } + + // By default we log this, but allow a dev to skip it + if ($log_error) + { + log_message('error', $heading.': '.$page); + } + + echo $this->show_error($heading, $message, 'error_404', 404); + exit(4); // EXIT_UNKNOWN_FILE + } + + // -------------------------------------------------------------------- + + /** + * General Error Page + * + * Takes an error message as input (either as a string or an array) + * and displays it using the specified template. + * + * @param string $heading Page heading + * @param string|string[] $message Error message + * @param string $template Template name + * @param int $status_code (default: 500) + * + * @return string Error page output + */ + public function show_error($heading, $message, $template = 'error_general', $status_code = 500) + { + $templates_path = config_item('error_views_path'); + if (empty($templates_path)) + { + $templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR; + } + + if (is_cli()) + { + $message = "\t".(is_array($message) ? implode("\n\t", $message) : $message); + $template = 'cli'.DIRECTORY_SEPARATOR.$template; + } + else + { + set_status_header($status_code); + $message = '

'.(is_array($message) ? implode('

', $message) : $message).'

'; + $template = 'html'.DIRECTORY_SEPARATOR.$template; + } + + if (ob_get_level() > $this->ob_level + 1) + { + ob_end_flush(); + } + ob_start(); + include($templates_path.$template.'.php'); + $buffer = ob_get_contents(); + ob_end_clean(); + return $buffer; + } + + // -------------------------------------------------------------------- + + public function show_exception($exception) + { + $templates_path = config_item('error_views_path'); + if (empty($templates_path)) + { + $templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR; + } + + $message = $exception->getMessage(); + if (empty($message)) + { + $message = '(null)'; + } + + if (is_cli()) + { + $templates_path .= 'cli'.DIRECTORY_SEPARATOR; + } + else + { + $templates_path .= 'html'.DIRECTORY_SEPARATOR; + } + + if (ob_get_level() > $this->ob_level + 1) + { + ob_end_flush(); + } + + ob_start(); + include($templates_path.'error_exception.php'); + $buffer = ob_get_contents(); + ob_end_clean(); + echo $buffer; + } + + // -------------------------------------------------------------------- + + /** + * Native PHP error handler + * + * @param int $severity Error level + * @param string $message Error message + * @param string $filepath File path + * @param int $line Line number + * @return void + */ + public function show_php_error($severity, $message, $filepath, $line) + { + $templates_path = config_item('error_views_path'); + if (empty($templates_path)) + { + $templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR; + } + + $severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity; + + // For safety reasons we don't show the full file path in non-CLI requests + if ( ! is_cli()) + { + $filepath = str_replace('\\', '/', $filepath); + if (FALSE !== strpos($filepath, '/')) + { + $x = explode('/', $filepath); + $filepath = $x[count($x)-2].'/'.end($x); + } + + $template = 'html'.DIRECTORY_SEPARATOR.'error_php'; + } + else + { + $template = 'cli'.DIRECTORY_SEPARATOR.'error_php'; + } + + if (ob_get_level() > $this->ob_level + 1) + { + ob_end_flush(); + } + ob_start(); + include($templates_path.$template.'.php'); + $buffer = ob_get_contents(); + ob_end_clean(); + echo $buffer; + } + +} diff --git a/system/core/Hooks.php b/system/core/Hooks.php new file mode 100644 index 00000000..f2d6f21c --- /dev/null +++ b/system/core/Hooks.php @@ -0,0 +1,266 @@ +item('enable_hooks') === FALSE) + { + return; + } + + // Grab the "hooks" definition file. + if (file_exists(APPPATH.'config/hooks.php')) + { + include(APPPATH.'config/hooks.php'); + } + + if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/hooks.php')) + { + include(APPPATH.'config/'.ENVIRONMENT.'/hooks.php'); + } + + // If there are no hooks, we're done. + if ( ! isset($hook) OR ! is_array($hook)) + { + return; + } + + $this->hooks =& $hook; + $this->enabled = TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Call Hook + * + * Calls a particular hook. Called by CodeIgniter.php. + * + * @uses CI_Hooks::_run_hook() + * + * @param string $which Hook name + * @return bool TRUE on success or FALSE on failure + */ + public function call_hook($which = '') + { + if ( ! $this->enabled OR ! isset($this->hooks[$which])) + { + return FALSE; + } + + if (is_array($this->hooks[$which]) && ! isset($this->hooks[$which]['function'])) + { + foreach ($this->hooks[$which] as $val) + { + $this->_run_hook($val); + } + } + else + { + $this->_run_hook($this->hooks[$which]); + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Run Hook + * + * Runs a particular hook + * + * @param array $data Hook details + * @return bool TRUE on success or FALSE on failure + */ + protected function _run_hook($data) + { + // Closures/lambda functions and array($object, 'method') callables + if (is_callable($data)) + { + is_array($data) + ? $data[0]->{$data[1]}() + : $data(); + + return TRUE; + } + elseif ( ! is_array($data)) + { + return FALSE; + } + + // ----------------------------------- + // Safety - Prevents run-away loops + // ----------------------------------- + + // If the script being called happens to have the same + // hook call within it a loop can happen + if ($this->_in_progress === TRUE) + { + return; + } + + // ----------------------------------- + // Set file path + // ----------------------------------- + + if ( ! isset($data['filepath'], $data['filename'])) + { + return FALSE; + } + + $filepath = APPPATH.$data['filepath'].'/'.$data['filename']; + + if ( ! file_exists($filepath)) + { + return FALSE; + } + + // Determine and class and/or function names + $class = empty($data['class']) ? FALSE : $data['class']; + $function = empty($data['function']) ? FALSE : $data['function']; + $params = isset($data['params']) ? $data['params'] : ''; + + if (empty($function)) + { + return FALSE; + } + + // Set the _in_progress flag + $this->_in_progress = TRUE; + + // Call the requested class and/or function + if ($class !== FALSE) + { + // The object is stored? + if (isset($this->_objects[$class])) + { + if (method_exists($this->_objects[$class], $function)) + { + $this->_objects[$class]->$function($params); + } + else + { + return $this->_in_progress = FALSE; + } + } + else + { + class_exists($class, FALSE) OR require_once($filepath); + + if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) + { + return $this->_in_progress = FALSE; + } + + // Store the object and execute the method + $this->_objects[$class] = new $class(); + $this->_objects[$class]->$function($params); + } + } + else + { + function_exists($function) OR require_once($filepath); + + if ( ! function_exists($function)) + { + return $this->_in_progress = FALSE; + } + + $function($params); + } + + $this->_in_progress = FALSE; + return TRUE; + } + +} diff --git a/system/core/Input.php b/system/core/Input.php new file mode 100644 index 00000000..af4f87c1 --- /dev/null +++ b/system/core/Input.php @@ -0,0 +1,895 @@ +_allow_get_array = (config_item('allow_get_array') === TRUE); + $this->_enable_xss = (config_item('global_xss_filtering') === TRUE); + $this->_enable_csrf = (config_item('csrf_protection') === TRUE); + $this->_standardize_newlines = (bool) config_item('standardize_newlines'); + + $this->security =& load_class('Security', 'core'); + + // Do we need the UTF-8 class? + if (UTF8_ENABLED === TRUE) + { + $this->uni =& load_class('Utf8', 'core'); + } + + // Sanitize global arrays + $this->_sanitize_globals(); + + // CSRF Protection check + if ($this->_enable_csrf === TRUE && ! is_cli()) + { + $this->security->csrf_verify(); + } + + log_message('info', 'Input Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Fetch from array + * + * Internal method used to retrieve values from global arrays. + * + * @param array &$array $_GET, $_POST, $_COOKIE, $_SERVER, etc. + * @param mixed $index Index for item to be fetched from $array + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + protected function _fetch_from_array(&$array, $index = NULL, $xss_clean = NULL) + { + is_bool($xss_clean) OR $xss_clean = $this->_enable_xss; + + // If $index is NULL, it means that the whole $array is requested + isset($index) OR $index = array_keys($array); + + // allow fetching multiple keys at once + if (is_array($index)) + { + $output = array(); + foreach ($index as $key) + { + $output[$key] = $this->_fetch_from_array($array, $key, $xss_clean); + } + + return $output; + } + + if (isset($array[$index])) + { + $value = $array[$index]; + } + elseif (($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1) // Does the index contain array notation + { + $value = $array; + for ($i = 0; $i < $count; $i++) + { + $key = trim($matches[0][$i], '[]'); + if ($key === '') // Empty notation will return the value as array + { + break; + } + + if (isset($value[$key])) + { + $value = $value[$key]; + } + else + { + return NULL; + } + } + } + else + { + return NULL; + } + + return ($xss_clean === TRUE) + ? $this->security->xss_clean($value) + : $value; + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from the GET array + * + * @param mixed $index Index for item to be fetched from $_GET + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function get($index = NULL, $xss_clean = NULL) + { + return $this->_fetch_from_array($_GET, $index, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from the POST array + * + * @param mixed $index Index for item to be fetched from $_POST + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function post($index = NULL, $xss_clean = NULL) + { + return $this->_fetch_from_array($_POST, $index, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from POST data with fallback to GET + * + * @param string $index Index for item to be fetched from $_POST or $_GET + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function post_get($index, $xss_clean = NULL) + { + return isset($_POST[$index]) + ? $this->post($index, $xss_clean) + : $this->get($index, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from GET data with fallback to POST + * + * @param string $index Index for item to be fetched from $_GET or $_POST + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function get_post($index, $xss_clean = NULL) + { + return isset($_GET[$index]) + ? $this->get($index, $xss_clean) + : $this->post($index, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from the COOKIE array + * + * @param mixed $index Index for item to be fetched from $_COOKIE + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function cookie($index = NULL, $xss_clean = NULL) + { + return $this->_fetch_from_array($_COOKIE, $index, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Fetch an item from the SERVER array + * + * @param mixed $index Index for item to be fetched from $_SERVER + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function server($index, $xss_clean = NULL) + { + return $this->_fetch_from_array($_SERVER, $index, $xss_clean); + } + + // ------------------------------------------------------------------------ + + /** + * Fetch an item from the php://input stream + * + * Useful when you need to access PUT, DELETE or PATCH request data. + * + * @param string $index Index for item to be fetched + * @param bool $xss_clean Whether to apply XSS filtering + * @return mixed + */ + public function input_stream($index = NULL, $xss_clean = NULL) + { + // Prior to PHP 5.6, the input stream can only be read once, + // so we'll need to check if we have already done that first. + if ( ! is_array($this->_input_stream)) + { + // $this->raw_input_stream will trigger __get(). + parse_str($this->raw_input_stream, $this->_input_stream); + is_array($this->_input_stream) OR $this->_input_stream = array(); + } + + return $this->_fetch_from_array($this->_input_stream, $index, $xss_clean); + } + + // ------------------------------------------------------------------------ + + /** + * Set cookie + * + * Accepts an arbitrary number of parameters (up to 7) or an associative + * array in the first parameter containing all the values. + * + * @param string|mixed[] $name Cookie name or an array containing parameters + * @param string $value Cookie value + * @param int $expire Cookie expiration time in seconds + * @param string $domain Cookie domain (e.g.: '.yourdomain.com') + * @param string $path Cookie path (default: '/') + * @param string $prefix Cookie name prefix + * @param bool $secure Whether to only transfer cookies via SSL + * @param bool $httponly Whether to only makes the cookie accessible via HTTP (no javascript) + * @return void + */ + public function set_cookie($name, $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = NULL, $httponly = NULL) + { + if (is_array($name)) + { + // always leave 'name' in last place, as the loop will break otherwise, due to $$item + foreach (array('value', 'expire', 'domain', 'path', 'prefix', 'secure', 'httponly', 'name') as $item) + { + if (isset($name[$item])) + { + $$item = $name[$item]; + } + } + } + + if ($prefix === '' && config_item('cookie_prefix') !== '') + { + $prefix = config_item('cookie_prefix'); + } + + if ($domain == '' && config_item('cookie_domain') != '') + { + $domain = config_item('cookie_domain'); + } + + if ($path === '/' && config_item('cookie_path') !== '/') + { + $path = config_item('cookie_path'); + } + + $secure = ($secure === NULL && config_item('cookie_secure') !== NULL) + ? (bool) config_item('cookie_secure') + : (bool) $secure; + + $httponly = ($httponly === NULL && config_item('cookie_httponly') !== NULL) + ? (bool) config_item('cookie_httponly') + : (bool) $httponly; + + if ( ! is_numeric($expire)) + { + $expire = time() - 86500; + } + else + { + $expire = ($expire > 0) ? time() + $expire : 0; + } + + setcookie($prefix.$name, $value, $expire, $path, $domain, $secure, $httponly); + } + + // -------------------------------------------------------------------- + + /** + * Fetch the IP Address + * + * Determines and validates the visitor's IP address. + * + * @return string IP address + */ + public function ip_address() + { + if ($this->ip_address !== FALSE) + { + return $this->ip_address; + } + + $proxy_ips = config_item('proxy_ips'); + if ( ! empty($proxy_ips) && ! is_array($proxy_ips)) + { + $proxy_ips = explode(',', str_replace(' ', '', $proxy_ips)); + } + + $this->ip_address = $this->server('REMOTE_ADDR'); + + if ($proxy_ips) + { + foreach (array('HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_X_CLIENT_IP', 'HTTP_X_CLUSTER_CLIENT_IP') as $header) + { + if (($spoof = $this->server($header)) !== NULL) + { + // Some proxies typically list the whole chain of IP + // addresses through which the client has reached us. + // e.g. client_ip, proxy_ip1, proxy_ip2, etc. + sscanf($spoof, '%[^,]', $spoof); + + if ( ! $this->valid_ip($spoof)) + { + $spoof = NULL; + } + else + { + break; + } + } + } + + if ($spoof) + { + for ($i = 0, $c = count($proxy_ips); $i < $c; $i++) + { + // Check if we have an IP address or a subnet + if (strpos($proxy_ips[$i], '/') === FALSE) + { + // An IP address (and not a subnet) is specified. + // We can compare right away. + if ($proxy_ips[$i] === $this->ip_address) + { + $this->ip_address = $spoof; + break; + } + + continue; + } + + // We have a subnet ... now the heavy lifting begins + isset($separator) OR $separator = $this->valid_ip($this->ip_address, 'ipv6') ? ':' : '.'; + + // If the proxy entry doesn't match the IP protocol - skip it + if (strpos($proxy_ips[$i], $separator) === FALSE) + { + continue; + } + + // Convert the REMOTE_ADDR IP address to binary, if needed + if ( ! isset($ip, $sprintf)) + { + if ($separator === ':') + { + // Make sure we're have the "full" IPv6 format + $ip = explode(':', + str_replace('::', + str_repeat(':', 9 - substr_count($this->ip_address, ':')), + $this->ip_address + ) + ); + + for ($j = 0; $j < 8; $j++) + { + $ip[$j] = intval($ip[$j], 16); + } + + $sprintf = '%016b%016b%016b%016b%016b%016b%016b%016b'; + } + else + { + $ip = explode('.', $this->ip_address); + $sprintf = '%08b%08b%08b%08b'; + } + + $ip = vsprintf($sprintf, $ip); + } + + // Split the netmask length off the network address + sscanf($proxy_ips[$i], '%[^/]/%d', $netaddr, $masklen); + + // Again, an IPv6 address is most likely in a compressed form + if ($separator === ':') + { + $netaddr = explode(':', str_replace('::', str_repeat(':', 9 - substr_count($netaddr, ':')), $netaddr)); + for ($j = 0; $j < 8; $j++) + { + $netaddr[$j] = intval($netaddr[$j], 16); + } + } + else + { + $netaddr = explode('.', $netaddr); + } + + // Convert to binary and finally compare + if (strncmp($ip, vsprintf($sprintf, $netaddr), $masklen) === 0) + { + $this->ip_address = $spoof; + break; + } + } + } + } + + if ( ! $this->valid_ip($this->ip_address)) + { + return $this->ip_address = '0.0.0.0'; + } + + return $this->ip_address; + } + + // -------------------------------------------------------------------- + + /** + * Validate IP Address + * + * @param string $ip IP address + * @param string $which IP protocol: 'ipv4' or 'ipv6' + * @return bool + */ + public function valid_ip($ip, $which = '') + { + switch (strtolower($which)) + { + case 'ipv4': + $which = FILTER_FLAG_IPV4; + break; + case 'ipv6': + $which = FILTER_FLAG_IPV6; + break; + default: + $which = NULL; + break; + } + + return (bool) filter_var($ip, FILTER_VALIDATE_IP, $which); + } + + // -------------------------------------------------------------------- + + /** + * Fetch User Agent string + * + * @return string|null User Agent string or NULL if it doesn't exist + */ + public function user_agent($xss_clean = NULL) + { + return $this->_fetch_from_array($_SERVER, 'HTTP_USER_AGENT', $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Sanitize Globals + * + * Internal method serving for the following purposes: + * + * - Unsets $_GET data, if query strings are not enabled + * - Cleans POST, COOKIE and SERVER data + * - Standardizes newline characters to PHP_EOL + * + * @return void + */ + protected function _sanitize_globals() + { + // Is $_GET data allowed? If not we'll set the $_GET to an empty array + if ($this->_allow_get_array === FALSE) + { + $_GET = array(); + } + elseif (is_array($_GET)) + { + foreach ($_GET as $key => $val) + { + $_GET[$this->_clean_input_keys($key)] = $this->_clean_input_data($val); + } + } + + // Clean $_POST Data + if (is_array($_POST)) + { + foreach ($_POST as $key => $val) + { + $_POST[$this->_clean_input_keys($key)] = $this->_clean_input_data($val); + } + } + + // Clean $_COOKIE Data + if (is_array($_COOKIE)) + { + // Also get rid of specially treated cookies that might be set by a server + // or silly application, that are of no use to a CI application anyway + // but that when present will trip our 'Disallowed Key Characters' alarm + // http://www.ietf.org/rfc/rfc2109.txt + // note that the key names below are single quoted strings, and are not PHP variables + unset( + $_COOKIE['$Version'], + $_COOKIE['$Path'], + $_COOKIE['$Domain'] + ); + + foreach ($_COOKIE as $key => $val) + { + if (($cookie_key = $this->_clean_input_keys($key)) !== FALSE) + { + $_COOKIE[$cookie_key] = $this->_clean_input_data($val); + } + else + { + unset($_COOKIE[$key]); + } + } + } + + // Sanitize PHP_SELF + $_SERVER['PHP_SELF'] = strip_tags($_SERVER['PHP_SELF']); + + log_message('debug', 'Global POST, GET and COOKIE data sanitized'); + } + + // -------------------------------------------------------------------- + + /** + * Clean Input Data + * + * Internal method that aids in escaping data and + * standardizing newline characters to PHP_EOL. + * + * @param string|string[] $str Input string(s) + * @return string + */ + protected function _clean_input_data($str) + { + if (is_array($str)) + { + $new_array = array(); + foreach (array_keys($str) as $key) + { + $new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($str[$key]); + } + return $new_array; + } + + /* We strip slashes if magic quotes is on to keep things consistent + + NOTE: In PHP 5.4 get_magic_quotes_gpc() will always return 0 and + it will probably not exist in future versions at all. + */ + if ( ! is_php('5.4') && get_magic_quotes_gpc()) + { + $str = stripslashes($str); + } + + // Clean UTF-8 if supported + if (UTF8_ENABLED === TRUE) + { + $str = $this->uni->clean_string($str); + } + + // Remove control characters + $str = remove_invisible_characters($str, FALSE); + + // Standardize newlines if needed + if ($this->_standardize_newlines === TRUE) + { + return preg_replace('/(?:\r\n|[\r\n])/', PHP_EOL, $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Clean Keys + * + * Internal method that helps to prevent malicious users + * from trying to exploit keys we make sure that keys are + * only named with alpha-numeric text and a few other items. + * + * @param string $str Input string + * @param bool $fatal Whether to terminate script exection + * or to return FALSE if an invalid + * key is encountered + * @return string|bool + */ + protected function _clean_input_keys($str, $fatal = TRUE) + { + if ( ! preg_match('/^[a-z0-9:_\/|-]+$/i', $str)) + { + if ($fatal === TRUE) + { + return FALSE; + } + else + { + set_status_header(503); + echo 'Disallowed Key Characters.'; + exit(7); // EXIT_USER_INPUT + } + } + + // Clean UTF-8 if supported + if (UTF8_ENABLED === TRUE) + { + return $this->uni->clean_string($str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Request Headers + * + * @param bool $xss_clean Whether to apply XSS filtering + * @return array + */ + public function request_headers($xss_clean = FALSE) + { + // If header is already defined, return it immediately + if ( ! empty($this->headers)) + { + return $this->_fetch_from_array($this->headers, NULL, $xss_clean); + } + + // In Apache, you can simply call apache_request_headers() + if (function_exists('apache_request_headers')) + { + $this->headers = apache_request_headers(); + } + else + { + isset($_SERVER['CONTENT_TYPE']) && $this->headers['Content-Type'] = $_SERVER['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $val) + { + if (sscanf($key, 'HTTP_%s', $header) === 1) + { + // take SOME_HEADER and turn it into Some-Header + $header = str_replace('_', ' ', strtolower($header)); + $header = str_replace(' ', '-', ucwords($header)); + + $this->headers[$header] = $_SERVER[$key]; + } + } + } + + return $this->_fetch_from_array($this->headers, NULL, $xss_clean); + } + + // -------------------------------------------------------------------- + + /** + * Get Request Header + * + * Returns the value of a single member of the headers class member + * + * @param string $index Header name + * @param bool $xss_clean Whether to apply XSS filtering + * @return string|null The requested header on success or NULL on failure + */ + public function get_request_header($index, $xss_clean = FALSE) + { + static $headers; + + if ( ! isset($headers)) + { + empty($this->headers) && $this->request_headers(); + foreach ($this->headers as $key => $value) + { + $headers[strtolower($key)] = $value; + } + } + + $index = strtolower($index); + + if ( ! isset($headers[$index])) + { + return NULL; + } + + return ($xss_clean === TRUE) + ? $this->security->xss_clean($headers[$index]) + : $headers[$index]; + } + + // -------------------------------------------------------------------- + + /** + * Is AJAX request? + * + * Test to see if a request contains the HTTP_X_REQUESTED_WITH header. + * + * @return bool + */ + public function is_ajax_request() + { + return ( ! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'); + } + + // -------------------------------------------------------------------- + + /** + * Is CLI request? + * + * Test to see if a request was made from the command line. + * + * @deprecated 3.0.0 Use is_cli() instead + * @return bool + */ + public function is_cli_request() + { + return is_cli(); + } + + // -------------------------------------------------------------------- + + /** + * Get Request Method + * + * Return the request method + * + * @param bool $upper Whether to return in upper or lower case + * (default: FALSE) + * @return string + */ + public function method($upper = FALSE) + { + return ($upper) + ? strtoupper($this->server('REQUEST_METHOD')) + : strtolower($this->server('REQUEST_METHOD')); + } + + // ------------------------------------------------------------------------ + + /** + * Magic __get() + * + * Allows read access to protected properties + * + * @param string $name + * @return mixed + */ + public function __get($name) + { + if ($name === 'raw_input_stream') + { + isset($this->_raw_input_stream) OR $this->_raw_input_stream = file_get_contents('php://input'); + return $this->_raw_input_stream; + } + elseif ($name === 'ip_address') + { + return $this->ip_address; + } + } + +} diff --git a/system/core/Lang.php b/system/core/Lang.php new file mode 100644 index 00000000..569b0236 --- /dev/null +++ b/system/core/Lang.php @@ -0,0 +1,203 @@ +load($value, $idiom, $return, $add_suffix, $alt_path); + } + + return; + } + + $langfile = str_replace('.php', '', $langfile); + + if ($add_suffix === TRUE) + { + $langfile = preg_replace('/_lang$/', '', $langfile).'_lang'; + } + + $langfile .= '.php'; + + if (empty($idiom) OR ! preg_match('/^[a-z_-]+$/i', $idiom)) + { + $config =& get_config(); + $idiom = empty($config['language']) ? 'english' : $config['language']; + } + + if ($return === FALSE && isset($this->is_loaded[$langfile]) && $this->is_loaded[$langfile] === $idiom) + { + return; + } + + // Load the base file, so any others found can override it + $basepath = BASEPATH.'language/'.$idiom.'/'.$langfile; + if (($found = file_exists($basepath)) === TRUE) + { + include($basepath); + } + + // Do we have an alternative path to look in? + if ($alt_path !== '') + { + $alt_path .= 'language/'.$idiom.'/'.$langfile; + if (file_exists($alt_path)) + { + include($alt_path); + $found = TRUE; + } + } + else + { + foreach (get_instance()->load->get_package_paths(TRUE) as $package_path) + { + $package_path .= 'language/'.$idiom.'/'.$langfile; + if ($basepath !== $package_path && file_exists($package_path)) + { + include($package_path); + $found = TRUE; + break; + } + } + } + + if ($found !== TRUE) + { + show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile); + } + + if ( ! isset($lang) OR ! is_array($lang)) + { + log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile); + + if ($return === TRUE) + { + return array(); + } + return; + } + + if ($return === TRUE) + { + return $lang; + } + + $this->is_loaded[$langfile] = $idiom; + $this->language = array_merge($this->language, $lang); + + log_message('info', 'Language file loaded: language/'.$idiom.'/'.$langfile); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Language line + * + * Fetches a single line of text from the language array + * + * @param string $line Language line key + * @param bool $log_errors Whether to log an error message if the line is not found + * @return string Translation + */ + public function line($line, $log_errors = TRUE) + { + $value = isset($this->language[$line]) ? $this->language[$line] : FALSE; + + // Because killer robots like unicorns! + if ($value === FALSE && $log_errors === TRUE) + { + log_message('error', 'Could not find the language line "'.$line.'"'); + } + + return $value; + } + +} diff --git a/system/core/Loader.php b/system/core/Loader.php new file mode 100644 index 00000000..085c5b51 --- /dev/null +++ b/system/core/Loader.php @@ -0,0 +1,1409 @@ + TRUE); + + /** + * List of paths to load libraries from + * + * @var array + */ + protected $_ci_library_paths = array(APPPATH, BASEPATH); + + /** + * List of paths to load models from + * + * @var array + */ + protected $_ci_model_paths = array(APPPATH); + + /** + * List of paths to load helpers from + * + * @var array + */ + protected $_ci_helper_paths = array(APPPATH, BASEPATH); + + /** + * List of cached variables + * + * @var array + */ + protected $_ci_cached_vars = array(); + + /** + * List of loaded classes + * + * @var array + */ + protected $_ci_classes = array(); + + /** + * List of loaded models + * + * @var array + */ + protected $_ci_models = array(); + + /** + * List of loaded helpers + * + * @var array + */ + protected $_ci_helpers = array(); + + /** + * List of class name mappings + * + * @var array + */ + protected $_ci_varmap = array( + 'unit_test' => 'unit', + 'user_agent' => 'agent' + ); + + // -------------------------------------------------------------------- + + /** + * Class constructor + * + * Sets component load paths, gets the initial output buffering level. + * + * @return void + */ + public function __construct() + { + $this->_ci_ob_level = ob_get_level(); + $this->_ci_classes =& is_loaded(); + + log_message('info', 'Loader Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Initializer + * + * @todo Figure out a way to move this to the constructor + * without breaking *package_path*() methods. + * @uses CI_Loader::_ci_autoloader() + * @used-by CI_Controller::__construct() + * @return void + */ + public function initialize() + { + $this->_ci_autoloader(); + } + + // -------------------------------------------------------------------- + + /** + * Is Loaded + * + * A utility method to test if a class is in the self::$_ci_classes array. + * + * @used-by Mainly used by Form Helper function _get_validation_object(). + * + * @param string $class Class name to check for + * @return string|bool Class object name if loaded or FALSE + */ + public function is_loaded($class) + { + return array_search(ucfirst($class), $this->_ci_classes, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Library Loader + * + * Loads and instantiates libraries. + * Designed to be called from application controllers. + * + * @param mixed $library Library name + * @param array $params Optional parameters to pass to the library class constructor + * @param string $object_name An optional object name to assign to + * @return object + */ + public function library($library, $params = NULL, $object_name = NULL) + { + if (empty($library)) + { + return $this; + } + elseif (is_array($library)) + { + foreach ($library as $key => $value) + { + if (is_int($key)) + { + $this->library($value, $params); + } + else + { + $this->library($key, $params, $value); + } + } + + return $this; + } + + if ($params !== NULL && ! is_array($params)) + { + $params = NULL; + } + + $this->_ci_load_library($library, $params, $object_name); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Model Loader + * + * Loads and instantiates models. + * + * @param string $model Model name + * @param string $name An optional object name to assign to + * @param bool $db_conn An optional database connection configuration to initialize + * @return object + */ + public function model($model, $name = '', $db_conn = FALSE) + { + if (empty($model)) + { + return $this; + } + elseif (is_array($model)) + { + foreach ($model as $key => $value) + { + is_int($key) ? $this->model($value, '', $db_conn) : $this->model($key, $value, $db_conn); + } + + return $this; + } + + $path = ''; + + // Is the model in a sub-folder? If so, parse out the filename and path. + if (($last_slash = strrpos($model, '/')) !== FALSE) + { + // The path is in front of the last slash + $path = substr($model, 0, ++$last_slash); + + // And the model name behind it + $model = substr($model, $last_slash); + } + + if (empty($name)) + { + $name = $model; + } + + if (in_array($name, $this->_ci_models, TRUE)) + { + return $this; + } + + $CI =& get_instance(); + if (isset($CI->$name)) + { + throw new RuntimeException('The model name you are loading is the name of a resource that is already being used: '.$name); + } + + if ($db_conn !== FALSE && ! class_exists('CI_DB', FALSE)) + { + if ($db_conn === TRUE) + { + $db_conn = ''; + } + + $this->database($db_conn, FALSE, TRUE); + } + + // Note: All of the code under this condition used to be just: + // + // load_class('Model', 'core'); + // + // However, load_class() instantiates classes + // to cache them for later use and that prevents + // MY_Model from being an abstract class and is + // sub-optimal otherwise anyway. + if ( ! class_exists('CI_Model', FALSE)) + { + $app_path = APPPATH.'core'.DIRECTORY_SEPARATOR; + if (file_exists($app_path.'Model.php')) + { + require_once($app_path.'Model.php'); + if ( ! class_exists('CI_Model', FALSE)) + { + throw new RuntimeException($app_path."Model.php exists, but doesn't declare class CI_Model"); + } + } + elseif ( ! class_exists('CI_Model', FALSE)) + { + require_once(BASEPATH.'core'.DIRECTORY_SEPARATOR.'Model.php'); + } + + $class = config_item('subclass_prefix').'Model'; + if (file_exists($app_path.$class.'.php')) + { + require_once($app_path.$class.'.php'); + if ( ! class_exists($class, FALSE)) + { + throw new RuntimeException($app_path.$class.".php exists, but doesn't declare class ".$class); + } + } + } + + $model = ucfirst($model); + if ( ! class_exists($model, FALSE)) + { + foreach ($this->_ci_model_paths as $mod_path) + { + if ( ! file_exists($mod_path.'models/'.$path.$model.'.php')) + { + continue; + } + + require_once($mod_path.'models/'.$path.$model.'.php'); + if ( ! class_exists($model, FALSE)) + { + throw new RuntimeException($mod_path."models/".$path.$model.".php exists, but doesn't declare class ".$model); + } + + break; + } + + if ( ! class_exists($model, FALSE)) + { + throw new RuntimeException('Unable to locate the model you have specified: '.$model); + } + } + elseif ( ! is_subclass_of($model, 'CI_Model')) + { + throw new RuntimeException("Class ".$model." already exists and doesn't extend CI_Model"); + } + + $this->_ci_models[] = $name; + $CI->$name = new $model(); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Database Loader + * + * @param mixed $params Database configuration options + * @param bool $return Whether to return the database object + * @param bool $query_builder Whether to enable Query Builder + * (overrides the configuration setting) + * + * @return object|bool Database object if $return is set to TRUE, + * FALSE on failure, CI_Loader instance in any other case + */ + public function database($params = '', $return = FALSE, $query_builder = NULL) + { + // Grab the super object + $CI =& get_instance(); + + // Do we even need to load the database class? + if ($return === FALSE && $query_builder === NULL && isset($CI->db) && is_object($CI->db) && ! empty($CI->db->conn_id)) + { + return FALSE; + } + + require_once(BASEPATH.'database/DB.php'); + + if ($return === TRUE) + { + return DB($params, $query_builder); + } + + // Initialize the db variable. Needed to prevent + // reference errors with some configurations + $CI->db = ''; + + // Load the DB class + $CI->db =& DB($params, $query_builder); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Load the Database Utilities Class + * + * @param object $db Database object + * @param bool $return Whether to return the DB Utilities class object or not + * @return object + */ + public function dbutil($db = NULL, $return = FALSE) + { + $CI =& get_instance(); + + if ( ! is_object($db) OR ! ($db instanceof CI_DB)) + { + class_exists('CI_DB', FALSE) OR $this->database(); + $db =& $CI->db; + } + + require_once(BASEPATH.'database/DB_utility.php'); + require_once(BASEPATH.'database/drivers/'.$db->dbdriver.'/'.$db->dbdriver.'_utility.php'); + $class = 'CI_DB_'.$db->dbdriver.'_utility'; + + if ($return === TRUE) + { + return new $class($db); + } + + $CI->dbutil = new $class($db); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Load the Database Forge Class + * + * @param object $db Database object + * @param bool $return Whether to return the DB Forge class object or not + * @return object + */ + public function dbforge($db = NULL, $return = FALSE) + { + $CI =& get_instance(); + if ( ! is_object($db) OR ! ($db instanceof CI_DB)) + { + class_exists('CI_DB', FALSE) OR $this->database(); + $db =& $CI->db; + } + + require_once(BASEPATH.'database/DB_forge.php'); + require_once(BASEPATH.'database/drivers/'.$db->dbdriver.'/'.$db->dbdriver.'_forge.php'); + + if ( ! empty($db->subdriver)) + { + $driver_path = BASEPATH.'database/drivers/'.$db->dbdriver.'/subdrivers/'.$db->dbdriver.'_'.$db->subdriver.'_forge.php'; + if (file_exists($driver_path)) + { + require_once($driver_path); + $class = 'CI_DB_'.$db->dbdriver.'_'.$db->subdriver.'_forge'; + } + } + else + { + $class = 'CI_DB_'.$db->dbdriver.'_forge'; + } + + if ($return === TRUE) + { + return new $class($db); + } + + $CI->dbforge = new $class($db); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * View Loader + * + * Loads "view" files. + * + * @param string $view View name + * @param array $vars An associative array of data + * to be extracted for use in the view + * @param bool $return Whether to return the view output + * or leave it to the Output class + * @return object|string + */ + public function view($view, $vars = array(), $return = FALSE) + { + return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return)); + } + + // -------------------------------------------------------------------- + + /** + * Generic File Loader + * + * @param string $path File path + * @param bool $return Whether to return the file output + * @return object|string + */ + public function file($path, $return = FALSE) + { + return $this->_ci_load(array('_ci_path' => $path, '_ci_return' => $return)); + } + + // -------------------------------------------------------------------- + + /** + * Set Variables + * + * Once variables are set they become available within + * the controller class and its "view" files. + * + * @param array|object|string $vars + * An associative array or object containing values + * to be set, or a value's name if string + * @param string $val Value to set, only used if $vars is a string + * @return object + */ + public function vars($vars, $val = '') + { + $vars = is_string($vars) + ? array($vars => $val) + : $this->_ci_prepare_view_vars($vars); + + foreach ($vars as $key => $val) + { + $this->_ci_cached_vars[$key] = $val; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Clear Cached Variables + * + * Clears the cached variables. + * + * @return CI_Loader + */ + public function clear_vars() + { + $this->_ci_cached_vars = array(); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get Variable + * + * Check if a variable is set and retrieve it. + * + * @param string $key Variable name + * @return mixed The variable or NULL if not found + */ + public function get_var($key) + { + return isset($this->_ci_cached_vars[$key]) ? $this->_ci_cached_vars[$key] : NULL; + } + + // -------------------------------------------------------------------- + + /** + * Get Variables + * + * Retrieves all loaded variables. + * + * @return array + */ + public function get_vars() + { + return $this->_ci_cached_vars; + } + + // -------------------------------------------------------------------- + + /** + * Helper Loader + * + * @param string|string[] $helpers Helper name(s) + * @return object + */ + public function helper($helpers = array()) + { + is_array($helpers) OR $helpers = array($helpers); + foreach ($helpers as &$helper) + { + $filename = basename($helper); + $filepath = ($filename === $helper) ? '' : substr($helper, 0, strlen($helper) - strlen($filename)); + $filename = strtolower(preg_replace('#(_helper)?(\.php)?$#i', '', $filename)).'_helper'; + $helper = $filepath.$filename; + + if (isset($this->_ci_helpers[$helper])) + { + continue; + } + + // Is this a helper extension request? + $ext_helper = config_item('subclass_prefix').$filename; + $ext_loaded = FALSE; + foreach ($this->_ci_helper_paths as $path) + { + if (file_exists($path.'helpers/'.$ext_helper.'.php')) + { + include_once($path.'helpers/'.$ext_helper.'.php'); + $ext_loaded = TRUE; + } + } + + // If we have loaded extensions - check if the base one is here + if ($ext_loaded === TRUE) + { + $base_helper = BASEPATH.'helpers/'.$helper.'.php'; + if ( ! file_exists($base_helper)) + { + show_error('Unable to load the requested file: helpers/'.$helper.'.php'); + } + + include_once($base_helper); + $this->_ci_helpers[$helper] = TRUE; + log_message('info', 'Helper loaded: '.$helper); + continue; + } + + // No extensions found ... try loading regular helpers and/or overrides + foreach ($this->_ci_helper_paths as $path) + { + if (file_exists($path.'helpers/'.$helper.'.php')) + { + include_once($path.'helpers/'.$helper.'.php'); + + $this->_ci_helpers[$helper] = TRUE; + log_message('info', 'Helper loaded: '.$helper); + break; + } + } + + // unable to load the helper + if ( ! isset($this->_ci_helpers[$helper])) + { + show_error('Unable to load the requested file: helpers/'.$helper.'.php'); + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Load Helpers + * + * An alias for the helper() method in case the developer has + * written the plural form of it. + * + * @uses CI_Loader::helper() + * @param string|string[] $helpers Helper name(s) + * @return object + */ + public function helpers($helpers = array()) + { + return $this->helper($helpers); + } + + // -------------------------------------------------------------------- + + /** + * Language Loader + * + * Loads language files. + * + * @param string|string[] $files List of language file names to load + * @param string Language name + * @return object + */ + public function language($files, $lang = '') + { + get_instance()->lang->load($files, $lang); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Config Loader + * + * Loads a config file (an alias for CI_Config::load()). + * + * @uses CI_Config::load() + * @param string $file Configuration file name + * @param bool $use_sections Whether configuration values should be loaded into their own section + * @param bool $fail_gracefully Whether to just return FALSE or display an error message + * @return bool TRUE if the file was loaded correctly or FALSE on failure + */ + public function config($file, $use_sections = FALSE, $fail_gracefully = FALSE) + { + return get_instance()->config->load($file, $use_sections, $fail_gracefully); + } + + // -------------------------------------------------------------------- + + /** + * Driver Loader + * + * Loads a driver library. + * + * @param string|string[] $library Driver name(s) + * @param array $params Optional parameters to pass to the driver + * @param string $object_name An optional object name to assign to + * + * @return object|bool Object or FALSE on failure if $library is a string + * and $object_name is set. CI_Loader instance otherwise. + */ + public function driver($library, $params = NULL, $object_name = NULL) + { + if (is_array($library)) + { + foreach ($library as $key => $value) + { + if (is_int($key)) + { + $this->driver($value, $params); + } + else + { + $this->driver($key, $params, $value); + } + } + + return $this; + } + elseif (empty($library)) + { + return FALSE; + } + + if ( ! class_exists('CI_Driver_Library', FALSE)) + { + // We aren't instantiating an object here, just making the base class available + require BASEPATH.'libraries/Driver.php'; + } + + // We can save the loader some time since Drivers will *always* be in a subfolder, + // and typically identically named to the library + if ( ! strpos($library, '/')) + { + $library = ucfirst($library).'/'.$library; + } + + return $this->library($library, $params, $object_name); + } + + // -------------------------------------------------------------------- + + /** + * Add Package Path + * + * Prepends a parent path to the library, model, helper and config + * path arrays. + * + * @see CI_Loader::$_ci_library_paths + * @see CI_Loader::$_ci_model_paths + * @see CI_Loader::$_ci_helper_paths + * @see CI_Config::$_config_paths + * + * @param string $path Path to add + * @param bool $view_cascade (default: TRUE) + * @return object + */ + public function add_package_path($path, $view_cascade = TRUE) + { + $path = rtrim($path, '/').'/'; + + array_unshift($this->_ci_library_paths, $path); + array_unshift($this->_ci_model_paths, $path); + array_unshift($this->_ci_helper_paths, $path); + + $this->_ci_view_paths = array($path.'views/' => $view_cascade) + $this->_ci_view_paths; + + // Add config file path + $config =& $this->_ci_get_component('config'); + $config->_config_paths[] = $path; + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get Package Paths + * + * Return a list of all package paths. + * + * @param bool $include_base Whether to include BASEPATH (default: FALSE) + * @return array + */ + public function get_package_paths($include_base = FALSE) + { + return ($include_base === TRUE) ? $this->_ci_library_paths : $this->_ci_model_paths; + } + + // -------------------------------------------------------------------- + + /** + * Remove Package Path + * + * Remove a path from the library, model, helper and/or config + * path arrays if it exists. If no path is provided, the most recently + * added path will be removed removed. + * + * @param string $path Path to remove + * @return object + */ + public function remove_package_path($path = '') + { + $config =& $this->_ci_get_component('config'); + + if ($path === '') + { + array_shift($this->_ci_library_paths); + array_shift($this->_ci_model_paths); + array_shift($this->_ci_helper_paths); + array_shift($this->_ci_view_paths); + array_pop($config->_config_paths); + } + else + { + $path = rtrim($path, '/').'/'; + foreach (array('_ci_library_paths', '_ci_model_paths', '_ci_helper_paths') as $var) + { + if (($key = array_search($path, $this->{$var})) !== FALSE) + { + unset($this->{$var}[$key]); + } + } + + if (isset($this->_ci_view_paths[$path.'views/'])) + { + unset($this->_ci_view_paths[$path.'views/']); + } + + if (($key = array_search($path, $config->_config_paths)) !== FALSE) + { + unset($config->_config_paths[$key]); + } + } + + // make sure the application default paths are still in the array + $this->_ci_library_paths = array_unique(array_merge($this->_ci_library_paths, array(APPPATH, BASEPATH))); + $this->_ci_helper_paths = array_unique(array_merge($this->_ci_helper_paths, array(APPPATH, BASEPATH))); + $this->_ci_model_paths = array_unique(array_merge($this->_ci_model_paths, array(APPPATH))); + $this->_ci_view_paths = array_merge($this->_ci_view_paths, array(APPPATH.'views/' => TRUE)); + $config->_config_paths = array_unique(array_merge($config->_config_paths, array(APPPATH))); + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Internal CI Data Loader + * + * Used to load views and files. + * + * Variables are prefixed with _ci_ to avoid symbol collision with + * variables made available to view files. + * + * @used-by CI_Loader::view() + * @used-by CI_Loader::file() + * @param array $_ci_data Data to load + * @return object + */ + protected function _ci_load($_ci_data) + { + // Set the default data variables + foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val) + { + $$_ci_val = isset($_ci_data[$_ci_val]) ? $_ci_data[$_ci_val] : FALSE; + } + + $file_exists = FALSE; + + // Set the path to the requested file + if (is_string($_ci_path) && $_ci_path !== '') + { + $_ci_x = explode('/', $_ci_path); + $_ci_file = end($_ci_x); + } + else + { + $_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION); + $_ci_file = ($_ci_ext === '') ? $_ci_view.'.php' : $_ci_view; + + foreach ($this->_ci_view_paths as $_ci_view_file => $cascade) + { + if (file_exists($_ci_view_file.$_ci_file)) + { + $_ci_path = $_ci_view_file.$_ci_file; + $file_exists = TRUE; + break; + } + + if ( ! $cascade) + { + break; + } + } + } + + if ( ! $file_exists && ! file_exists($_ci_path)) + { + show_error('Unable to load the requested file: '.$_ci_file); + } + + // This allows anything loaded using $this->load (views, files, etc.) + // to become accessible from within the Controller and Model functions. + $_ci_CI =& get_instance(); + foreach (get_object_vars($_ci_CI) as $_ci_key => $_ci_var) + { + if ( ! isset($this->$_ci_key)) + { + $this->$_ci_key =& $_ci_CI->$_ci_key; + } + } + + /* + * Extract and cache variables + * + * You can either set variables using the dedicated $this->load->vars() + * function or via the second parameter of this function. We'll merge + * the two types and cache them so that views that are embedded within + * other views can have access to these variables. + */ + empty($_ci_vars) OR $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars); + extract($this->_ci_cached_vars); + + /* + * Buffer the output + * + * We buffer the output for two reasons: + * 1. Speed. You get a significant speed boost. + * 2. So that the final rendered template can be post-processed by + * the output class. Why do we need post processing? For one thing, + * in order to show the elapsed page load time. Unless we can + * intercept the content right before it's sent to the browser and + * then stop the timer it won't be accurate. + */ + ob_start(); + + // If the PHP installation does not support short tags we'll + // do a little string replacement, changing the short tags + // to standard PHP echo statements. + if ( ! is_php('5.4') && ! ini_get('short_open_tag') && config_item('rewrite_short_tags') === TRUE) + { + echo eval('?>'.preg_replace('/;*\s*\?>/', '; ?>', str_replace(' $this->_ci_ob_level + 1) + { + ob_end_flush(); + } + else + { + $_ci_CI->output->append_output(ob_get_contents()); + @ob_end_clean(); + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Internal CI Library Loader + * + * @used-by CI_Loader::library() + * @uses CI_Loader::_ci_init_library() + * + * @param string $class Class name to load + * @param mixed $params Optional parameters to pass to the class constructor + * @param string $object_name Optional object name to assign to + * @return void + */ + protected function _ci_load_library($class, $params = NULL, $object_name = NULL) + { + // Get the class name, and while we're at it trim any slashes. + // The directory path can be included as part of the class name, + // but we don't want a leading slash + $class = str_replace('.php', '', trim($class, '/')); + + // Was the path included with the class name? + // We look for a slash to determine this + if (($last_slash = strrpos($class, '/')) !== FALSE) + { + // Extract the path + $subdir = substr($class, 0, ++$last_slash); + + // Get the filename from the path + $class = substr($class, $last_slash); + } + else + { + $subdir = ''; + } + + $class = ucfirst($class); + + // Is this a stock library? There are a few special conditions if so ... + if (file_exists(BASEPATH.'libraries/'.$subdir.$class.'.php')) + { + return $this->_ci_load_stock_library($class, $subdir, $params, $object_name); + } + + // Safety: Was the class already loaded by a previous call? + if (class_exists($class, FALSE)) + { + $property = $object_name; + if (empty($property)) + { + $property = strtolower($class); + isset($this->_ci_varmap[$property]) && $property = $this->_ci_varmap[$property]; + } + + $CI =& get_instance(); + if (isset($CI->$property)) + { + log_message('debug', $class.' class already loaded. Second attempt ignored.'); + return; + } + + return $this->_ci_init_library($class, '', $params, $object_name); + } + + // Let's search for the requested library file and load it. + foreach ($this->_ci_library_paths as $path) + { + // BASEPATH has already been checked for + if ($path === BASEPATH) + { + continue; + } + + $filepath = $path.'libraries/'.$subdir.$class.'.php'; + // Does the file exist? No? Bummer... + if ( ! file_exists($filepath)) + { + continue; + } + + include_once($filepath); + return $this->_ci_init_library($class, '', $params, $object_name); + } + + // One last attempt. Maybe the library is in a subdirectory, but it wasn't specified? + if ($subdir === '') + { + return $this->_ci_load_library($class.'/'.$class, $params, $object_name); + } + + // If we got this far we were unable to find the requested class. + log_message('error', 'Unable to load the requested class: '.$class); + show_error('Unable to load the requested class: '.$class); + } + + // -------------------------------------------------------------------- + + /** + * Internal CI Stock Library Loader + * + * @used-by CI_Loader::_ci_load_library() + * @uses CI_Loader::_ci_init_library() + * + * @param string $library_name Library name to load + * @param string $file_path Path to the library filename, relative to libraries/ + * @param mixed $params Optional parameters to pass to the class constructor + * @param string $object_name Optional object name to assign to + * @return void + */ + protected function _ci_load_stock_library($library_name, $file_path, $params, $object_name) + { + $prefix = 'CI_'; + + if (class_exists($prefix.$library_name, FALSE)) + { + if (class_exists(config_item('subclass_prefix').$library_name, FALSE)) + { + $prefix = config_item('subclass_prefix'); + } + + $property = $object_name; + if (empty($property)) + { + $property = strtolower($library_name); + isset($this->_ci_varmap[$property]) && $property = $this->_ci_varmap[$property]; + } + + $CI =& get_instance(); + if ( ! isset($CI->$property)) + { + return $this->_ci_init_library($library_name, $prefix, $params, $object_name); + } + + log_message('debug', $library_name.' class already loaded. Second attempt ignored.'); + return; + } + + $paths = $this->_ci_library_paths; + array_pop($paths); // BASEPATH + array_pop($paths); // APPPATH (needs to be the first path checked) + array_unshift($paths, APPPATH); + + foreach ($paths as $path) + { + if (file_exists($path = $path.'libraries/'.$file_path.$library_name.'.php')) + { + // Override + include_once($path); + if (class_exists($prefix.$library_name, FALSE)) + { + return $this->_ci_init_library($library_name, $prefix, $params, $object_name); + } + + log_message('debug', $path.' exists, but does not declare '.$prefix.$library_name); + } + } + + include_once(BASEPATH.'libraries/'.$file_path.$library_name.'.php'); + + // Check for extensions + $subclass = config_item('subclass_prefix').$library_name; + foreach ($paths as $path) + { + if (file_exists($path = $path.'libraries/'.$file_path.$subclass.'.php')) + { + include_once($path); + if (class_exists($subclass, FALSE)) + { + $prefix = config_item('subclass_prefix'); + break; + } + + log_message('debug', $path.' exists, but does not declare '.$subclass); + } + } + + return $this->_ci_init_library($library_name, $prefix, $params, $object_name); + } + + // -------------------------------------------------------------------- + + /** + * Internal CI Library Instantiator + * + * @used-by CI_Loader::_ci_load_stock_library() + * @used-by CI_Loader::_ci_load_library() + * + * @param string $class Class name + * @param string $prefix Class name prefix + * @param array|null|bool $config Optional configuration to pass to the class constructor: + * FALSE to skip; + * NULL to search in config paths; + * array containing configuration data + * @param string $object_name Optional object name to assign to + * @return void + */ + protected function _ci_init_library($class, $prefix, $config = FALSE, $object_name = NULL) + { + // Is there an associated config file for this class? Note: these should always be lowercase + if ($config === NULL) + { + // Fetch the config paths containing any package paths + $config_component = $this->_ci_get_component('config'); + + if (is_array($config_component->_config_paths)) + { + $found = FALSE; + foreach ($config_component->_config_paths as $path) + { + // We test for both uppercase and lowercase, for servers that + // are case-sensitive with regard to file names. Load global first, + // override with environment next + if (file_exists($path.'config/'.strtolower($class).'.php')) + { + include($path.'config/'.strtolower($class).'.php'); + $found = TRUE; + } + elseif (file_exists($path.'config/'.ucfirst(strtolower($class)).'.php')) + { + include($path.'config/'.ucfirst(strtolower($class)).'.php'); + $found = TRUE; + } + + if (file_exists($path.'config/'.ENVIRONMENT.'/'.strtolower($class).'.php')) + { + include($path.'config/'.ENVIRONMENT.'/'.strtolower($class).'.php'); + $found = TRUE; + } + elseif (file_exists($path.'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php')) + { + include($path.'config/'.ENVIRONMENT.'/'.ucfirst(strtolower($class)).'.php'); + $found = TRUE; + } + + // Break on the first found configuration, thus package + // files are not overridden by default paths + if ($found === TRUE) + { + break; + } + } + } + } + + $class_name = $prefix.$class; + + // Is the class name valid? + if ( ! class_exists($class_name, FALSE)) + { + log_message('error', 'Non-existent class: '.$class_name); + show_error('Non-existent class: '.$class_name); + } + + // Set the variable name we will assign the class to + // Was a custom class name supplied? If so we'll use it + if (empty($object_name)) + { + $object_name = strtolower($class); + if (isset($this->_ci_varmap[$object_name])) + { + $object_name = $this->_ci_varmap[$object_name]; + } + } + + // Don't overwrite existing properties + $CI =& get_instance(); + if (isset($CI->$object_name)) + { + if ($CI->$object_name instanceof $class_name) + { + log_message('debug', $class_name." has already been instantiated as '".$object_name."'. Second attempt aborted."); + return; + } + + show_error("Resource '".$object_name."' already exists and is not a ".$class_name." instance."); + } + + // Save the class name and object name + $this->_ci_classes[$object_name] = $class; + + // Instantiate the class + $CI->$object_name = isset($config) + ? new $class_name($config) + : new $class_name(); + } + + // -------------------------------------------------------------------- + + /** + * CI Autoloader + * + * Loads component listed in the config/autoload.php file. + * + * @used-by CI_Loader::initialize() + * @return void + */ + protected function _ci_autoloader() + { + if (file_exists(APPPATH.'config/autoload.php')) + { + include(APPPATH.'config/autoload.php'); + } + + if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/autoload.php')) + { + include(APPPATH.'config/'.ENVIRONMENT.'/autoload.php'); + } + + if ( ! isset($autoload)) + { + return; + } + + // Autoload packages + if (isset($autoload['packages'])) + { + foreach ($autoload['packages'] as $package_path) + { + $this->add_package_path($package_path); + } + } + + // Load any custom config file + if (count($autoload['config']) > 0) + { + foreach ($autoload['config'] as $val) + { + $this->config($val); + } + } + + // Autoload helpers and languages + foreach (array('helper', 'language') as $type) + { + if (isset($autoload[$type]) && count($autoload[$type]) > 0) + { + $this->$type($autoload[$type]); + } + } + + // Autoload drivers + if (isset($autoload['drivers'])) + { + $this->driver($autoload['drivers']); + } + + // Load libraries + if (isset($autoload['libraries']) && count($autoload['libraries']) > 0) + { + // Load the database driver. + if (in_array('database', $autoload['libraries'])) + { + $this->database(); + $autoload['libraries'] = array_diff($autoload['libraries'], array('database')); + } + + // Load all other libraries + $this->library($autoload['libraries']); + } + + // Autoload models + if (isset($autoload['model'])) + { + $this->model($autoload['model']); + } + } + + // -------------------------------------------------------------------- + + /** + * Prepare variables for _ci_vars, to be later extract()-ed inside views + * + * Converts objects to associative arrays and filters-out internal + * variable names (i.e. keys prefixed with '_ci_'). + * + * @param mixed $vars + * @return array + */ + protected function _ci_prepare_view_vars($vars) + { + if ( ! is_array($vars)) + { + $vars = is_object($vars) + ? get_object_vars($vars) + : array(); + } + + foreach (array_keys($vars) as $key) + { + if (strncmp($key, '_ci_', 4) === 0) + { + unset($vars[$key]); + } + } + + return $vars; + } + + // -------------------------------------------------------------------- + + /** + * CI Component getter + * + * Get a reference to a specific library or model. + * + * @param string $component Component name + * @return bool + */ + protected function &_ci_get_component($component) + { + $CI =& get_instance(); + return $CI->$component; + } +} diff --git a/system/core/Log.php b/system/core/Log.php new file mode 100644 index 00000000..d443aedb --- /dev/null +++ b/system/core/Log.php @@ -0,0 +1,296 @@ + 1, 'DEBUG' => 2, 'INFO' => 3, 'ALL' => 4); + + /** + * mbstring.func_overload flag + * + * @var bool + */ + protected static $func_overload; + + // -------------------------------------------------------------------- + + /** + * Class constructor + * + * @return void + */ + public function __construct() + { + $config =& get_config(); + + isset(self::$func_overload) OR self::$func_overload = (extension_loaded('mbstring') && ini_get('mbstring.func_overload')); + + $this->_log_path = ($config['log_path'] !== '') ? $config['log_path'] : APPPATH.'logs/'; + $this->_file_ext = (isset($config['log_file_extension']) && $config['log_file_extension'] !== '') + ? ltrim($config['log_file_extension'], '.') : 'php'; + + file_exists($this->_log_path) OR mkdir($this->_log_path, 0755, TRUE); + + if ( ! is_dir($this->_log_path) OR ! is_really_writable($this->_log_path)) + { + $this->_enabled = FALSE; + } + + if (is_numeric($config['log_threshold'])) + { + $this->_threshold = (int) $config['log_threshold']; + } + elseif (is_array($config['log_threshold'])) + { + $this->_threshold = 0; + $this->_threshold_array = array_flip($config['log_threshold']); + } + + if ( ! empty($config['log_date_format'])) + { + $this->_date_fmt = $config['log_date_format']; + } + + if ( ! empty($config['log_file_permissions']) && is_int($config['log_file_permissions'])) + { + $this->_file_permissions = $config['log_file_permissions']; + } + } + + // -------------------------------------------------------------------- + + /** + * Write Log File + * + * Generally this function will be called using the global log_message() function + * + * @param string $level The error level: 'error', 'debug' or 'info' + * @param string $msg The error message + * @return bool + */ + public function write_log($level, $msg) + { + if ($this->_enabled === FALSE) + { + return FALSE; + } + + $level = strtoupper($level); + + if (( ! isset($this->_levels[$level]) OR ($this->_levels[$level] > $this->_threshold)) + && ! isset($this->_threshold_array[$this->_levels[$level]])) + { + return FALSE; + } + + $filepath = $this->_log_path.'log-'.date('Y-m-d').'.'.$this->_file_ext; + $message = ''; + + if ( ! file_exists($filepath)) + { + $newfile = TRUE; + // Only add protection to php files + if ($this->_file_ext === 'php') + { + $message .= "\n\n"; + } + } + + if ( ! $fp = @fopen($filepath, 'ab')) + { + return FALSE; + } + + flock($fp, LOCK_EX); + + // Instantiating DateTime with microseconds appended to initial date is needed for proper support of this format + if (strpos($this->_date_fmt, 'u') !== FALSE) + { + $microtime_full = microtime(TRUE); + $microtime_short = sprintf("%06d", ($microtime_full - floor($microtime_full)) * 1000000); + $date = new DateTime(date('Y-m-d H:i:s.'.$microtime_short, $microtime_full)); + $date = $date->format($this->_date_fmt); + } + else + { + $date = date($this->_date_fmt); + } + + $message .= $this->_format_line($level, $date, $msg); + + for ($written = 0, $length = self::strlen($message); $written < $length; $written += $result) + { + if (($result = fwrite($fp, self::substr($message, $written))) === FALSE) + { + break; + } + } + + flock($fp, LOCK_UN); + fclose($fp); + + if (isset($newfile) && $newfile === TRUE) + { + chmod($filepath, $this->_file_permissions); + } + + return is_int($result); + } + + // -------------------------------------------------------------------- + + /** + * Format the log line. + * + * This is for extensibility of log formatting + * If you want to change the log format, extend the CI_Log class and override this method + * + * @param string $level The error level + * @param string $date Formatted date string + * @param string $message The log message + * @return string Formatted log line with a new line character '\n' at the end + */ + protected function _format_line($level, $date, $message) + { + return $level.' - '.$date.' --> '.$message."\n"; + } + + // -------------------------------------------------------------------- + + /** + * Byte-safe strlen() + * + * @param string $str + * @return int + */ + protected static function strlen($str) + { + return (self::$func_overload) + ? mb_strlen($str, '8bit') + : strlen($str); + } + + // -------------------------------------------------------------------- + + /** + * Byte-safe substr() + * + * @param string $str + * @param int $start + * @param int $length + * @return string + */ + protected static function substr($str, $start, $length = NULL) + { + if (self::$func_overload) + { + // mb_substr($str, $start, null, '8bit') returns an empty + // string on PHP 5.3 + isset($length) OR $length = ($start >= 0 ? self::strlen($str) - $start : -$start); + return mb_substr($str, $start, $length, '8bit'); + } + + return isset($length) + ? substr($str, $start, $length) + : substr($str, $start); + } +} diff --git a/system/Filters/Exceptions/FilterException.php b/system/core/Model.php similarity index 50% rename from system/Filters/Exceptions/FilterException.php rename to system/core/Model.php index 43e93cfc..c809e7b8 100644 --- a/system/Filters/Exceptions/FilterException.php +++ b/system/core/Model.php @@ -1,5 +1,4 @@ $key; } + } diff --git a/system/core/Output.php b/system/core/Output.php new file mode 100644 index 00000000..a3155fec --- /dev/null +++ b/system/core/Output.php @@ -0,0 +1,842 @@ +_zlib_oc = (bool) ini_get('zlib.output_compression'); + $this->_compress_output = ( + $this->_zlib_oc === FALSE + && config_item('compress_output') === TRUE + && extension_loaded('zlib') + ); + + isset(self::$func_overload) OR self::$func_overload = (extension_loaded('mbstring') && ini_get('mbstring.func_overload')); + + // Get mime types for later + $this->mimes =& get_mimes(); + + log_message('info', 'Output Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Get Output + * + * Returns the current output string. + * + * @return string + */ + public function get_output() + { + return $this->final_output; + } + + // -------------------------------------------------------------------- + + /** + * Set Output + * + * Sets the output string. + * + * @param string $output Output data + * @return CI_Output + */ + public function set_output($output) + { + $this->final_output = $output; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Append Output + * + * Appends data onto the output string. + * + * @param string $output Data to append + * @return CI_Output + */ + public function append_output($output) + { + $this->final_output .= $output; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Set Header + * + * Lets you set a server header which will be sent with the final output. + * + * Note: If a file is cached, headers will not be sent. + * @todo We need to figure out how to permit headers to be cached. + * + * @param string $header Header + * @param bool $replace Whether to replace the old header value, if already set + * @return CI_Output + */ + public function set_header($header, $replace = TRUE) + { + // If zlib.output_compression is enabled it will compress the output, + // but it will not modify the content-length header to compensate for + // the reduction, causing the browser to hang waiting for more data. + // We'll just skip content-length in those cases. + if ($this->_zlib_oc && strncasecmp($header, 'content-length', 14) === 0) + { + return $this; + } + + $this->headers[] = array($header, $replace); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Set Content-Type Header + * + * @param string $mime_type Extension of the file we're outputting + * @param string $charset Character set (default: NULL) + * @return CI_Output + */ + public function set_content_type($mime_type, $charset = NULL) + { + if (strpos($mime_type, '/') === FALSE) + { + $extension = ltrim($mime_type, '.'); + + // Is this extension supported? + if (isset($this->mimes[$extension])) + { + $mime_type =& $this->mimes[$extension]; + + if (is_array($mime_type)) + { + $mime_type = current($mime_type); + } + } + } + + $this->mime_type = $mime_type; + + if (empty($charset)) + { + $charset = config_item('charset'); + } + + $header = 'Content-Type: '.$mime_type + .(empty($charset) ? '' : '; charset='.$charset); + + $this->headers[] = array($header, TRUE); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get Current Content-Type Header + * + * @return string 'text/html', if not already set + */ + public function get_content_type() + { + for ($i = 0, $c = count($this->headers); $i < $c; $i++) + { + if (sscanf($this->headers[$i][0], 'Content-Type: %[^;]', $content_type) === 1) + { + return $content_type; + } + } + + return 'text/html'; + } + + // -------------------------------------------------------------------- + + /** + * Get Header + * + * @param string $header + * @return string + */ + public function get_header($header) + { + // Combine headers already sent with our batched headers + $headers = array_merge( + // We only need [x][0] from our multi-dimensional array + array_map('array_shift', $this->headers), + headers_list() + ); + + if (empty($headers) OR empty($header)) + { + return NULL; + } + + // Count backwards, in order to get the last matching header + for ($c = count($headers) - 1; $c > -1; $c--) + { + if (strncasecmp($header, $headers[$c], $l = self::strlen($header)) === 0) + { + return trim(self::substr($headers[$c], $l+1)); + } + } + + return NULL; + } + + // -------------------------------------------------------------------- + + /** + * Set HTTP Status Header + * + * As of version 1.7.2, this is an alias for common function + * set_status_header(). + * + * @param int $code Status code (default: 200) + * @param string $text Optional message + * @return CI_Output + */ + public function set_status_header($code = 200, $text = '') + { + set_status_header($code, $text); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Enable/disable Profiler + * + * @param bool $val TRUE to enable or FALSE to disable + * @return CI_Output + */ + public function enable_profiler($val = TRUE) + { + $this->enable_profiler = is_bool($val) ? $val : TRUE; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Set Profiler Sections + * + * Allows override of default/config settings for + * Profiler section display. + * + * @param array $sections Profiler sections + * @return CI_Output + */ + public function set_profiler_sections($sections) + { + if (isset($sections['query_toggle_count'])) + { + $this->_profiler_sections['query_toggle_count'] = (int) $sections['query_toggle_count']; + unset($sections['query_toggle_count']); + } + + foreach ($sections as $section => $enable) + { + $this->_profiler_sections[$section] = ($enable !== FALSE); + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Set Cache + * + * @param int $time Cache expiration time in minutes + * @return CI_Output + */ + public function cache($time) + { + $this->cache_expiration = is_numeric($time) ? $time : 0; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Display Output + * + * Processes and sends finalized output data to the browser along + * with any server headers and profile data. It also stops benchmark + * timers so the page rendering speed and memory usage can be shown. + * + * Note: All "view" data is automatically put into $this->final_output + * by controller class. + * + * @uses CI_Output::$final_output + * @param string $output Output data override + * @return void + */ + public function _display($output = '') + { + // Note: We use load_class() because we can't use $CI =& get_instance() + // since this function is sometimes called by the caching mechanism, + // which happens before the CI super object is available. + $BM =& load_class('Benchmark', 'core'); + $CFG =& load_class('Config', 'core'); + + // Grab the super object if we can. + if (class_exists('CI_Controller', FALSE)) + { + $CI =& get_instance(); + } + + // -------------------------------------------------------------------- + + // Set the output data + if ($output === '') + { + $output =& $this->final_output; + } + + // -------------------------------------------------------------------- + + // Do we need to write a cache file? Only if the controller does not have its + // own _output() method and we are not dealing with a cache file, which we + // can determine by the existence of the $CI object above + if ($this->cache_expiration > 0 && isset($CI) && ! method_exists($CI, '_output')) + { + $this->_write_cache($output); + } + + // -------------------------------------------------------------------- + + // Parse out the elapsed time and memory usage, + // then swap the pseudo-variables with the data + + $elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end'); + + if ($this->parse_exec_vars === TRUE) + { + $memory = round(memory_get_usage() / 1024 / 1024, 2).'MB'; + $output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output); + } + + // -------------------------------------------------------------------- + + // Is compression requested? + if (isset($CI) // This means that we're not serving a cache file, if we were, it would already be compressed + && $this->_compress_output === TRUE + && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) + { + ob_start('ob_gzhandler'); + } + + // -------------------------------------------------------------------- + + // Are there any server headers to send? + if (count($this->headers) > 0) + { + foreach ($this->headers as $header) + { + @header($header[0], $header[1]); + } + } + + // -------------------------------------------------------------------- + + // Does the $CI object exist? + // If not we know we are dealing with a cache file so we'll + // simply echo out the data and exit. + if ( ! isset($CI)) + { + if ($this->_compress_output === TRUE) + { + if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) + { + header('Content-Encoding: gzip'); + header('Content-Length: '.self::strlen($output)); + } + else + { + // User agent doesn't support gzip compression, + // so we'll have to decompress our cache + $output = gzinflate(self::substr($output, 10, -8)); + } + } + + echo $output; + log_message('info', 'Final output sent to browser'); + log_message('debug', 'Total execution time: '.$elapsed); + return; + } + + // -------------------------------------------------------------------- + + // Do we need to generate profile data? + // If so, load the Profile class and run it. + if ($this->enable_profiler === TRUE) + { + $CI->load->library('profiler'); + if ( ! empty($this->_profiler_sections)) + { + $CI->profiler->set_sections($this->_profiler_sections); + } + + // If the output data contains closing and tags + // we will remove them and add them back after we insert the profile data + $output = preg_replace('|.*?|is', '', $output, -1, $count).$CI->profiler->run(); + if ($count > 0) + { + $output .= ''; + } + } + + // Does the controller contain a function named _output()? + // If so send the output there. Otherwise, echo it. + if (method_exists($CI, '_output')) + { + $CI->_output($output); + } + else + { + echo $output; // Send it to the browser! + } + + log_message('info', 'Final output sent to browser'); + log_message('debug', 'Total execution time: '.$elapsed); + } + + // -------------------------------------------------------------------- + + /** + * Write Cache + * + * @param string $output Output data to cache + * @return void + */ + public function _write_cache($output) + { + $CI =& get_instance(); + $path = $CI->config->item('cache_path'); + $cache_path = ($path === '') ? APPPATH.'cache/' : $path; + + if ( ! is_dir($cache_path) OR ! is_really_writable($cache_path)) + { + log_message('error', 'Unable to write cache file: '.$cache_path); + return; + } + + $uri = $CI->config->item('base_url') + .$CI->config->item('index_page') + .$CI->uri->uri_string(); + + if (($cache_query_string = $CI->config->item('cache_query_string')) && ! empty($_SERVER['QUERY_STRING'])) + { + if (is_array($cache_query_string)) + { + $uri .= '?'.http_build_query(array_intersect_key($_GET, array_flip($cache_query_string))); + } + else + { + $uri .= '?'.$_SERVER['QUERY_STRING']; + } + } + + $cache_path .= md5($uri); + + if ( ! $fp = @fopen($cache_path, 'w+b')) + { + log_message('error', 'Unable to write cache file: '.$cache_path); + return; + } + + if ( ! flock($fp, LOCK_EX)) + { + log_message('error', 'Unable to secure a file lock for file at: '.$cache_path); + fclose($fp); + return; + } + + // If output compression is enabled, compress the cache + // itself, so that we don't have to do that each time + // we're serving it + if ($this->_compress_output === TRUE) + { + $output = gzencode($output); + + if ($this->get_header('content-type') === NULL) + { + $this->set_content_type($this->mime_type); + } + } + + $expire = time() + ($this->cache_expiration * 60); + + // Put together our serialized info. + $cache_info = serialize(array( + 'expire' => $expire, + 'headers' => $this->headers + )); + + $output = $cache_info.'ENDCI--->'.$output; + + for ($written = 0, $length = self::strlen($output); $written < $length; $written += $result) + { + if (($result = fwrite($fp, self::substr($output, $written))) === FALSE) + { + break; + } + } + + flock($fp, LOCK_UN); + fclose($fp); + + if ( ! is_int($result)) + { + @unlink($cache_path); + log_message('error', 'Unable to write the complete cache content at: '.$cache_path); + return; + } + + chmod($cache_path, 0640); + log_message('debug', 'Cache file written: '.$cache_path); + + // Send HTTP cache-control headers to browser to match file cache settings. + $this->set_cache_header($_SERVER['REQUEST_TIME'], $expire); + } + + // -------------------------------------------------------------------- + + /** + * Update/serve cached output + * + * @uses CI_Config + * @uses CI_URI + * + * @param object &$CFG CI_Config class instance + * @param object &$URI CI_URI class instance + * @return bool TRUE on success or FALSE on failure + */ + public function _display_cache(&$CFG, &$URI) + { + $cache_path = ($CFG->item('cache_path') === '') ? APPPATH.'cache/' : $CFG->item('cache_path'); + + // Build the file path. The file name is an MD5 hash of the full URI + $uri = $CFG->item('base_url').$CFG->item('index_page').$URI->uri_string; + + if (($cache_query_string = $CFG->item('cache_query_string')) && ! empty($_SERVER['QUERY_STRING'])) + { + if (is_array($cache_query_string)) + { + $uri .= '?'.http_build_query(array_intersect_key($_GET, array_flip($cache_query_string))); + } + else + { + $uri .= '?'.$_SERVER['QUERY_STRING']; + } + } + + $filepath = $cache_path.md5($uri); + + if ( ! file_exists($filepath) OR ! $fp = @fopen($filepath, 'rb')) + { + return FALSE; + } + + flock($fp, LOCK_SH); + + $cache = (filesize($filepath) > 0) ? fread($fp, filesize($filepath)) : ''; + + flock($fp, LOCK_UN); + fclose($fp); + + // Look for embedded serialized file info. + if ( ! preg_match('/^(.*)ENDCI--->/', $cache, $match)) + { + return FALSE; + } + + $cache_info = unserialize($match[1]); + $expire = $cache_info['expire']; + + $last_modified = filemtime($filepath); + + // Has the file expired? + if ($_SERVER['REQUEST_TIME'] >= $expire && is_really_writable($cache_path)) + { + // If so we'll delete it. + @unlink($filepath); + log_message('debug', 'Cache file has expired. File deleted.'); + return FALSE; + } + + // Send the HTTP cache control headers + $this->set_cache_header($last_modified, $expire); + + // Add headers from cache file. + foreach ($cache_info['headers'] as $header) + { + $this->set_header($header[0], $header[1]); + } + + // Display the cache + $this->_display(self::substr($cache, self::strlen($match[0]))); + log_message('debug', 'Cache file is current. Sending it to browser.'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Delete cache + * + * @param string $uri URI string + * @return bool + */ + public function delete_cache($uri = '') + { + $CI =& get_instance(); + $cache_path = $CI->config->item('cache_path'); + if ($cache_path === '') + { + $cache_path = APPPATH.'cache/'; + } + + if ( ! is_dir($cache_path)) + { + log_message('error', 'Unable to find cache path: '.$cache_path); + return FALSE; + } + + if (empty($uri)) + { + $uri = $CI->uri->uri_string(); + + if (($cache_query_string = $CI->config->item('cache_query_string')) && ! empty($_SERVER['QUERY_STRING'])) + { + if (is_array($cache_query_string)) + { + $uri .= '?'.http_build_query(array_intersect_key($_GET, array_flip($cache_query_string))); + } + else + { + $uri .= '?'.$_SERVER['QUERY_STRING']; + } + } + } + + $cache_path .= md5($CI->config->item('base_url').$CI->config->item('index_page').ltrim($uri, '/')); + + if ( ! @unlink($cache_path)) + { + log_message('error', 'Unable to delete cache file for '.$uri); + return FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set Cache Header + * + * Set the HTTP headers to match the server-side file cache settings + * in order to reduce bandwidth. + * + * @param int $last_modified Timestamp of when the page was last modified + * @param int $expiration Timestamp of when should the requested page expire from cache + * @return void + */ + public function set_cache_header($last_modified, $expiration) + { + $max_age = $expiration - $_SERVER['REQUEST_TIME']; + + if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $last_modified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) + { + $this->set_status_header(304); + exit; + } + + header('Pragma: public'); + header('Cache-Control: max-age='.$max_age.', public'); + header('Expires: '.gmdate('D, d M Y H:i:s', $expiration).' GMT'); + header('Last-modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT'); + } + + // -------------------------------------------------------------------- + + /** + * Byte-safe strlen() + * + * @param string $str + * @return int + */ + protected static function strlen($str) + { + return (self::$func_overload) + ? mb_strlen($str, '8bit') + : strlen($str); + } + + // -------------------------------------------------------------------- + + /** + * Byte-safe substr() + * + * @param string $str + * @param int $start + * @param int $length + * @return string + */ + protected static function substr($str, $start, $length = NULL) + { + if (self::$func_overload) + { + // mb_substr($str, $start, null, '8bit') returns an empty + // string on PHP 5.3 + isset($length) OR $length = ($start >= 0 ? self::strlen($str) - $start : -$start); + return mb_substr($str, $start, $length, '8bit'); + } + + return isset($length) + ? substr($str, $start, $length) + : substr($str, $start); + } +} diff --git a/system/core/Router.php b/system/core/Router.php new file mode 100644 index 00000000..1abe4c4e --- /dev/null +++ b/system/core/Router.php @@ -0,0 +1,515 @@ +config =& load_class('Config', 'core'); + $this->uri =& load_class('URI', 'core'); + + $this->enable_query_strings = ( ! is_cli() && $this->config->item('enable_query_strings') === TRUE); + + // If a directory override is configured, it has to be set before any dynamic routing logic + is_array($routing) && isset($routing['directory']) && $this->set_directory($routing['directory']); + $this->_set_routing(); + + // Set any routing overrides that may exist in the main index file + if (is_array($routing)) + { + empty($routing['controller']) OR $this->set_class($routing['controller']); + empty($routing['function']) OR $this->set_method($routing['function']); + } + + log_message('info', 'Router Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Set route mapping + * + * Determines what should be served based on the URI request, + * as well as any "routes" that have been set in the routing config file. + * + * @return void + */ + protected function _set_routing() + { + // Load the routes.php file. It would be great if we could + // skip this for enable_query_strings = TRUE, but then + // default_controller would be empty ... + if (file_exists(APPPATH.'config/routes.php')) + { + include(APPPATH.'config/routes.php'); + } + + if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/routes.php')) + { + include(APPPATH.'config/'.ENVIRONMENT.'/routes.php'); + } + + // Validate & get reserved routes + if (isset($route) && is_array($route)) + { + isset($route['default_controller']) && $this->default_controller = $route['default_controller']; + isset($route['translate_uri_dashes']) && $this->translate_uri_dashes = $route['translate_uri_dashes']; + unset($route['default_controller'], $route['translate_uri_dashes']); + $this->routes = $route; + } + + // Are query strings enabled in the config file? Normally CI doesn't utilize query strings + // since URI segments are more search-engine friendly, but they can optionally be used. + // If this feature is enabled, we will gather the directory/class/method a little differently + if ($this->enable_query_strings) + { + // If the directory is set at this time, it means an override exists, so skip the checks + if ( ! isset($this->directory)) + { + $_d = $this->config->item('directory_trigger'); + $_d = isset($_GET[$_d]) ? trim($_GET[$_d], " \t\n\r\0\x0B/") : ''; + + if ($_d !== '') + { + $this->uri->filter_uri($_d); + $this->set_directory($_d); + } + } + + $_c = trim($this->config->item('controller_trigger')); + if ( ! empty($_GET[$_c])) + { + $this->uri->filter_uri($_GET[$_c]); + $this->set_class($_GET[$_c]); + + $_f = trim($this->config->item('function_trigger')); + if ( ! empty($_GET[$_f])) + { + $this->uri->filter_uri($_GET[$_f]); + $this->set_method($_GET[$_f]); + } + + $this->uri->rsegments = array( + 1 => $this->class, + 2 => $this->method + ); + } + else + { + $this->_set_default_controller(); + } + + // Routing rules don't apply to query strings and we don't need to detect + // directories, so we're done here + return; + } + + // Is there anything to parse? + if ($this->uri->uri_string !== '') + { + $this->_parse_routes(); + } + else + { + $this->_set_default_controller(); + } + } + + // -------------------------------------------------------------------- + + /** + * Set request route + * + * Takes an array of URI segments as input and sets the class/method + * to be called. + * + * @used-by CI_Router::_parse_routes() + * @param array $segments URI segments + * @return void + */ + protected function _set_request($segments = array()) + { + $segments = $this->_validate_request($segments); + // If we don't have any segments left - try the default controller; + // WARNING: Directories get shifted out of the segments array! + if (empty($segments)) + { + $this->_set_default_controller(); + return; + } + + if ($this->translate_uri_dashes === TRUE) + { + $segments[0] = str_replace('-', '_', $segments[0]); + if (isset($segments[1])) + { + $segments[1] = str_replace('-', '_', $segments[1]); + } + } + + $this->set_class($segments[0]); + if (isset($segments[1])) + { + $this->set_method($segments[1]); + } + else + { + $segments[1] = 'index'; + } + + array_unshift($segments, NULL); + unset($segments[0]); + $this->uri->rsegments = $segments; + } + + // -------------------------------------------------------------------- + + /** + * Set default controller + * + * @return void + */ + protected function _set_default_controller() + { + if (empty($this->default_controller)) + { + show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.'); + } + + // Is the method being specified? + if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) + { + $method = 'index'; + } + + if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) + { + // This will trigger 404 later + return; + } + + $this->set_class($class); + $this->set_method($method); + + // Assign routed segments, index starting from 1 + $this->uri->rsegments = array( + 1 => $class, + 2 => $method + ); + + log_message('debug', 'No URI present. Default controller set.'); + } + + // -------------------------------------------------------------------- + + /** + * Validate request + * + * Attempts validate the URI request and determine the controller path. + * + * @used-by CI_Router::_set_request() + * @param array $segments URI segments + * @return mixed URI segments + */ + protected function _validate_request($segments) + { + $c = count($segments); + $directory_override = isset($this->directory); + + // Loop through our segments and return as soon as a controller + // is found or when such a directory doesn't exist + while ($c-- > 0) + { + $test = $this->directory + .ucfirst($this->translate_uri_dashes === TRUE ? str_replace('-', '_', $segments[0]) : $segments[0]); + + if ( ! file_exists(APPPATH.'controllers/'.$test.'.php') + && $directory_override === FALSE + && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0]) + ) + { + $this->set_directory(array_shift($segments), TRUE); + continue; + } + + return $segments; + } + + // This means that all segments were actually directories + return $segments; + } + + // -------------------------------------------------------------------- + + /** + * Parse Routes + * + * Matches any routes that may exist in the config/routes.php file + * against the URI to determine if the class/method need to be remapped. + * + * @return void + */ + protected function _parse_routes() + { + // Turn the segment array into a URI string + $uri = implode('/', $this->uri->segments); + + // Get HTTP verb + $http_verb = isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : 'cli'; + + // Loop through the route array looking for wildcards + foreach ($this->routes as $key => $val) + { + // Check if route format is using HTTP verbs + if (is_array($val)) + { + $val = array_change_key_case($val, CASE_LOWER); + if (isset($val[$http_verb])) + { + $val = $val[$http_verb]; + } + else + { + continue; + } + } + + // Convert wildcards to RegEx + $key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key); + + // Does the RegEx match? + if (preg_match('#^'.$key.'$#', $uri, $matches)) + { + // Are we using callbacks to process back-references? + if ( ! is_string($val) && is_callable($val)) + { + // Remove the original string from the matches array. + array_shift($matches); + + // Execute the callback using the values in matches as its parameters. + $val = call_user_func_array($val, $matches); + } + // Are we using the default routing method for back-references? + elseif (strpos($val, '$') !== FALSE && strpos($key, '(') !== FALSE) + { + $val = preg_replace('#^'.$key.'$#', $val, $uri); + } + + $this->_set_request(explode('/', $val)); + return; + } + } + + // If we got this far it means we didn't encounter a + // matching route so we'll set the site default route + $this->_set_request(array_values($this->uri->segments)); + } + + // -------------------------------------------------------------------- + + /** + * Set class name + * + * @param string $class Class name + * @return void + */ + public function set_class($class) + { + $this->class = str_replace(array('/', '.'), '', $class); + } + + // -------------------------------------------------------------------- + + /** + * Fetch the current class + * + * @deprecated 3.0.0 Read the 'class' property instead + * @return string + */ + public function fetch_class() + { + return $this->class; + } + + // -------------------------------------------------------------------- + + /** + * Set method name + * + * @param string $method Method name + * @return void + */ + public function set_method($method) + { + $this->method = $method; + } + + // -------------------------------------------------------------------- + + /** + * Fetch the current method + * + * @deprecated 3.0.0 Read the 'method' property instead + * @return string + */ + public function fetch_method() + { + return $this->method; + } + + // -------------------------------------------------------------------- + + /** + * Set directory name + * + * @param string $dir Directory name + * @param bool $append Whether we're appending rather than setting the full value + * @return void + */ + public function set_directory($dir, $append = FALSE) + { + if ($append !== TRUE OR empty($this->directory)) + { + $this->directory = str_replace('.', '', trim($dir, '/')).'/'; + } + else + { + $this->directory .= str_replace('.', '', trim($dir, '/')).'/'; + } + } + + // -------------------------------------------------------------------- + + /** + * Fetch directory + * + * Feches the sub-directory (if any) that contains the requested + * controller class. + * + * @deprecated 3.0.0 Read the 'directory' property instead + * @return string + */ + public function fetch_directory() + { + return $this->directory; + } + +} diff --git a/system/core/Security.php b/system/core/Security.php new file mode 100644 index 00000000..082ffa96 --- /dev/null +++ b/system/core/Security.php @@ -0,0 +1,1080 @@ +', '<', '>', + "'", '"', '&', '$', '#', + '{', '}', '[', ']', '=', + ';', '?', '%20', '%22', + '%3c', // < + '%253c', // < + '%3e', // > + '%0e', // > + '%28', // ( + '%29', // ) + '%2528', // ( + '%26', // & + '%24', // $ + '%3f', // ? + '%3b', // ; + '%3d' // = + ); + + /** + * Character set + * + * Will be overridden by the constructor. + * + * @var string + */ + public $charset = 'UTF-8'; + + /** + * XSS Hash + * + * Random Hash for protecting URLs. + * + * @var string + */ + protected $_xss_hash; + + /** + * CSRF Hash + * + * Random hash for Cross Site Request Forgery protection cookie + * + * @var string + */ + protected $_csrf_hash; + + /** + * CSRF Expire time + * + * Expiration time for Cross Site Request Forgery protection cookie. + * Defaults to two hours (in seconds). + * + * @var int + */ + protected $_csrf_expire = 7200; + + /** + * CSRF Token name + * + * Token name for Cross Site Request Forgery protection cookie. + * + * @var string + */ + protected $_csrf_token_name = 'ci_csrf_token'; + + /** + * CSRF Cookie name + * + * Cookie name for Cross Site Request Forgery protection cookie. + * + * @var string + */ + protected $_csrf_cookie_name = 'ci_csrf_token'; + + /** + * List of never allowed strings + * + * @var array + */ + protected $_never_allowed_str = array( + 'document.cookie' => '[removed]', + 'document.write' => '[removed]', + '.parentNode' => '[removed]', + '.innerHTML' => '[removed]', + '-moz-binding' => '[removed]', + '' => '-->', + ' '<![CDATA[', + '' => '<comment>', + '<%' => '<%' + ); + + /** + * List of never allowed regex replacements + * + * @var array + */ + protected $_never_allowed_regex = array( + 'javascript\s*:', + '(document|(document\.)?window)\.(location|on\w*)', + 'expression\s*(\(|&\#40;)', // CSS and IE + 'vbscript\s*:', // IE, surprise! + 'wscript\s*:', // IE + 'jscript\s*:', // IE + 'vbs\s*:', // IE + 'Redirect\s+30\d', + "([\"'])?data\s*:[^\\1]*?base64[^\\1]*?,[^\\1]*?\\1?" + ); + + /** + * Class constructor + * + * @return void + */ + public function __construct() + { + // Is CSRF protection enabled? + if (config_item('csrf_protection')) + { + // CSRF config + foreach (array('csrf_expire', 'csrf_token_name', 'csrf_cookie_name') as $key) + { + if (NULL !== ($val = config_item($key))) + { + $this->{'_'.$key} = $val; + } + } + + // Append application specific cookie prefix + if ($cookie_prefix = config_item('cookie_prefix')) + { + $this->_csrf_cookie_name = $cookie_prefix.$this->_csrf_cookie_name; + } + + // Set the CSRF hash + $this->_csrf_set_hash(); + } + + $this->charset = strtoupper(config_item('charset')); + + log_message('info', 'Security Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * CSRF Verify + * + * @return CI_Security + */ + public function csrf_verify() + { + // If it's not a POST request we will set the CSRF cookie + if (strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST') + { + return $this->csrf_set_cookie(); + } + + // Check if URI has been whitelisted from CSRF checks + if ($exclude_uris = config_item('csrf_exclude_uris')) + { + $uri = load_class('URI', 'core'); + foreach ($exclude_uris as $excluded) + { + if (preg_match('#^'.$excluded.'$#i'.(UTF8_ENABLED ? 'u' : ''), $uri->uri_string())) + { + return $this; + } + } + } + + // Check CSRF token validity, but don't error on mismatch just yet - we'll want to regenerate + $valid = isset($_POST[$this->_csrf_token_name], $_COOKIE[$this->_csrf_cookie_name]) + && hash_equals($_POST[$this->_csrf_token_name], $_COOKIE[$this->_csrf_cookie_name]); + + // We kill this since we're done and we don't want to pollute the _POST array + unset($_POST[$this->_csrf_token_name]); + + // Regenerate on every submission? + if (config_item('csrf_regenerate')) + { + // Nothing should last forever + unset($_COOKIE[$this->_csrf_cookie_name]); + $this->_csrf_hash = NULL; + } + + $this->_csrf_set_hash(); + $this->csrf_set_cookie(); + + if ($valid !== TRUE) + { + $this->csrf_show_error(); + } + + log_message('info', 'CSRF token verified'); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * CSRF Set Cookie + * + * @codeCoverageIgnore + * @return CI_Security + */ + public function csrf_set_cookie() + { + $expire = time() + $this->_csrf_expire; + $secure_cookie = (bool) config_item('cookie_secure'); + + if ($secure_cookie && ! is_https()) + { + return FALSE; + } + + setcookie( + $this->_csrf_cookie_name, + $this->_csrf_hash, + $expire, + config_item('cookie_path'), + config_item('cookie_domain'), + $secure_cookie, + config_item('cookie_httponly') + ); + log_message('info', 'CSRF cookie sent'); + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Show CSRF Error + * + * @return void + */ + public function csrf_show_error() + { + show_error('The action you have requested is not allowed.', 403); + } + + // -------------------------------------------------------------------- + + /** + * Get CSRF Hash + * + * @see CI_Security::$_csrf_hash + * @return string CSRF hash + */ + public function get_csrf_hash() + { + return $this->_csrf_hash; + } + + // -------------------------------------------------------------------- + + /** + * Get CSRF Token Name + * + * @see CI_Security::$_csrf_token_name + * @return string CSRF token name + */ + public function get_csrf_token_name() + { + return $this->_csrf_token_name; + } + + // -------------------------------------------------------------------- + + /** + * XSS Clean + * + * Sanitizes data so that Cross Site Scripting Hacks can be + * prevented. This method does a fair amount of work but + * it is extremely thorough, designed to prevent even the + * most obscure XSS attempts. Nothing is ever 100% foolproof, + * of course, but I haven't been able to get anything passed + * the filter. + * + * Note: Should only be used to deal with data upon submission. + * It's not something that should be used for general + * runtime processing. + * + * @link http://channel.bitflux.ch/wiki/XSS_Prevention + * Based in part on some code and ideas from Bitflux. + * + * @link http://ha.ckers.org/xss.html + * To help develop this script I used this great list of + * vulnerabilities along with a few other hacks I've + * harvested from examining vulnerabilities in other programs. + * + * @param string|string[] $str Input data + * @param bool $is_image Whether the input is an image + * @return string + */ + public function xss_clean($str, $is_image = FALSE) + { + // Is the string an array? + if (is_array($str)) + { + foreach ($str as $key => &$value) + { + $str[$key] = $this->xss_clean($value); + } + + return $str; + } + + // Remove Invisible Characters + $str = remove_invisible_characters($str); + + /* + * URL Decode + * + * Just in case stuff like this is submitted: + * + * Google + * + * Note: Use rawurldecode() so it does not remove plus signs + */ + if (stripos($str, '%') !== false) + { + do + { + $oldstr = $str; + $str = rawurldecode($str); + $str = preg_replace_callback('#%(?:\s*[0-9a-f]){2,}#i', array($this, '_urldecodespaces'), $str); + } + while ($oldstr !== $str); + unset($oldstr); + } + + /* + * Convert character entities to ASCII + * + * This permits our tests below to work reliably. + * We only convert entities that are within tags since + * these are the ones that will pose security problems. + */ + $str = preg_replace_callback("/[^a-z0-9>]+[a-z0-9]+=([\'\"]).*?\\1/si", array($this, '_convert_attribute'), $str); + $str = preg_replace_callback('/<\w+.*/si', array($this, '_decode_entity'), $str); + + // Remove Invisible Characters Again! + $str = remove_invisible_characters($str); + + /* + * Convert all tabs to spaces + * + * This prevents strings like this: ja vascript + * NOTE: we deal with spaces between characters later. + * NOTE: preg_replace was found to be amazingly slow here on + * large blocks of data, so we use str_replace. + */ + $str = str_replace("\t", ' ', $str); + + // Capture converted string for later comparison + $converted_string = $str; + + // Remove Strings that are never allowed + $str = $this->_do_never_allowed($str); + + /* + * Makes PHP tags safe + * + * Note: XML tags are inadvertently replaced too: + * + * '), array('<?', '?>'), $str); + } + + /* + * Compact any exploded words + * + * This corrects words like: j a v a s c r i p t + * These words are compacted back to their correct state. + */ + $words = array( + 'javascript', 'expression', 'vbscript', 'jscript', 'wscript', + 'vbs', 'script', 'base64', 'applet', 'alert', 'document', + 'write', 'cookie', 'window', 'confirm', 'prompt', 'eval' + ); + + foreach ($words as $word) + { + $word = implode('\s*', str_split($word)).'\s*'; + + // We only want to do this when it is followed by a non-word character + // That way valid stuff like "dealer to" does not become "dealerto" + $str = preg_replace_callback('#('.substr($word, 0, -3).')(\W)#is', array($this, '_compact_exploded_words'), $str); + } + + /* + * Remove disallowed Javascript in links or img tags + * We used to do some version comparisons and use of stripos(), + * but it is dog slow compared to these simplified non-capturing + * preg_match(), especially if the pattern exists in the string + * + * Note: It was reported that not only space characters, but all in + * the following pattern can be parsed as separators between a tag name + * and its attributes: [\d\s"\'`;,\/\=\(\x00\x0B\x09\x0C] + * ... however, remove_invisible_characters() above already strips the + * hex-encoded ones, so we'll skip them below. + */ + do + { + $original = $str; + + if (preg_match('/]+([^>]*?)(?:>|$)#si', array($this, '_js_link_removal'), $str); + } + + if (preg_match('/]*?)(?:\s?/?>|$)#si', array($this, '_js_img_removal'), $str); + } + + if (preg_match('/script|xss/i', $str)) + { + $str = preg_replace('##si', '[removed]', $str); + } + } + while ($original !== $str); + unset($original); + + /* + * Sanitize naughty HTML elements + * + * If a tag containing any of the words in the list + * below is found, the tag gets converted to entities. + * + * So this: + * Becomes: <blink> + */ + $pattern = '#' + .'<((?/*\s*)((?[a-z0-9]+)(?=[^a-z0-9]|$)|.+)' // tag start and name, followed by a non-tag character + .'[^\s\042\047a-z0-9>/=]*' // a valid attribute character immediately after the tag would count as a separator + // optional attributes + .'(?(?:[\s\042\047/=]*' // non-attribute characters, excluding > (tag close) for obvious reasons + .'[^\s\042\047>/=]+' // attribute characters + // optional attribute-value + .'(?:\s*=' // attribute-value separator + .'(?:[^\s\042\047=><`]+|\s*\042[^\042]*\042|\s*\047[^\047]*\047|\s*(?U:[^\s\042\047=><`]*))' // single, double or non-quoted value + .')?' // end optional attribute-value group + .')*)' // end optional attributes group + .'[^>]*)(?\>)?#isS'; + + // Note: It would be nice to optimize this for speed, BUT + // only matching the naughty elements here results in + // false positives and in turn - vulnerabilities! + do + { + $old_str = $str; + $str = preg_replace_callback($pattern, array($this, '_sanitize_naughty_html'), $str); + } + while ($old_str !== $str); + unset($old_str); + + /* + * Sanitize naughty scripting elements + * + * Similar to above, only instead of looking for + * tags it looks for PHP and JavaScript commands + * that are disallowed. Rather than removing the + * code, it simply converts the parenthesis to entities + * rendering the code un-executable. + * + * For example: eval('some code') + * Becomes: eval('some code') + */ + $str = preg_replace( + '#(alert|prompt|confirm|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', + '\\1\\2(\\3)', + $str + ); + + // Final clean up + // This adds a bit of extra precaution in case + // something got through the above filters + $str = $this->_do_never_allowed($str); + + /* + * Images are Handled in a Special Way + * - Essentially, we want to know that after all of the character + * conversion is done whether any unwanted, likely XSS, code was found. + * If not, we return TRUE, as the image is clean. + * However, if the string post-conversion does not matched the + * string post-removal of XSS, then it fails, as there was unwanted XSS + * code found and removed/changed during processing. + */ + if ($is_image === TRUE) + { + return ($str === $converted_string); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * XSS Hash + * + * Generates the XSS hash if needed and returns it. + * + * @see CI_Security::$_xss_hash + * @return string XSS hash + */ + public function xss_hash() + { + if ($this->_xss_hash === NULL) + { + $rand = $this->get_random_bytes(16); + $this->_xss_hash = ($rand === FALSE) + ? md5(uniqid(mt_rand(), TRUE)) + : bin2hex($rand); + } + + return $this->_xss_hash; + } + + // -------------------------------------------------------------------- + + /** + * Get random bytes + * + * @param int $length Output length + * @return string + */ + public function get_random_bytes($length) + { + if (empty($length) OR ! ctype_digit((string) $length)) + { + return FALSE; + } + + if (function_exists('random_bytes')) + { + try + { + // The cast is required to avoid TypeError + return random_bytes((int) $length); + } + catch (Exception $e) + { + // If random_bytes() can't do the job, we can't either ... + // There's no point in using fallbacks. + log_message('error', $e->getMessage()); + return FALSE; + } + } + + // Unfortunately, none of the following PRNGs is guaranteed to exist ... + if (defined('MCRYPT_DEV_URANDOM') && ($output = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM)) !== FALSE) + { + return $output; + } + + + if (is_readable('/dev/urandom') && ($fp = fopen('/dev/urandom', 'rb')) !== FALSE) + { + // Try not to waste entropy ... + is_php('5.4') && stream_set_chunk_size($fp, $length); + $output = fread($fp, $length); + fclose($fp); + if ($output !== FALSE) + { + return $output; + } + } + + if (function_exists('openssl_random_pseudo_bytes')) + { + return openssl_random_pseudo_bytes($length); + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * HTML Entities Decode + * + * A replacement for html_entity_decode() + * + * The reason we are not using html_entity_decode() by itself is because + * while it is not technically correct to leave out the semicolon + * at the end of an entity most browsers will still interpret the entity + * correctly. html_entity_decode() does not convert entities without + * semicolons, so we are left with our own little solution here. Bummer. + * + * @link http://php.net/html-entity-decode + * + * @param string $str Input + * @param string $charset Character set + * @return string + */ + public function entity_decode($str, $charset = NULL) + { + if (strpos($str, '&') === FALSE) + { + return $str; + } + + static $_entities; + + isset($charset) OR $charset = $this->charset; + $flag = is_php('5.4') + ? ENT_COMPAT | ENT_HTML5 + : ENT_COMPAT; + + if ( ! isset($_entities)) + { + $_entities = array_map('strtolower', get_html_translation_table(HTML_ENTITIES, $flag, $charset)); + + // If we're not on PHP 5.4+, add the possibly dangerous HTML 5 + // entities to the array manually + if ($flag === ENT_COMPAT) + { + $_entities[':'] = ':'; + $_entities['('] = '('; + $_entities[')'] = ')'; + $_entities["\n"] = ' '; + $_entities["\t"] = ' '; + } + } + + do + { + $str_compare = $str; + + // Decode standard entities, avoiding false positives + if (preg_match_all('/&[a-z]{2,}(?![a-z;])/i', $str, $matches)) + { + $replace = array(); + $matches = array_unique(array_map('strtolower', $matches[0])); + foreach ($matches as &$match) + { + if (($char = array_search($match.';', $_entities, TRUE)) !== FALSE) + { + $replace[$match] = $char; + } + } + + $str = str_replace(array_keys($replace), array_values($replace), $str); + } + + // Decode numeric & UTF16 two byte entities + $str = html_entity_decode( + preg_replace('/(&#(?:x0*[0-9a-f]{2,5}(?![0-9a-f;])|(?:0*\d{2,4}(?![0-9;]))))/iS', '$1;', $str), + $flag, + $charset + ); + + if ($flag === ENT_COMPAT) + { + $str = str_replace(array_values($_entities), array_keys($_entities), $str); + } + } + while ($str_compare !== $str); + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Sanitize Filename + * + * @param string $str Input file name + * @param bool $relative_path Whether to preserve paths + * @return string + */ + public function sanitize_filename($str, $relative_path = FALSE) + { + $bad = $this->filename_bad_chars; + + if ( ! $relative_path) + { + $bad[] = './'; + $bad[] = '/'; + } + + $str = remove_invisible_characters($str, FALSE); + + do + { + $old = $str; + $str = str_replace($bad, '', $str); + } + while ($old !== $str); + + return stripslashes($str); + } + + // ---------------------------------------------------------------- + + /** + * Strip Image Tags + * + * @param string $str + * @return string + */ + public function strip_image_tags($str) + { + return preg_replace( + array( + '##i', + '#`]+)).*?\>#i' + ), + '\\2', + $str + ); + } + + // ---------------------------------------------------------------- + + /** + * URL-decode taking spaces into account + * + * @see https://github.com/bcit-ci/CodeIgniter/issues/4877 + * @param array $matches + * @return string + */ + protected function _urldecodespaces($matches) + { + $input = $matches[0]; + $nospaces = preg_replace('#\s+#', '', $input); + return ($nospaces === $input) + ? $input + : rawurldecode($nospaces); + } + + // ---------------------------------------------------------------- + + /** + * Compact Exploded Words + * + * Callback method for xss_clean() to remove whitespace from + * things like 'j a v a s c r i p t'. + * + * @used-by CI_Security::xss_clean() + * @param array $matches + * @return string + */ + protected function _compact_exploded_words($matches) + { + return preg_replace('/\s+/s', '', $matches[1]).$matches[2]; + } + + // -------------------------------------------------------------------- + + /** + * Sanitize Naughty HTML + * + * Callback method for xss_clean() to remove naughty HTML elements. + * + * @used-by CI_Security::xss_clean() + * @param array $matches + * @return string + */ + protected function _sanitize_naughty_html($matches) + { + static $naughty_tags = array( + 'alert', 'area', 'prompt', 'confirm', 'applet', 'audio', 'basefont', 'base', 'behavior', 'bgsound', + 'blink', 'body', 'embed', 'expression', 'form', 'frameset', 'frame', 'head', 'html', 'ilayer', + 'iframe', 'input', 'button', 'select', 'isindex', 'layer', 'link', 'meta', 'keygen', 'object', + 'plaintext', 'style', 'script', 'textarea', 'title', 'math', 'video', 'svg', 'xml', 'xss' + ); + + static $evil_attributes = array( + 'on\w+', 'style', 'xmlns', 'formaction', 'form', 'xlink:href', 'FSCommand', 'seekSegmentTime' + ); + + // First, escape unclosed tags + if (empty($matches['closeTag'])) + { + return '<'.$matches[1]; + } + // Is the element that we caught naughty? If so, escape it + elseif (in_array(strtolower($matches['tagName']), $naughty_tags, TRUE)) + { + return '<'.$matches[1].'>'; + } + // For other tags, see if their attributes are "evil" and strip those + elseif (isset($matches['attributes'])) + { + // We'll store the already fitlered attributes here + $attributes = array(); + + // Attribute-catching pattern + $attributes_pattern = '#' + .'(?[^\s\042\047>/=]+)' // attribute characters + // optional attribute-value + .'(?:\s*=(?[^\s\042\047=><`]+|\s*\042[^\042]*\042|\s*\047[^\047]*\047|\s*(?U:[^\s\042\047=><`]*)))' // attribute-value separator + .'#i'; + + // Blacklist pattern for evil attribute names + $is_evil_pattern = '#^('.implode('|', $evil_attributes).')$#i'; + + // Each iteration filters a single attribute + do + { + // Strip any non-alpha characters that may precede an attribute. + // Browsers often parse these incorrectly and that has been a + // of numerous XSS issues we've had. + $matches['attributes'] = preg_replace('#^[^a-z]+#i', '', $matches['attributes']); + + if ( ! preg_match($attributes_pattern, $matches['attributes'], $attribute, PREG_OFFSET_CAPTURE)) + { + // No (valid) attribute found? Discard everything else inside the tag + break; + } + + if ( + // Is it indeed an "evil" attribute? + preg_match($is_evil_pattern, $attribute['name'][0]) + // Or does it have an equals sign, but no value and not quoted? Strip that too! + OR (trim($attribute['value'][0]) === '') + ) + { + $attributes[] = 'xss=removed'; + } + else + { + $attributes[] = $attribute[0][0]; + } + + $matches['attributes'] = substr($matches['attributes'], $attribute[0][1] + strlen($attribute[0][0])); + } + while ($matches['attributes'] !== ''); + + $attributes = empty($attributes) + ? '' + : ' '.implode(' ', $attributes); + return '<'.$matches['slash'].$matches['tagName'].$attributes.'>'; + } + + return $matches[0]; + } + + // -------------------------------------------------------------------- + + /** + * JS Link Removal + * + * Callback method for xss_clean() to sanitize links. + * + * This limits the PCRE backtracks, making it more performance friendly + * and prevents PREG_BACKTRACK_LIMIT_ERROR from being triggered in + * PHP 5.2+ on link-heavy strings. + * + * @used-by CI_Security::xss_clean() + * @param array $match + * @return string + */ + protected function _js_link_removal($match) + { + return str_replace( + $match[1], + preg_replace( + '#href=.*?(?:(?:alert|prompt|confirm)(?:\(|&\#40;)|javascript:|livescript:|mocha:|charset=|window\.|document\.|\.cookie|_filter_attributes($match[1]) + ), + $match[0] + ); + } + + // -------------------------------------------------------------------- + + /** + * JS Image Removal + * + * Callback method for xss_clean() to sanitize image tags. + * + * This limits the PCRE backtracks, making it more performance friendly + * and prevents PREG_BACKTRACK_LIMIT_ERROR from being triggered in + * PHP 5.2+ on image tag heavy strings. + * + * @used-by CI_Security::xss_clean() + * @param array $match + * @return string + */ + protected function _js_img_removal($match) + { + return str_replace( + $match[1], + preg_replace( + '#src=.*?(?:(?:alert|prompt|confirm|eval)(?:\(|&\#40;)|javascript:|livescript:|mocha:|charset=|window\.|document\.|\.cookie|_filter_attributes($match[1]) + ), + $match[0] + ); + } + + // -------------------------------------------------------------------- + + /** + * Attribute Conversion + * + * @used-by CI_Security::xss_clean() + * @param array $match + * @return string + */ + protected function _convert_attribute($match) + { + return str_replace(array('>', '<', '\\'), array('>', '<', '\\\\'), $match[0]); + } + + // -------------------------------------------------------------------- + + /** + * Filter Attributes + * + * Filters tag attributes for consistency and safety. + * + * @used-by CI_Security::_js_img_removal() + * @used-by CI_Security::_js_link_removal() + * @param string $str + * @return string + */ + protected function _filter_attributes($str) + { + $out = ''; + if (preg_match_all('#\s*[a-z\-]+\s*=\s*(\042|\047)([^\\1]*?)\\1#is', $str, $matches)) + { + foreach ($matches[0] as $match) + { + $out .= preg_replace('#/\*.*?\*/#s', '', $match); + } + } + + return $out; + } + + // -------------------------------------------------------------------- + + /** + * HTML Entity Decode Callback + * + * @used-by CI_Security::xss_clean() + * @param array $match + * @return string + */ + protected function _decode_entity($match) + { + // Protect GET variables in URLs + // 901119URL5918AMP18930PROTECT8198 + $match = preg_replace('|\&([a-z\_0-9\-]+)\=([a-z\_0-9\-/]+)|i', $this->xss_hash().'\\1=\\2', $match[0]); + + // Decode, then un-protect URL GET vars + return str_replace( + $this->xss_hash(), + '&', + $this->entity_decode($match, $this->charset) + ); + } + + // -------------------------------------------------------------------- + + /** + * Do Never Allowed + * + * @used-by CI_Security::xss_clean() + * @param string + * @return string + */ + protected function _do_never_allowed($str) + { + $str = str_replace(array_keys($this->_never_allowed_str), $this->_never_allowed_str, $str); + + foreach ($this->_never_allowed_regex as $regex) + { + $str = preg_replace('#'.$regex.'#is', '[removed]', $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Set CSRF Hash and Cookie + * + * @return string + */ + protected function _csrf_set_hash() + { + if ($this->_csrf_hash === NULL) + { + // If the cookie exists we will use its value. + // We don't necessarily want to regenerate it with + // each page load since a page could contain embedded + // sub-pages causing this feature to fail + if (isset($_COOKIE[$this->_csrf_cookie_name]) && is_string($_COOKIE[$this->_csrf_cookie_name]) + && preg_match('#^[0-9a-f]{32}$#iS', $_COOKIE[$this->_csrf_cookie_name]) === 1) + { + return $this->_csrf_hash = $_COOKIE[$this->_csrf_cookie_name]; + } + + $rand = $this->get_random_bytes(16); + $this->_csrf_hash = ($rand === FALSE) + ? md5(uniqid(mt_rand(), TRUE)) + : bin2hex($rand); + } + + return $this->_csrf_hash; + } + +} diff --git a/system/core/URI.php b/system/core/URI.php new file mode 100644 index 00000000..3ccdfa7b --- /dev/null +++ b/system/core/URI.php @@ -0,0 +1,643 @@ +config =& load_class('Config', 'core'); + + // If query strings are enabled, we don't need to parse any segments. + // However, they don't make sense under CLI. + if (is_cli() OR $this->config->item('enable_query_strings') !== TRUE) + { + $this->_permitted_uri_chars = $this->config->item('permitted_uri_chars'); + + // If it's a CLI request, ignore the configuration + if (is_cli()) + { + $uri = $this->_parse_argv(); + } + else + { + $protocol = $this->config->item('uri_protocol'); + empty($protocol) && $protocol = 'REQUEST_URI'; + + switch ($protocol) + { + case 'AUTO': // For BC purposes only + case 'REQUEST_URI': + $uri = $this->_parse_request_uri(); + break; + case 'QUERY_STRING': + $uri = $this->_parse_query_string(); + break; + case 'PATH_INFO': + default: + $uri = isset($_SERVER[$protocol]) + ? $_SERVER[$protocol] + : $this->_parse_request_uri(); + break; + } + } + + $this->_set_uri_string($uri); + } + + log_message('info', 'URI Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Set URI String + * + * @param string $str + * @return void + */ + protected function _set_uri_string($str) + { + // Filter out control characters and trim slashes + $this->uri_string = trim(remove_invisible_characters($str, FALSE), '/'); + + if ($this->uri_string !== '') + { + // Remove the URL suffix, if present + if (($suffix = (string) $this->config->item('url_suffix')) !== '') + { + $slen = strlen($suffix); + + if (substr($this->uri_string, -$slen) === $suffix) + { + $this->uri_string = substr($this->uri_string, 0, -$slen); + } + } + + $this->segments[0] = NULL; + // Populate the segments array + foreach (explode('/', trim($this->uri_string, '/')) as $val) + { + $val = trim($val); + // Filter segments for security + $this->filter_uri($val); + + if ($val !== '') + { + $this->segments[] = $val; + } + } + + unset($this->segments[0]); + } + } + + // -------------------------------------------------------------------- + + /** + * Parse REQUEST_URI + * + * Will parse REQUEST_URI and automatically detect the URI from it, + * while fixing the query string if necessary. + * + * @return string + */ + protected function _parse_request_uri() + { + if ( ! isset($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME'])) + { + return ''; + } + + // parse_url() returns false if no host is present, but the path or query string + // contains a colon followed by a number + $uri = parse_url('http://dummy'.$_SERVER['REQUEST_URI']); + $query = isset($uri['query']) ? $uri['query'] : ''; + $uri = isset($uri['path']) ? $uri['path'] : ''; + + if (isset($_SERVER['SCRIPT_NAME'][0])) + { + if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0) + { + $uri = (string) substr($uri, strlen($_SERVER['SCRIPT_NAME'])); + } + elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0) + { + $uri = (string) substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME']))); + } + } + + // This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct + // URI is found, and also fixes the QUERY_STRING server var and $_GET array. + if (trim($uri, '/') === '' && strncmp($query, '/', 1) === 0) + { + $query = explode('?', $query, 2); + $uri = $query[0]; + $_SERVER['QUERY_STRING'] = isset($query[1]) ? $query[1] : ''; + } + else + { + $_SERVER['QUERY_STRING'] = $query; + } + + parse_str($_SERVER['QUERY_STRING'], $_GET); + + if ($uri === '/' OR $uri === '') + { + return '/'; + } + + // Do some final cleaning of the URI and return it + return $this->_remove_relative_directory($uri); + } + + // -------------------------------------------------------------------- + + /** + * Parse QUERY_STRING + * + * Will parse QUERY_STRING and automatically detect the URI from it. + * + * @return string + */ + protected function _parse_query_string() + { + $uri = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING'); + + if (trim($uri, '/') === '') + { + return ''; + } + elseif (strncmp($uri, '/', 1) === 0) + { + $uri = explode('?', $uri, 2); + $_SERVER['QUERY_STRING'] = isset($uri[1]) ? $uri[1] : ''; + $uri = $uri[0]; + } + + parse_str($_SERVER['QUERY_STRING'], $_GET); + + return $this->_remove_relative_directory($uri); + } + + // -------------------------------------------------------------------- + + /** + * Parse CLI arguments + * + * Take each command line argument and assume it is a URI segment. + * + * @return string + */ + protected function _parse_argv() + { + $args = array_slice($_SERVER['argv'], 1); + return $args ? implode('/', $args) : ''; + } + + // -------------------------------------------------------------------- + + /** + * Remove relative directory (../) and multi slashes (///) + * + * Do some final cleaning of the URI and return it, currently only used in self::_parse_request_uri() + * + * @param string $uri + * @return string + */ + protected function _remove_relative_directory($uri) + { + $uris = array(); + $tok = strtok($uri, '/'); + while ($tok !== FALSE) + { + if (( ! empty($tok) OR $tok === '0') && $tok !== '..') + { + $uris[] = $tok; + } + $tok = strtok('/'); + } + + return implode('/', $uris); + } + + // -------------------------------------------------------------------- + + /** + * Filter URI + * + * Filters segments for malicious characters. + * + * @param string $str + * @return void + */ + public function filter_uri(&$str) + { + if ( ! empty($str) && ! empty($this->_permitted_uri_chars) && ! preg_match('/^['.$this->_permitted_uri_chars.']+$/i'.(UTF8_ENABLED ? 'u' : ''), $str)) + { + show_error('The URI you submitted has disallowed characters.', 400); + } + } + + // -------------------------------------------------------------------- + + /** + * Fetch URI Segment + * + * @see CI_URI::$segments + * @param int $n Index + * @param mixed $no_result What to return if the segment index is not found + * @return mixed + */ + public function segment($n, $no_result = NULL) + { + return isset($this->segments[$n]) ? $this->segments[$n] : $no_result; + } + + // -------------------------------------------------------------------- + + /** + * Fetch URI "routed" Segment + * + * Returns the re-routed URI segment (assuming routing rules are used) + * based on the index provided. If there is no routing, will return + * the same result as CI_URI::segment(). + * + * @see CI_URI::$rsegments + * @see CI_URI::segment() + * @param int $n Index + * @param mixed $no_result What to return if the segment index is not found + * @return mixed + */ + public function rsegment($n, $no_result = NULL) + { + return isset($this->rsegments[$n]) ? $this->rsegments[$n] : $no_result; + } + + // -------------------------------------------------------------------- + + /** + * URI to assoc + * + * Generates an associative array of URI data starting at the supplied + * segment index. For example, if this is your URI: + * + * example.com/user/search/name/joe/location/UK/gender/male + * + * You can use this method to generate an array with this prototype: + * + * array ( + * name => joe + * location => UK + * gender => male + * ) + * + * @param int $n Index (default: 3) + * @param array $default Default values + * @return array + */ + public function uri_to_assoc($n = 3, $default = array()) + { + return $this->_uri_to_assoc($n, $default, 'segment'); + } + + // -------------------------------------------------------------------- + + /** + * Routed URI to assoc + * + * Identical to CI_URI::uri_to_assoc(), only it uses the re-routed + * segment array. + * + * @see CI_URI::uri_to_assoc() + * @param int $n Index (default: 3) + * @param array $default Default values + * @return array + */ + public function ruri_to_assoc($n = 3, $default = array()) + { + return $this->_uri_to_assoc($n, $default, 'rsegment'); + } + + // -------------------------------------------------------------------- + + /** + * Internal URI-to-assoc + * + * Generates a key/value pair from the URI string or re-routed URI string. + * + * @used-by CI_URI::uri_to_assoc() + * @used-by CI_URI::ruri_to_assoc() + * @param int $n Index (default: 3) + * @param array $default Default values + * @param string $which Array name ('segment' or 'rsegment') + * @return array + */ + protected function _uri_to_assoc($n = 3, $default = array(), $which = 'segment') + { + if ( ! is_numeric($n)) + { + return $default; + } + + if (isset($this->keyval[$which], $this->keyval[$which][$n])) + { + return $this->keyval[$which][$n]; + } + + $total_segments = "total_{$which}s"; + $segment_array = "{$which}_array"; + + if ($this->$total_segments() < $n) + { + return (count($default) === 0) + ? array() + : array_fill_keys($default, NULL); + } + + $segments = array_slice($this->$segment_array(), ($n - 1)); + $i = 0; + $lastval = ''; + $retval = array(); + foreach ($segments as $seg) + { + if ($i % 2) + { + $retval[$lastval] = $seg; + } + else + { + $retval[$seg] = NULL; + $lastval = $seg; + } + + $i++; + } + + if (count($default) > 0) + { + foreach ($default as $val) + { + if ( ! array_key_exists($val, $retval)) + { + $retval[$val] = NULL; + } + } + } + + // Cache the array for reuse + isset($this->keyval[$which]) OR $this->keyval[$which] = array(); + $this->keyval[$which][$n] = $retval; + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Assoc to URI + * + * Generates a URI string from an associative array. + * + * @param array $array Input array of key/value pairs + * @return string URI string + */ + public function assoc_to_uri($array) + { + $temp = array(); + foreach ((array) $array as $key => $val) + { + $temp[] = $key; + $temp[] = $val; + } + + return implode('/', $temp); + } + + // -------------------------------------------------------------------- + + /** + * Slash segment + * + * Fetches an URI segment with a slash. + * + * @param int $n Index + * @param string $where Where to add the slash ('trailing' or 'leading') + * @return string + */ + public function slash_segment($n, $where = 'trailing') + { + return $this->_slash_segment($n, $where, 'segment'); + } + + // -------------------------------------------------------------------- + + /** + * Slash routed segment + * + * Fetches an URI routed segment with a slash. + * + * @param int $n Index + * @param string $where Where to add the slash ('trailing' or 'leading') + * @return string + */ + public function slash_rsegment($n, $where = 'trailing') + { + return $this->_slash_segment($n, $where, 'rsegment'); + } + + // -------------------------------------------------------------------- + + /** + * Internal Slash segment + * + * Fetches an URI Segment and adds a slash to it. + * + * @used-by CI_URI::slash_segment() + * @used-by CI_URI::slash_rsegment() + * + * @param int $n Index + * @param string $where Where to add the slash ('trailing' or 'leading') + * @param string $which Array name ('segment' or 'rsegment') + * @return string + */ + protected function _slash_segment($n, $where = 'trailing', $which = 'segment') + { + $leading = $trailing = '/'; + + if ($where === 'trailing') + { + $leading = ''; + } + elseif ($where === 'leading') + { + $trailing = ''; + } + + return $leading.$this->$which($n).$trailing; + } + + // -------------------------------------------------------------------- + + /** + * Segment Array + * + * @return array CI_URI::$segments + */ + public function segment_array() + { + return $this->segments; + } + + // -------------------------------------------------------------------- + + /** + * Routed Segment Array + * + * @return array CI_URI::$rsegments + */ + public function rsegment_array() + { + return $this->rsegments; + } + + // -------------------------------------------------------------------- + + /** + * Total number of segments + * + * @return int + */ + public function total_segments() + { + return count($this->segments); + } + + // -------------------------------------------------------------------- + + /** + * Total number of routed segments + * + * @return int + */ + public function total_rsegments() + { + return count($this->rsegments); + } + + // -------------------------------------------------------------------- + + /** + * Fetch URI string + * + * @return string CI_URI::$uri_string + */ + public function uri_string() + { + return $this->uri_string; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Re-routed URI string + * + * @return string + */ + public function ruri_string() + { + return ltrim(load_class('Router', 'core')->directory, '/').implode('/', $this->rsegments); + } + +} diff --git a/system/core/Utf8.php b/system/core/Utf8.php new file mode 100644 index 00000000..dfbbfff2 --- /dev/null +++ b/system/core/Utf8.php @@ -0,0 +1,164 @@ +is_ascii($str) === FALSE) + { + if (MB_ENABLED) + { + $str = mb_convert_encoding($str, 'UTF-8', 'UTF-8'); + } + elseif (ICONV_ENABLED) + { + $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str); + } + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Remove ASCII control characters + * + * Removes all ASCII control characters except horizontal tabs, + * line feeds, and carriage returns, as all others can cause + * problems in XML. + * + * @param string $str String to clean + * @return string + */ + public function safe_ascii_for_xml($str) + { + return remove_invisible_characters($str, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Convert to UTF-8 + * + * Attempts to convert a string to UTF-8. + * + * @param string $str Input string + * @param string $encoding Input encoding + * @return string $str encoded in UTF-8 or FALSE on failure + */ + public function convert_to_utf8($str, $encoding) + { + if (MB_ENABLED) + { + return mb_convert_encoding($str, 'UTF-8', $encoding); + } + elseif (ICONV_ENABLED) + { + return @iconv($encoding, 'UTF-8', $str); + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Is ASCII? + * + * Tests if a string is standard 7-bit ASCII or not. + * + * @param string $str String to check + * @return bool + */ + public function is_ascii($str) + { + return (preg_match('/[^\x00-\x7F]/S', $str) === 0); + } + +} diff --git a/system/core/compat/hash.php b/system/core/compat/hash.php new file mode 100644 index 00000000..c65203aa --- /dev/null +++ b/system/core/compat/hash.php @@ -0,0 +1,254 @@ + 32, + 'haval128,3' => 128, + 'haval160,3' => 128, + 'haval192,3' => 128, + 'haval224,3' => 128, + 'haval256,3' => 128, + 'haval128,4' => 128, + 'haval160,4' => 128, + 'haval192,4' => 128, + 'haval224,4' => 128, + 'haval256,4' => 128, + 'haval128,5' => 128, + 'haval160,5' => 128, + 'haval192,5' => 128, + 'haval224,5' => 128, + 'haval256,5' => 128, + 'md2' => 16, + 'md4' => 64, + 'md5' => 64, + 'ripemd128' => 64, + 'ripemd160' => 64, + 'ripemd256' => 64, + 'ripemd320' => 64, + 'salsa10' => 64, + 'salsa20' => 64, + 'sha1' => 64, + 'sha224' => 64, + 'sha256' => 64, + 'sha384' => 128, + 'sha512' => 128, + 'snefru' => 32, + 'snefru256' => 32, + 'tiger128,3' => 64, + 'tiger160,3' => 64, + 'tiger192,3' => 64, + 'tiger128,4' => 64, + 'tiger160,4' => 64, + 'tiger192,4' => 64, + 'whirlpool' => 64 + ); + + if (isset($block_sizes[$algo], $password[$block_sizes[$algo]])) + { + $password = hash($algo, $password, TRUE); + } + + $hash = ''; + // Note: Blocks are NOT 0-indexed + for ($bc = (int) ceil($length / $hash_length), $bi = 1; $bi <= $bc; $bi++) + { + $key = $derived_key = hash_hmac($algo, $salt.pack('N', $bi), $password, TRUE); + for ($i = 1; $i < $iterations; $i++) + { + $derived_key ^= $key = hash_hmac($algo, $key, $password, TRUE); + } + + $hash .= $derived_key; + } + + // This is not RFC-compatible, but we're aiming for natural PHP compatibility + if ( ! $raw_output) + { + $hash = bin2hex($hash); + } + + return defined('MB_OVERLOAD_STRING') + ? mb_substr($hash, 0, $length, '8bit') + : substr($hash, 0, $length); + } +} diff --git a/system/core/compat/index.html b/system/core/compat/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/core/compat/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/core/compat/mbstring.php b/system/core/compat/mbstring.php new file mode 100644 index 00000000..1b2f2c63 --- /dev/null +++ b/system/core/compat/mbstring.php @@ -0,0 +1,149 @@ + 0, 'algoName' => 'unknown', 'options' => array()) + : array('algo' => 1, 'algoName' => 'bcrypt', 'options' => array('cost' => $hash)); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('password_hash')) +{ + /** + * password_hash() + * + * @link http://php.net/password_hash + * @param string $password + * @param int $algo + * @param array $options + * @return mixed + */ + function password_hash($password, $algo, array $options = array()) + { + static $func_overload; + isset($func_overload) OR $func_overload = (extension_loaded('mbstring') && ini_get('mbstring.func_overload')); + + if ($algo !== 1) + { + trigger_error('password_hash(): Unknown hashing algorithm: '.(int) $algo, E_USER_WARNING); + return NULL; + } + + if (isset($options['cost']) && ($options['cost'] < 4 OR $options['cost'] > 31)) + { + trigger_error('password_hash(): Invalid bcrypt cost parameter specified: '.(int) $options['cost'], E_USER_WARNING); + return NULL; + } + + if (isset($options['salt']) && ($saltlen = ($func_overload ? mb_strlen($options['salt'], '8bit') : strlen($options['salt']))) < 22) + { + trigger_error('password_hash(): Provided salt is too short: '.$saltlen.' expecting 22', E_USER_WARNING); + return NULL; + } + elseif ( ! isset($options['salt'])) + { + if (function_exists('random_bytes')) + { + try + { + $options['salt'] = random_bytes(16); + } + catch (Exception $e) + { + log_message('error', 'compat/password: Error while trying to use random_bytes(): '.$e->getMessage()); + return FALSE; + } + } + elseif (defined('MCRYPT_DEV_URANDOM')) + { + $options['salt'] = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); + } + elseif (DIRECTORY_SEPARATOR === '/' && (is_readable($dev = '/dev/arandom') OR is_readable($dev = '/dev/urandom'))) + { + if (($fp = fopen($dev, 'rb')) === FALSE) + { + log_message('error', 'compat/password: Unable to open '.$dev.' for reading.'); + return FALSE; + } + + // Try not to waste entropy ... + is_php('5.4') && stream_set_chunk_size($fp, 16); + + $options['salt'] = ''; + for ($read = 0; $read < 16; $read = ($func_overload) ? mb_strlen($options['salt'], '8bit') : strlen($options['salt'])) + { + if (($read = fread($fp, 16 - $read)) === FALSE) + { + log_message('error', 'compat/password: Error while reading from '.$dev.'.'); + return FALSE; + } + $options['salt'] .= $read; + } + + fclose($fp); + } + elseif (function_exists('openssl_random_pseudo_bytes')) + { + $is_secure = NULL; + $options['salt'] = openssl_random_pseudo_bytes(16, $is_secure); + if ($is_secure !== TRUE) + { + log_message('error', 'compat/password: openssl_random_pseudo_bytes() set the $cryto_strong flag to FALSE'); + return FALSE; + } + } + else + { + log_message('error', 'compat/password: No CSPRNG available.'); + return FALSE; + } + + $options['salt'] = str_replace('+', '.', rtrim(base64_encode($options['salt']), '=')); + } + elseif ( ! preg_match('#^[a-zA-Z0-9./]+$#D', $options['salt'])) + { + $options['salt'] = str_replace('+', '.', rtrim(base64_encode($options['salt']), '=')); + } + + isset($options['cost']) OR $options['cost'] = 10; + + return (strlen($password = crypt($password, sprintf('$2y$%02d$%s', $options['cost'], $options['salt']))) === 60) + ? $password + : FALSE; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('password_needs_rehash')) +{ + /** + * password_needs_rehash() + * + * @link http://php.net/password_needs_rehash + * @param string $hash + * @param int $algo + * @param array $options + * @return bool + */ + function password_needs_rehash($hash, $algo, array $options = array()) + { + $info = password_get_info($hash); + + if ($algo !== $info['algo']) + { + return TRUE; + } + elseif ($algo === 1) + { + $options['cost'] = isset($options['cost']) ? (int) $options['cost'] : 10; + return ($info['options']['cost'] !== $options['cost']); + } + + // Odd at first glance, but according to a comment in PHP's own unit tests, + // because it is an unknown algorithm - it's valid and therefore doesn't + // need rehashing. + return FALSE; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('password_verify')) +{ + /** + * password_verify() + * + * @link http://php.net/password_verify + * @param string $password + * @param string $hash + * @return bool + */ + function password_verify($password, $hash) + { + if (strlen($hash) !== 60 OR strlen($password = crypt($password, $hash)) !== 60) + { + return FALSE; + } + + $compare = 0; + for ($i = 0; $i < 60; $i++) + { + $compare |= (ord($password[$i]) ^ ord($hash[$i])); + } + + return ($compare === 0); + } +} diff --git a/system/core/compat/standard.php b/system/core/compat/standard.php new file mode 100644 index 00000000..7db2efb5 --- /dev/null +++ b/system/core/compat/standard.php @@ -0,0 +1,182 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/DB.php b/system/database/DB.php new file mode 100644 index 00000000..c19eef72 --- /dev/null +++ b/system/database/DB.php @@ -0,0 +1,218 @@ +load->get_package_paths() as $path) + { + if ($path !== APPPATH) + { + if (file_exists($file_path = $path.'config/'.ENVIRONMENT.'/database.php')) + { + include($file_path); + } + elseif (file_exists($file_path = $path.'config/database.php')) + { + include($file_path); + } + } + } + } + + if ( ! isset($db) OR count($db) === 0) + { + show_error('No database connection settings were found in the database config file.'); + } + + if ($params !== '') + { + $active_group = $params; + } + + if ( ! isset($active_group)) + { + show_error('You have not specified a database connection group via $active_group in your config/database.php file.'); + } + elseif ( ! isset($db[$active_group])) + { + show_error('You have specified an invalid database connection group ('.$active_group.') in your config/database.php file.'); + } + + $params = $db[$active_group]; + } + elseif (is_string($params)) + { + /** + * Parse the URL from the DSN string + * Database settings can be passed as discreet + * parameters or as a data source name in the first + * parameter. DSNs must have this prototype: + * $dsn = 'driver://username:password@hostname/database'; + */ + if (($dsn = @parse_url($params)) === FALSE) + { + show_error('Invalid DB Connection String'); + } + + $params = array( + 'dbdriver' => $dsn['scheme'], + 'hostname' => isset($dsn['host']) ? rawurldecode($dsn['host']) : '', + 'port' => isset($dsn['port']) ? rawurldecode($dsn['port']) : '', + 'username' => isset($dsn['user']) ? rawurldecode($dsn['user']) : '', + 'password' => isset($dsn['pass']) ? rawurldecode($dsn['pass']) : '', + 'database' => isset($dsn['path']) ? rawurldecode(substr($dsn['path'], 1)) : '' + ); + + // Were additional config items set? + if (isset($dsn['query'])) + { + parse_str($dsn['query'], $extra); + + foreach ($extra as $key => $val) + { + if (is_string($val) && in_array(strtoupper($val), array('TRUE', 'FALSE', 'NULL'))) + { + $val = var_export($val, TRUE); + } + + $params[$key] = $val; + } + } + } + + // No DB specified yet? Beat them senseless... + if (empty($params['dbdriver'])) + { + show_error('You have not selected a database type to connect to.'); + } + + // Load the DB classes. Note: Since the query builder class is optional + // we need to dynamically create a class that extends proper parent class + // based on whether we're using the query builder class or not. + if ($query_builder_override !== NULL) + { + $query_builder = $query_builder_override; + } + // Backwards compatibility work-around for keeping the + // $active_record config variable working. Should be + // removed in v3.1 + elseif ( ! isset($query_builder) && isset($active_record)) + { + $query_builder = $active_record; + } + + require_once(BASEPATH.'database/DB_driver.php'); + + if ( ! isset($query_builder) OR $query_builder === TRUE) + { + require_once(BASEPATH.'database/DB_query_builder.php'); + if ( ! class_exists('CI_DB', FALSE)) + { + /** + * CI_DB + * + * Acts as an alias for both CI_DB_driver and CI_DB_query_builder. + * + * @see CI_DB_query_builder + * @see CI_DB_driver + */ + class CI_DB extends CI_DB_query_builder { } + } + } + elseif ( ! class_exists('CI_DB', FALSE)) + { + /** + * @ignore + */ + class CI_DB extends CI_DB_driver { } + } + + // Load the DB driver + $driver_file = BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php'; + + file_exists($driver_file) OR show_error('Invalid DB driver'); + require_once($driver_file); + + // Instantiate the DB adapter + $driver = 'CI_DB_'.$params['dbdriver'].'_driver'; + $DB = new $driver($params); + + // Check for a subdriver + if ( ! empty($DB->subdriver)) + { + $driver_file = BASEPATH.'database/drivers/'.$DB->dbdriver.'/subdrivers/'.$DB->dbdriver.'_'.$DB->subdriver.'_driver.php'; + + if (file_exists($driver_file)) + { + require_once($driver_file); + $driver = 'CI_DB_'.$DB->dbdriver.'_'.$DB->subdriver.'_driver'; + $DB = new $driver($params); + } + } + + $DB->initialize(); + return $DB; +} diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php new file mode 100644 index 00000000..7c8ee5fc --- /dev/null +++ b/system/database/DB_cache.php @@ -0,0 +1,221 @@ +CI and load the file helper since we use it a lot + $this->CI =& get_instance(); + $this->db =& $db; + $this->CI->load->helper('file'); + + $this->check_path(); + } + + // -------------------------------------------------------------------- + + /** + * Set Cache Directory Path + * + * @param string $path Path to the cache directory + * @return bool + */ + public function check_path($path = '') + { + if ($path === '') + { + if ($this->db->cachedir === '') + { + return $this->db->cache_off(); + } + + $path = $this->db->cachedir; + } + + // Add a trailing slash to the path if needed + $path = realpath($path) + ? rtrim(realpath($path), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR + : rtrim($path, '/').'/'; + + if ( ! is_dir($path)) + { + log_message('debug', 'DB cache path error: '.$path); + + // If the path is wrong we'll turn off caching + return $this->db->cache_off(); + } + + if ( ! is_really_writable($path)) + { + log_message('debug', 'DB cache dir not writable: '.$path); + + // If the path is not really writable we'll turn off caching + return $this->db->cache_off(); + } + + $this->db->cachedir = $path; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Retrieve a cached query + * + * The URI being requested will become the name of the cache sub-folder. + * An MD5 hash of the SQL statement will become the cache file name. + * + * @param string $sql + * @return string + */ + public function read($sql) + { + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + $filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql); + + if ( ! is_file($filepath) OR FALSE === ($cachedata = file_get_contents($filepath))) + { + return FALSE; + } + + return unserialize($cachedata); + } + + // -------------------------------------------------------------------- + + /** + * Write a query to a cache file + * + * @param string $sql + * @param object $object + * @return bool + */ + public function write($sql, $object) + { + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'; + $filename = md5($sql); + + if ( ! is_dir($dir_path) && ! @mkdir($dir_path, 0750)) + { + return FALSE; + } + + if (write_file($dir_path.$filename, serialize($object)) === FALSE) + { + return FALSE; + } + + chmod($dir_path.$filename, 0640); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Delete cache files within a particular directory + * + * @param string $segment_one + * @param string $segment_two + * @return void + */ + public function delete($segment_one = '', $segment_two = '') + { + if ($segment_one === '') + { + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + } + + if ($segment_two === '') + { + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + } + + $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'; + delete_files($dir_path, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Delete all existing cache files + * + * @return void + */ + public function delete_all() + { + delete_files($this->db->cachedir, TRUE, TRUE); + } + +} diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php new file mode 100644 index 00000000..0b13a2f8 --- /dev/null +++ b/system/database/DB_driver.php @@ -0,0 +1,1987 @@ + $val) + { + $this->$key = $val; + } + } + + log_message('info', 'Database Driver Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Initialize Database Settings + * + * @return bool + */ + public function initialize() + { + /* If an established connection is available, then there's + * no need to connect and select the database. + * + * Depending on the database driver, conn_id can be either + * boolean TRUE, a resource or an object. + */ + if ($this->conn_id) + { + return TRUE; + } + + // ---------------------------------------------------------------- + + // Connect to the database and set the connection ID + $this->conn_id = $this->db_connect($this->pconnect); + + // No connection resource? Check if there is a failover else throw an error + if ( ! $this->conn_id) + { + // Check if there is a failover set + if ( ! empty($this->failover) && is_array($this->failover)) + { + // Go over all the failovers + foreach ($this->failover as $failover) + { + // Replace the current settings with those of the failover + foreach ($failover as $key => $val) + { + $this->$key = $val; + } + + // Try to connect + $this->conn_id = $this->db_connect($this->pconnect); + + // If a connection is made break the foreach loop + if ($this->conn_id) + { + break; + } + } + } + + // We still don't have a connection? + if ( ! $this->conn_id) + { + log_message('error', 'Unable to connect to the database'); + + if ($this->db_debug) + { + $this->display_error('db_unable_to_connect'); + } + + return FALSE; + } + } + + // Now we set the character set and that's all + return $this->db_set_charset($this->char_set); + } + + // -------------------------------------------------------------------- + + /** + * DB connect + * + * This is just a dummy method that all drivers will override. + * + * @return mixed + */ + public function db_connect() + { + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @return mixed + */ + public function db_pconnect() + { + return $this->db_connect(TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout. + * + * This is just a dummy method to allow drivers without such + * functionality to not declare it, while others will override it. + * + * @return void + */ + public function reconnect() + { + } + + // -------------------------------------------------------------------- + + /** + * Select database + * + * This is just a dummy method to allow drivers without such + * functionality to not declare it, while others will override it. + * + * @return bool + */ + public function db_select() + { + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Last error + * + * @return array + */ + public function error() + { + return array('code' => NULL, 'message' => NULL); + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @param string + * @return bool + */ + public function db_set_charset($charset) + { + if (method_exists($this, '_db_set_charset') && ! $this->_db_set_charset($charset)) + { + log_message('error', 'Unable to set database connection charset: '.$charset); + + if ($this->db_debug) + { + $this->display_error('db_unable_to_set_charset', $charset); + } + + return FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * The name of the platform in use (mysql, mssql, etc...) + * + * @return string + */ + public function platform() + { + return $this->dbdriver; + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * Returns a string containing the version of the database being used. + * Most drivers will override this method. + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if (FALSE === ($sql = $this->_version())) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_function') : FALSE; + } + + $query = $this->query($sql)->row(); + return $this->data_cache['version'] = $query->ver; + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @return string + */ + protected function _version() + { + return 'SELECT VERSION() AS ver'; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * Accepts an SQL string as input and returns a result object upon + * successful execution of a "read" type query. Returns boolean TRUE + * upon successful execution of a "write" type query. Returns boolean + * FALSE upon failure, and if the $db_debug variable is set to TRUE + * will raise an error. + * + * @param string $sql + * @param array $binds = FALSE An array of binding data + * @param bool $return_object = NULL + * @return mixed + */ + public function query($sql, $binds = FALSE, $return_object = NULL) + { + if ($sql === '') + { + log_message('error', 'Invalid query: '.$sql); + return ($this->db_debug) ? $this->display_error('db_invalid_query') : FALSE; + } + elseif ( ! is_bool($return_object)) + { + $return_object = ! $this->is_write_type($sql); + } + + // Verify table prefix and replace if necessary + if ($this->dbprefix !== '' && $this->swap_pre !== '' && $this->dbprefix !== $this->swap_pre) + { + $sql = preg_replace('/(\W)'.$this->swap_pre.'(\S+?)/', '\\1'.$this->dbprefix.'\\2', $sql); + } + + // Compile binds if needed + if ($binds !== FALSE) + { + $sql = $this->compile_binds($sql, $binds); + } + + // Is query caching enabled? If the query is a "read type" + // we will load the caching class and return the previously + // cached query if it exists + if ($this->cache_on === TRUE && $return_object === TRUE && $this->_cache_init()) + { + $this->load_rdriver(); + if (FALSE !== ($cache = $this->CACHE->read($sql))) + { + return $cache; + } + } + + // Save the query for debugging + if ($this->save_queries === TRUE) + { + $this->queries[] = $sql; + } + + // Start the Query Timer + $time_start = microtime(TRUE); + + // Run the Query + if (FALSE === ($this->result_id = $this->simple_query($sql))) + { + if ($this->save_queries === TRUE) + { + $this->query_times[] = 0; + } + + // This will trigger a rollback if transactions are being used + if ($this->_trans_depth !== 0) + { + $this->_trans_status = FALSE; + } + + // Grab the error now, as we might run some additional queries before displaying the error + $error = $this->error(); + + // Log errors + log_message('error', 'Query error: '.$error['message'].' - Invalid query: '.$sql); + + if ($this->db_debug) + { + // We call this function in order to roll-back queries + // if transactions are enabled. If we don't call this here + // the error message will trigger an exit, causing the + // transactions to remain in limbo. + while ($this->_trans_depth !== 0) + { + $trans_depth = $this->_trans_depth; + $this->trans_complete(); + if ($trans_depth === $this->_trans_depth) + { + log_message('error', 'Database: Failure during an automated transaction commit/rollback!'); + break; + } + } + + // Display errors + return $this->display_error(array('Error Number: '.$error['code'], $error['message'], $sql)); + } + + return FALSE; + } + + // Stop and aggregate the query time results + $time_end = microtime(TRUE); + $this->benchmark += $time_end - $time_start; + + if ($this->save_queries === TRUE) + { + $this->query_times[] = $time_end - $time_start; + } + + // Increment the query counter + $this->query_count++; + + // Will we have a result object instantiated? If not - we'll simply return TRUE + if ($return_object !== TRUE) + { + // If caching is enabled we'll auto-cleanup any existing files related to this particular URI + if ($this->cache_on === TRUE && $this->cache_autodel === TRUE && $this->_cache_init()) + { + $this->CACHE->delete(); + } + + return TRUE; + } + + // Load and instantiate the result driver + $driver = $this->load_rdriver(); + $RES = new $driver($this); + + // Is query caching enabled? If so, we'll serialize the + // result object and save it to a cache file. + if ($this->cache_on === TRUE && $this->_cache_init()) + { + // We'll create a new instance of the result object + // only without the platform specific driver since + // we can't use it with cached data (the query result + // resource ID won't be any good once we've cached the + // result object, so we'll have to compile the data + // and save it) + $CR = new CI_DB_result($this); + $CR->result_object = $RES->result_object(); + $CR->result_array = $RES->result_array(); + $CR->num_rows = $RES->num_rows(); + + // Reset these since cached objects can not utilize resource IDs. + $CR->conn_id = NULL; + $CR->result_id = NULL; + + $this->CACHE->write($sql, $CR); + } + + return $RES; + } + + // -------------------------------------------------------------------- + + /** + * Load the result drivers + * + * @return string the name of the result class + */ + public function load_rdriver() + { + $driver = 'CI_DB_'.$this->dbdriver.'_result'; + + if ( ! class_exists($driver, FALSE)) + { + require_once(BASEPATH.'database/DB_result.php'); + require_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php'); + } + + return $driver; + } + + // -------------------------------------------------------------------- + + /** + * Simple Query + * This is a simplified version of the query() function. Internally + * we only use it when running transaction commands since they do + * not require all the features of the main query() function. + * + * @param string the sql query + * @return mixed + */ + public function simple_query($sql) + { + if ( ! $this->conn_id) + { + if ( ! $this->initialize()) + { + return FALSE; + } + } + + return $this->_execute($sql); + } + + // -------------------------------------------------------------------- + + /** + * Disable Transactions + * This permits transactions to be disabled at run-time. + * + * @return void + */ + public function trans_off() + { + $this->trans_enabled = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Enable/disable Transaction Strict Mode + * + * When strict mode is enabled, if you are running multiple groups of + * transactions, if one group fails all subsequent groups will be + * rolled back. + * + * If strict mode is disabled, each group is treated autonomously, + * meaning a failure of one group will not affect any others + * + * @param bool $mode = TRUE + * @return void + */ + public function trans_strict($mode = TRUE) + { + $this->trans_strict = is_bool($mode) ? $mode : TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Start Transaction + * + * @param bool $test_mode = FALSE + * @return bool + */ + public function trans_start($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return FALSE; + } + + return $this->trans_begin($test_mode); + } + + // -------------------------------------------------------------------- + + /** + * Complete Transaction + * + * @return bool + */ + public function trans_complete() + { + if ( ! $this->trans_enabled) + { + return FALSE; + } + + // The query() function will set this flag to FALSE in the event that a query failed + if ($this->_trans_status === FALSE OR $this->_trans_failure === TRUE) + { + $this->trans_rollback(); + + // If we are NOT running in strict mode, we will reset + // the _trans_status flag so that subsequent groups of + // transactions will be permitted. + if ($this->trans_strict === FALSE) + { + $this->_trans_status = TRUE; + } + + log_message('debug', 'DB Transaction Failure'); + return FALSE; + } + + return $this->trans_commit(); + } + + // -------------------------------------------------------------------- + + /** + * Lets you retrieve the transaction flag to determine if it has failed + * + * @return bool + */ + public function trans_status() + { + return $this->_trans_status; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @param bool $test_mode + * @return bool + */ + public function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return FALSE; + } + // When transactions are nested we only begin/commit/rollback the outermost ones + elseif ($this->_trans_depth > 0) + { + $this->_trans_depth++; + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE); + + if ($this->_trans_begin()) + { + $this->_trans_status = TRUE; + $this->_trans_depth++; + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + public function trans_commit() + { + if ( ! $this->trans_enabled OR $this->_trans_depth === 0) + { + return FALSE; + } + // When transactions are nested we only begin/commit/rollback the outermost ones + elseif ($this->_trans_depth > 1 OR $this->_trans_commit()) + { + $this->_trans_depth--; + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + public function trans_rollback() + { + if ( ! $this->trans_enabled OR $this->_trans_depth === 0) + { + return FALSE; + } + // When transactions are nested we only begin/commit/rollback the outermost ones + elseif ($this->_trans_depth > 1 OR $this->_trans_rollback()) + { + $this->_trans_depth--; + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Compile Bindings + * + * @param string the sql statement + * @param array an array of bind data + * @return string + */ + public function compile_binds($sql, $binds) + { + if (empty($this->bind_marker) OR strpos($sql, $this->bind_marker) === FALSE) + { + return $sql; + } + elseif ( ! is_array($binds)) + { + $binds = array($binds); + $bind_count = 1; + } + else + { + // Make sure we're using numeric keys + $binds = array_values($binds); + $bind_count = count($binds); + } + + // We'll need the marker length later + $ml = strlen($this->bind_marker); + + // Make sure not to replace a chunk inside a string that happens to match the bind marker + if ($c = preg_match_all("/'[^']*'|\"[^\"]*\"/i", $sql, $matches)) + { + $c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i', + str_replace($matches[0], + str_replace($this->bind_marker, str_repeat(' ', $ml), $matches[0]), + $sql, $c), + $matches, PREG_OFFSET_CAPTURE); + + // Bind values' count must match the count of markers in the query + if ($bind_count !== $c) + { + return $sql; + } + } + elseif (($c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i', $sql, $matches, PREG_OFFSET_CAPTURE)) !== $bind_count) + { + return $sql; + } + + do + { + $c--; + $escaped_value = $this->escape($binds[$c]); + if (is_array($escaped_value)) + { + $escaped_value = '('.implode(',', $escaped_value).')'; + } + $sql = substr_replace($sql, $escaped_value, $matches[0][$c][1], $ml); + } + while ($c !== 0); + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @param string An SQL query string + * @return bool + */ + public function is_write_type($sql) + { + return (bool) preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD|COPY|ALTER|RENAME|GRANT|REVOKE|LOCK|UNLOCK|REINDEX|MERGE)\s/i', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Calculate the aggregate query elapsed time + * + * @param int The number of decimal places + * @return string + */ + public function elapsed_time($decimals = 6) + { + return number_format($this->benchmark, $decimals); + } + + // -------------------------------------------------------------------- + + /** + * Returns the total number of queries + * + * @return int + */ + public function total_queries() + { + return $this->query_count; + } + + // -------------------------------------------------------------------- + + /** + * Returns the last query that was executed + * + * @return string + */ + public function last_query() + { + return end($this->queries); + } + + // -------------------------------------------------------------------- + + /** + * "Smart" Escape String + * + * Escapes data based on type + * Sets boolean and null types + * + * @param string + * @return mixed + */ + public function escape($str) + { + if (is_array($str)) + { + $str = array_map(array(&$this, 'escape'), $str); + return $str; + } + elseif (is_string($str) OR (is_object($str) && method_exists($str, '__toString'))) + { + return "'".$this->escape_str($str)."'"; + } + elseif (is_bool($str)) + { + return ($str === FALSE) ? 0 : 1; + } + elseif ($str === NULL) + { + return 'NULL'; + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @param string|string[] $str Input string + * @param bool $like Whether or not the string will be used in a LIKE condition + * @return string + */ + public function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach ($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + $str = $this->_escape_str($str); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + return str_replace( + array($this->_like_escape_chr, '%', '_'), + array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'), + $str + ); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Escape LIKE String + * + * Calls the individual driver for platform + * specific escaping for LIKE conditions + * + * @param string|string[] + * @return mixed + */ + public function escape_like_str($str) + { + return $this->escape_str($str, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return str_replace("'", "''", remove_invisible_characters($str, FALSE)); + } + + // -------------------------------------------------------------------- + + /** + * Primary + * + * Retrieves the primary key. It assumes that the row in the first + * position is the primary key + * + * @param string $table Table name + * @return string + */ + public function primary($table) + { + $fields = $this->list_fields($table); + return is_array($fields) ? current($fields) : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @param string + * @return int + */ + public function count_all($table = '') + { + if ($table === '') + { + return 0; + } + + $query = $this->query($this->_count_string.$this->escape_identifiers('numrows').' FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE)); + if ($query->num_rows() === 0) + { + return 0; + } + + $query = $query->row(); + $this->_reset_select(); + return (int) $query->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Returns an array of table names + * + * @param string $constrain_by_prefix = FALSE + * @return array + */ + public function list_tables($constrain_by_prefix = FALSE) + { + // Is there a cached result? + if (isset($this->data_cache['table_names'])) + { + return $this->data_cache['table_names']; + } + + if (FALSE === ($sql = $this->_list_tables($constrain_by_prefix))) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_function') : FALSE; + } + + $this->data_cache['table_names'] = array(); + $query = $this->query($sql); + + foreach ($query->result_array() as $row) + { + // Do we know from which column to get the table name? + if ( ! isset($key)) + { + if (isset($row['table_name'])) + { + $key = 'table_name'; + } + elseif (isset($row['TABLE_NAME'])) + { + $key = 'TABLE_NAME'; + } + else + { + /* We have no other choice but to just get the first element's key. + * Due to array_shift() accepting its argument by reference, if + * E_STRICT is on, this would trigger a warning. So we'll have to + * assign it first. + */ + $key = array_keys($row); + $key = array_shift($key); + } + } + + $this->data_cache['table_names'][] = $row[$key]; + } + + return $this->data_cache['table_names']; + } + + // -------------------------------------------------------------------- + + /** + * Determine if a particular table exists + * + * @param string $table_name + * @return bool + */ + public function table_exists($table_name) + { + return in_array($this->protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables()); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * @param string $table Table name + * @return array + */ + public function list_fields($table) + { + // Is there a cached result? + if (isset($this->data_cache['field_names'][$table])) + { + return $this->data_cache['field_names'][$table]; + } + + if (FALSE === ($sql = $this->_list_columns($table))) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_function') : FALSE; + } + + $query = $this->query($sql); + $this->data_cache['field_names'][$table] = array(); + + foreach ($query->result_array() as $row) + { + // Do we know from where to get the column's name? + if ( ! isset($key)) + { + if (isset($row['column_name'])) + { + $key = 'column_name'; + } + elseif (isset($row['COLUMN_NAME'])) + { + $key = 'COLUMN_NAME'; + } + else + { + // We have no other choice but to just get the first element's key. + $key = key($row); + } + } + + $this->data_cache['field_names'][$table][] = $row[$key]; + } + + return $this->data_cache['field_names'][$table]; + } + + // -------------------------------------------------------------------- + + /** + * Determine if a particular field exists + * + * @param string + * @param string + * @return bool + */ + public function field_exists($field_name, $table_name) + { + return in_array($field_name, $this->list_fields($table_name)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table the table name + * @return array + */ + public function field_data($table) + { + $query = $this->query($this->_field_data($this->protect_identifiers($table, TRUE, NULL, FALSE))); + return ($query) ? $query->field_data() : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @param mixed + * @return mixed + */ + public function escape_identifiers($item) + { + if ($this->_escape_char === '' OR empty($item) OR in_array($item, $this->_reserved_identifiers)) + { + return $item; + } + elseif (is_array($item)) + { + foreach ($item as $key => $value) + { + $item[$key] = $this->escape_identifiers($value); + } + + return $item; + } + // Avoid breaking functions and literal values inside queries + elseif (ctype_digit($item) OR $item[0] === "'" OR ($this->_escape_char !== '"' && $item[0] === '"') OR strpos($item, '(') !== FALSE) + { + return $item; + } + + static $preg_ec = array(); + + if (empty($preg_ec)) + { + if (is_array($this->_escape_char)) + { + $preg_ec = array( + preg_quote($this->_escape_char[0], '/'), + preg_quote($this->_escape_char[1], '/'), + $this->_escape_char[0], + $this->_escape_char[1] + ); + } + else + { + $preg_ec[0] = $preg_ec[1] = preg_quote($this->_escape_char, '/'); + $preg_ec[2] = $preg_ec[3] = $this->_escape_char; + } + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + return preg_replace('/'.$preg_ec[0].'?([^'.$preg_ec[1].'\.]+)'.$preg_ec[1].'?\./i', $preg_ec[2].'$1'.$preg_ec[3].'.', $item); + } + } + + return preg_replace('/'.$preg_ec[0].'?([^'.$preg_ec[1].'\.]+)'.$preg_ec[1].'?(\.)?/i', $preg_ec[2].'$1'.$preg_ec[3].'$2', $item); + } + + // -------------------------------------------------------------------- + + /** + * Generate an insert string + * + * @param string the table upon which the query will be performed + * @param array an associative array data of key/values + * @return string + */ + public function insert_string($table, $data) + { + $fields = $values = array(); + + foreach ($data as $key => $val) + { + $fields[] = $this->escape_identifiers($key); + $values[] = $this->escape($val); + } + + return $this->_insert($this->protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values); + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + protected function _insert($table, $keys, $values) + { + return 'INSERT INTO '.$table.' ('.implode(', ', $keys).') VALUES ('.implode(', ', $values).')'; + } + + // -------------------------------------------------------------------- + + /** + * Generate an update string + * + * @param string the table upon which the query will be performed + * @param array an associative array data of key/values + * @param mixed the "where" statement + * @return string + */ + public function update_string($table, $data, $where) + { + if (empty($where)) + { + return FALSE; + } + + $this->where($where); + + $fields = array(); + foreach ($data as $key => $val) + { + $fields[$this->protect_identifiers($key)] = $this->escape($val); + } + + $sql = $this->_update($this->protect_identifiers($table, TRUE, NULL, FALSE), $fields); + $this->_reset_write(); + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string the table name + * @param array the update data + * @return string + */ + protected function _update($table, $values) + { + foreach ($values as $key => $val) + { + $valstr[] = $key.' = '.$val; + } + + return 'UPDATE '.$table.' SET '.implode(', ', $valstr) + .$this->_compile_wh('qb_where') + .$this->_compile_order_by() + .($this->qb_limit ? ' LIMIT '.$this->qb_limit : ''); + } + + // -------------------------------------------------------------------- + + /** + * Tests whether the string has an SQL operator + * + * @param string + * @return bool + */ + protected function _has_operator($str) + { + return (bool) preg_match('/(<|>|!|=|\sIS NULL|\sIS NOT NULL|\sEXISTS|\sBETWEEN|\sLIKE|\sIN\s*\(|\s)/i', trim($str)); + } + + // -------------------------------------------------------------------- + + /** + * Returns the SQL string operator + * + * @param string + * @return string + */ + protected function _get_operator($str) + { + static $_operators; + + if (empty($_operators)) + { + $_les = ($this->_like_escape_str !== '') + ? '\s+'.preg_quote(trim(sprintf($this->_like_escape_str, $this->_like_escape_chr)), '/') + : ''; + $_operators = array( + '\s*(?:<|>|!)?=\s*', // =, <=, >=, != + '\s*<>?\s*', // <, <> + '\s*>\s*', // > + '\s+IS NULL', // IS NULL + '\s+IS NOT NULL', // IS NOT NULL + '\s+EXISTS\s*\(.*\)', // EXISTS(sql) + '\s+NOT EXISTS\s*\(.*\)', // NOT EXISTS(sql) + '\s+BETWEEN\s+', // BETWEEN value AND value + '\s+IN\s*\(.*\)', // IN(list) + '\s+NOT IN\s*\(.*\)', // NOT IN (list) + '\s+LIKE\s+\S.*('.$_les.')?', // LIKE 'expr'[ ESCAPE '%s'] + '\s+NOT LIKE\s+\S.*('.$_les.')?' // NOT LIKE 'expr'[ ESCAPE '%s'] + ); + + } + + return preg_match('/'.implode('|', $_operators).'/i', $str, $match) + ? $match[0] : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Enables a native PHP function to be run, using a platform agnostic wrapper. + * + * @param string $function Function name + * @return mixed + */ + public function call_function($function) + { + $driver = ($this->dbdriver === 'postgre') ? 'pg_' : $this->dbdriver.'_'; + + if (FALSE === strpos($driver, $function)) + { + $function = $driver.$function; + } + + if ( ! function_exists($function)) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_function') : FALSE; + } + + return (func_num_args() > 1) + ? call_user_func_array($function, array_slice(func_get_args(), 1)) + : call_user_func($function); + } + + // -------------------------------------------------------------------- + + /** + * Set Cache Directory Path + * + * @param string the path to the cache directory + * @return void + */ + public function cache_set_path($path = '') + { + $this->cachedir = $path; + } + + // -------------------------------------------------------------------- + + /** + * Enable Query Caching + * + * @return bool cache_on value + */ + public function cache_on() + { + return $this->cache_on = TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Disable Query Caching + * + * @return bool cache_on value + */ + public function cache_off() + { + return $this->cache_on = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Delete the cache files associated with a particular URI + * + * @param string $segment_one = '' + * @param string $segment_two = '' + * @return bool + */ + public function cache_delete($segment_one = '', $segment_two = '') + { + return $this->_cache_init() + ? $this->CACHE->delete($segment_one, $segment_two) + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Delete All cache files + * + * @return bool + */ + public function cache_delete_all() + { + return $this->_cache_init() + ? $this->CACHE->delete_all() + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Initialize the Cache Class + * + * @return bool + */ + protected function _cache_init() + { + if ( ! class_exists('CI_DB_Cache', FALSE)) + { + require_once(BASEPATH.'database/DB_cache.php'); + } + elseif (is_object($this->CACHE)) + { + return TRUE; + } + + $this->CACHE = new CI_DB_Cache($this); // pass db object to support multiple db connections and returned db objects + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + public function close() + { + if ($this->conn_id) + { + $this->_close(); + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * This method would be overridden by most of the drivers. + * + * @return void + */ + protected function _close() + { + $this->conn_id = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Display an error message + * + * @param string the error message + * @param string any "swap" values + * @param bool whether to localize the message + * @return string sends the application/views/errors/error_db.php template + */ + public function display_error($error = '', $swap = '', $native = FALSE) + { + $LANG =& load_class('Lang', 'core'); + $LANG->load('db'); + + $heading = $LANG->line('db_error_heading'); + + if ($native === TRUE) + { + $message = (array) $error; + } + else + { + $message = is_array($error) ? $error : array(str_replace('%s', $swap, $LANG->line($error))); + } + + // Find the most likely culprit of the error by going through + // the backtrace until the source file is no longer in the + // database folder. + $trace = debug_backtrace(); + foreach ($trace as $call) + { + if (isset($call['file'], $call['class'])) + { + // We'll need this on Windows, as APPPATH and BASEPATH will always use forward slashes + if (DIRECTORY_SEPARATOR !== '/') + { + $call['file'] = str_replace('\\', '/', $call['file']); + } + + if (strpos($call['file'], BASEPATH.'database') === FALSE && strpos($call['class'], 'Loader') === FALSE) + { + // Found it - use a relative path for safety + $message[] = 'Filename: '.str_replace(array(APPPATH, BASEPATH), '', $call['file']); + $message[] = 'Line Number: '.$call['line']; + break; + } + } + } + + $error =& load_class('Exceptions', 'core'); + echo $error->show_error($heading, $message, 'error_db'); + exit(8); // EXIT_DATABASE + } + + // -------------------------------------------------------------------- + + /** + * Protect Identifiers + * + * This function is used extensively by the Query Builder class, and by + * a couple functions in this class. + * It takes a column or table name (optionally with an alias) and inserts + * the table prefix onto it. Some logic is necessary in order to deal with + * column names that include the path. Consider a query like this: + * + * SELECT hostname.database.table.column AS c FROM hostname.database.table + * + * Or a query with aliasing: + * + * SELECT m.member_id, m.member_name FROM members AS m + * + * Since the column name can include up to four segments (host, DB, table, column) + * or also have an alias prefix, we need to do a bit of work to figure this out and + * insert the table prefix (if it exists) in the proper position, and escape only + * the correct identifiers. + * + * @param string + * @param bool + * @param mixed + * @param bool + * @return string + */ + public function protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE) + { + if ( ! is_bool($protect_identifiers)) + { + $protect_identifiers = $this->_protect_identifiers; + } + + if (is_array($item)) + { + $escaped_array = array(); + foreach ($item as $k => $v) + { + $escaped_array[$this->protect_identifiers($k)] = $this->protect_identifiers($v, $prefix_single, $protect_identifiers, $field_exists); + } + + return $escaped_array; + } + + // This is basically a bug fix for queries that use MAX, MIN, etc. + // If a parenthesis is found we know that we do not need to + // escape the data or add a prefix. There's probably a more graceful + // way to deal with this, but I'm not thinking of it -- Rick + // + // Added exception for single quotes as well, we don't want to alter + // literal strings. -- Narf + if (strcspn($item, "()'") !== strlen($item)) + { + return $item; + } + + // Convert tabs or multiple spaces into single spaces + $item = preg_replace('/\s+/', ' ', trim($item)); + + // If the item has an alias declaration we remove it and set it aside. + // Note: strripos() is used in order to support spaces in table names + if ($offset = strripos($item, ' AS ')) + { + $alias = ($protect_identifiers) + ? substr($item, $offset, 4).$this->escape_identifiers(substr($item, $offset + 4)) + : substr($item, $offset); + $item = substr($item, 0, $offset); + } + elseif ($offset = strrpos($item, ' ')) + { + $alias = ($protect_identifiers) + ? ' '.$this->escape_identifiers(substr($item, $offset + 1)) + : substr($item, $offset); + $item = substr($item, 0, $offset); + } + else + { + $alias = ''; + } + + // Break the string apart if it contains periods, then insert the table prefix + // in the correct location, assuming the period doesn't indicate that we're dealing + // with an alias. While we're at it, we will escape the components + if (strpos($item, '.') !== FALSE) + { + $parts = explode('.', $item); + + // Does the first segment of the exploded item match + // one of the aliases previously identified? If so, + // we have nothing more to do other than escape the item + // + // NOTE: The ! empty() condition prevents this method + // from breaking when QB isn't enabled. + if ( ! empty($this->qb_aliased_tables) && in_array($parts[0], $this->qb_aliased_tables)) + { + if ($protect_identifiers === TRUE) + { + foreach ($parts as $key => $val) + { + if ( ! in_array($val, $this->_reserved_identifiers)) + { + $parts[$key] = $this->escape_identifiers($val); + } + } + + $item = implode('.', $parts); + } + + return $item.$alias; + } + + // Is there a table prefix defined in the config file? If not, no need to do anything + if ($this->dbprefix !== '') + { + // We now add the table prefix based on some logic. + // Do we have 4 segments (hostname.database.table.column)? + // If so, we add the table prefix to the column name in the 3rd segment. + if (isset($parts[3])) + { + $i = 2; + } + // Do we have 3 segments (database.table.column)? + // If so, we add the table prefix to the column name in 2nd position + elseif (isset($parts[2])) + { + $i = 1; + } + // Do we have 2 segments (table.column)? + // If so, we add the table prefix to the column name in 1st segment + else + { + $i = 0; + } + + // This flag is set when the supplied $item does not contain a field name. + // This can happen when this function is being called from a JOIN. + if ($field_exists === FALSE) + { + $i++; + } + + // Verify table prefix and replace if necessary + if ($this->swap_pre !== '' && strpos($parts[$i], $this->swap_pre) === 0) + { + $parts[$i] = preg_replace('/^'.$this->swap_pre.'(\S+?)/', $this->dbprefix.'\\1', $parts[$i]); + } + // We only add the table prefix if it does not already exist + elseif (strpos($parts[$i], $this->dbprefix) !== 0) + { + $parts[$i] = $this->dbprefix.$parts[$i]; + } + + // Put the parts back together + $item = implode('.', $parts); + } + + if ($protect_identifiers === TRUE) + { + $item = $this->escape_identifiers($item); + } + + return $item.$alias; + } + + // Is there a table prefix? If not, no need to insert it + if ($this->dbprefix !== '') + { + // Verify table prefix and replace if necessary + if ($this->swap_pre !== '' && strpos($item, $this->swap_pre) === 0) + { + $item = preg_replace('/^'.$this->swap_pre.'(\S+?)/', $this->dbprefix.'\\1', $item); + } + // Do we prefix an item with no segments? + elseif ($prefix_single === TRUE && strpos($item, $this->dbprefix) !== 0) + { + $item = $this->dbprefix.$item; + } + } + + if ($protect_identifiers === TRUE && ! in_array($item, $this->_reserved_identifiers)) + { + $item = $this->escape_identifiers($item); + } + + return $item.$alias; + } + + // -------------------------------------------------------------------- + + /** + * Dummy method that allows Query Builder class to be disabled + * and keep count_all() working. + * + * @return void + */ + protected function _reset_select() + { + } + +} diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php new file mode 100644 index 00000000..3cb02ca4 --- /dev/null +++ b/system/database/DB_forge.php @@ -0,0 +1,1032 @@ +db =& $db; + log_message('info', 'Database Forge Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @param string $db_name + * @return bool + */ + public function create_database($db_name) + { + if ($this->_create_database === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + elseif ( ! $this->db->query(sprintf($this->_create_database, $this->db->escape_identifiers($db_name), $this->db->char_set, $this->db->dbcollat))) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + + if ( ! empty($this->db->data_cache['db_names'])) + { + $this->db->data_cache['db_names'][] = $db_name; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @param string $db_name + * @return bool + */ + public function drop_database($db_name) + { + if ($this->_drop_database === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + elseif ( ! $this->db->query(sprintf($this->_drop_database, $this->db->escape_identifiers($db_name)))) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + + if ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($db_name), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Add Key + * + * @param string $key + * @param bool $primary + * @return CI_DB_forge + */ + public function add_key($key, $primary = FALSE) + { + // DO NOT change this! This condition is only applicable + // for PRIMARY keys because you can only have one such, + // and therefore all fields you add to it will be included + // in the same, composite PRIMARY KEY. + // + // It's not the same for regular indexes. + if ($primary === TRUE && is_array($key)) + { + foreach ($key as $one) + { + $this->add_key($one, $primary); + } + + return $this; + } + + if ($primary === TRUE) + { + $this->primary_keys[] = $key; + } + else + { + $this->keys[] = $key; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Add Field + * + * @param array $field + * @return CI_DB_forge + */ + public function add_field($field) + { + if (is_string($field)) + { + if ($field === 'id') + { + $this->add_field(array( + 'id' => array( + 'type' => 'INT', + 'constraint' => 9, + 'auto_increment' => TRUE + ) + )); + $this->add_key('id', TRUE); + } + else + { + if (strpos($field, ' ') === FALSE) + { + show_error('Field information is required for that operation.'); + } + + $this->fields[] = $field; + } + } + + if (is_array($field)) + { + $this->fields = array_merge($this->fields, $field); + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @param string $table Table name + * @param bool $if_not_exists Whether to add IF NOT EXISTS condition + * @param array $attributes Associative array of table attributes + * @return bool + */ + public function create_table($table, $if_not_exists = FALSE, array $attributes = array()) + { + if ($table === '') + { + show_error('A table name is required for that operation.'); + } + else + { + $table = $this->db->dbprefix.$table; + } + + if (count($this->fields) === 0) + { + show_error('Field information is required.'); + } + + $sql = $this->_create_table($table, $if_not_exists, $attributes); + + if (is_bool($sql)) + { + $this->_reset(); + if ($sql === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + } + + if (($result = $this->db->query($sql)) !== FALSE) + { + isset($this->db->data_cache['table_names']) && $this->db->data_cache['table_names'][] = $table; + + // Most databases don't support creating indexes from within the CREATE TABLE statement + if ( ! empty($this->keys)) + { + for ($i = 0, $sqls = $this->_process_indexes($table), $c = count($sqls); $i < $c; $i++) + { + $this->db->query($sqls[$i]); + } + } + } + + $this->_reset(); + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @param string $table Table name + * @param bool $if_not_exists Whether to add 'IF NOT EXISTS' condition + * @param array $attributes Associative array of table attributes + * @return mixed + */ + protected function _create_table($table, $if_not_exists, $attributes) + { + if ($if_not_exists === TRUE && $this->_create_table_if === FALSE) + { + if ($this->db->table_exists($table)) + { + return TRUE; + } + else + { + $if_not_exists = FALSE; + } + } + + $sql = ($if_not_exists) + ? sprintf($this->_create_table_if, $this->db->escape_identifiers($table)) + : 'CREATE TABLE'; + + $columns = $this->_process_fields(TRUE); + for ($i = 0, $c = count($columns); $i < $c; $i++) + { + $columns[$i] = ($columns[$i]['_literal'] !== FALSE) + ? "\n\t".$columns[$i]['_literal'] + : "\n\t".$this->_process_column($columns[$i]); + } + + $columns = implode(',', $columns) + .$this->_process_primary_keys($table); + + // Are indexes created from within the CREATE TABLE statement? (e.g. in MySQL) + if ($this->_create_table_keys === TRUE) + { + $columns .= $this->_process_indexes($table); + } + + // _create_table will usually have the following format: "%s %s (%s\n)" + $sql = sprintf($this->_create_table.'%s', + $sql, + $this->db->escape_identifiers($table), + $columns, + $this->_create_table_attr($attributes) + ); + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * CREATE TABLE attributes + * + * @param array $attributes Associative array of table attributes + * @return string + */ + protected function _create_table_attr($attributes) + { + $sql = ''; + + foreach (array_keys($attributes) as $key) + { + if (is_string($key)) + { + $sql .= ' '.strtoupper($key).' '.$attributes[$key]; + } + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @param string $table_name Table name + * @param bool $if_exists Whether to add an IF EXISTS condition + * @return bool + */ + public function drop_table($table_name, $if_exists = FALSE) + { + if ($table_name === '') + { + return ($this->db->db_debug) ? $this->db->display_error('db_table_name_required') : FALSE; + } + + if (($query = $this->_drop_table($this->db->dbprefix.$table_name, $if_exists)) === TRUE) + { + return TRUE; + } + + $query = $this->db->query($query); + + // Update table list cache + if ($query && ! empty($this->db->data_cache['table_names'])) + { + $key = array_search(strtolower($this->db->dbprefix.$table_name), array_map('strtolower', $this->db->data_cache['table_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['table_names'][$key]); + } + } + + return $query; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * Generates a platform-specific DROP TABLE string + * + * @param string $table Table name + * @param bool $if_exists Whether to add an IF EXISTS condition + * @return mixed (Returns a platform-specific DROP table string, or TRUE to indicate there's nothing to do) + */ + protected function _drop_table($table, $if_exists) + { + $sql = 'DROP TABLE'; + + if ($if_exists) + { + if ($this->_drop_table_if === FALSE) + { + if ( ! $this->db->table_exists($table)) + { + return TRUE; + } + } + else + { + $sql = sprintf($this->_drop_table_if, $this->db->escape_identifiers($table)); + } + } + + return $sql.' '.$this->db->escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Rename Table + * + * @param string $table_name Old table name + * @param string $new_table_name New table name + * @return bool + */ + public function rename_table($table_name, $new_table_name) + { + if ($table_name === '' OR $new_table_name === '') + { + show_error('A table name is required for that operation.'); + return FALSE; + } + elseif ($this->_rename_table === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + $result = $this->db->query(sprintf($this->_rename_table, + $this->db->escape_identifiers($this->db->dbprefix.$table_name), + $this->db->escape_identifiers($this->db->dbprefix.$new_table_name)) + ); + + if ($result && ! empty($this->db->data_cache['table_names'])) + { + $key = array_search(strtolower($this->db->dbprefix.$table_name), array_map('strtolower', $this->db->data_cache['table_names']), TRUE); + if ($key !== FALSE) + { + $this->db->data_cache['table_names'][$key] = $this->db->dbprefix.$new_table_name; + } + } + + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Column Add + * + * @todo Remove deprecated $_after option in 3.1+ + * @param string $table Table name + * @param array $field Column definition + * @param string $_after Column for AFTER clause (deprecated) + * @return bool + */ + public function add_column($table, $field, $_after = NULL) + { + // Work-around for literal column definitions + is_array($field) OR $field = array($field); + + foreach (array_keys($field) as $k) + { + // Backwards-compatibility work-around for MySQL/CUBRID AFTER clause (remove in 3.1+) + if ($_after !== NULL && is_array($field[$k]) && ! isset($field[$k]['after'])) + { + $field[$k]['after'] = $_after; + } + + $this->add_field(array($k => $field[$k])); + } + + $sqls = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->_process_fields()); + $this->_reset(); + if ($sqls === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + for ($i = 0, $c = count($sqls); $i < $c; $i++) + { + if ($this->db->query($sqls[$i]) === FALSE) + { + return FALSE; + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Column Drop + * + * @param string $table Table name + * @param string $column_name Column name + * @return bool + */ + public function drop_column($table, $column_name) + { + $sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name); + if ($sql === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Column Modify + * + * @param string $table Table name + * @param string $field Column definition + * @return bool + */ + public function modify_column($table, $field) + { + // Work-around for literal column definitions + is_array($field) OR $field = array($field); + + foreach (array_keys($field) as $k) + { + $this->add_field(array($k => $field[$k])); + } + + if (count($this->fields) === 0) + { + show_error('Field information is required.'); + } + + $sqls = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->_process_fields()); + $this->_reset(); + if ($sqls === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + for ($i = 0, $c = count($sqls); $i < $c; $i++) + { + if ($this->db->query($sqls[$i]) === FALSE) + { + return FALSE; + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' '; + + // DROP has everything it needs now. + if ($alter_type === 'DROP') + { + return $sql.'DROP COLUMN '.$this->db->escape_identifiers($field); + } + + $sql .= ($alter_type === 'ADD') + ? 'ADD ' + : $alter_type.' COLUMN '; + + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + $sqls[] = $sql + .($field[$i]['_literal'] !== FALSE ? $field[$i]['_literal'] : $this->_process_column($field[$i])); + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Process fields + * + * @param bool $create_table + * @return array + */ + protected function _process_fields($create_table = FALSE) + { + $fields = array(); + + foreach ($this->fields as $key => $attributes) + { + if (is_int($key) && ! is_array($attributes)) + { + $fields[] = array('_literal' => $attributes); + continue; + } + + $attributes = array_change_key_case($attributes, CASE_UPPER); + + if ($create_table === TRUE && empty($attributes['TYPE'])) + { + continue; + } + + isset($attributes['TYPE']) && $this->_attr_type($attributes); + + $field = array( + 'name' => $key, + 'new_name' => isset($attributes['NAME']) ? $attributes['NAME'] : NULL, + 'type' => isset($attributes['TYPE']) ? $attributes['TYPE'] : NULL, + 'length' => '', + 'unsigned' => '', + 'null' => '', + 'unique' => '', + 'default' => '', + 'auto_increment' => '', + '_literal' => FALSE + ); + + isset($attributes['TYPE']) && $this->_attr_unsigned($attributes, $field); + + if ($create_table === FALSE) + { + if (isset($attributes['AFTER'])) + { + $field['after'] = $attributes['AFTER']; + } + elseif (isset($attributes['FIRST'])) + { + $field['first'] = (bool) $attributes['FIRST']; + } + } + + $this->_attr_default($attributes, $field); + + if (isset($attributes['NULL'])) + { + if ($attributes['NULL'] === TRUE) + { + $field['null'] = empty($this->_null) ? '' : ' '.$this->_null; + } + else + { + $field['null'] = ' NOT NULL'; + } + } + elseif ($create_table === TRUE) + { + $field['null'] = ' NOT NULL'; + } + + $this->_attr_auto_increment($attributes, $field); + $this->_attr_unique($attributes, $field); + + if (isset($attributes['COMMENT'])) + { + $field['comment'] = $this->db->escape($attributes['COMMENT']); + } + + if (isset($attributes['TYPE']) && ! empty($attributes['CONSTRAINT'])) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'ENUM': + case 'SET': + $attributes['CONSTRAINT'] = $this->db->escape($attributes['CONSTRAINT']); + default: + $field['length'] = is_array($attributes['CONSTRAINT']) + ? '('.implode(',', $attributes['CONSTRAINT']).')' + : '('.$attributes['CONSTRAINT'].')'; + break; + } + } + + $fields[] = $field; + } + + return $fields; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['default'] + .$field['null'] + .$field['auto_increment'] + .$field['unique']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + // Usually overridden by drivers + } + + // -------------------------------------------------------------------- + + /** + * Field attribute UNSIGNED + * + * Depending on the _unsigned property value: + * + * - TRUE will always set $field['unsigned'] to 'UNSIGNED' + * - FALSE will always set $field['unsigned'] to '' + * - array(TYPE) will set $field['unsigned'] to 'UNSIGNED', + * if $attributes['TYPE'] is found in the array + * - array(TYPE => UTYPE) will change $field['type'], + * from TYPE to UTYPE in case of a match + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_unsigned(&$attributes, &$field) + { + if (empty($attributes['UNSIGNED']) OR $attributes['UNSIGNED'] !== TRUE) + { + return; + } + + // Reset the attribute in order to avoid issues if we do type conversion + $attributes['UNSIGNED'] = FALSE; + + if (is_array($this->_unsigned)) + { + foreach (array_keys($this->_unsigned) as $key) + { + if (is_int($key) && strcasecmp($attributes['TYPE'], $this->_unsigned[$key]) === 0) + { + $field['unsigned'] = ' UNSIGNED'; + return; + } + elseif (is_string($key) && strcasecmp($attributes['TYPE'], $key) === 0) + { + $field['type'] = $key; + return; + } + } + + return; + } + + $field['unsigned'] = ($this->_unsigned === TRUE) ? ' UNSIGNED' : ''; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute DEFAULT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_default(&$attributes, &$field) + { + if ($this->_default === FALSE) + { + return; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + if ($attributes['DEFAULT'] === NULL) + { + $field['default'] = empty($this->_null) ? '' : $this->_default.$this->_null; + + // Override the NULL attribute if that's our default + $attributes['NULL'] = TRUE; + $field['null'] = empty($this->_null) ? '' : ' '.$this->_null; + } + else + { + $field['default'] = $this->_default.$this->db->escape($attributes['DEFAULT']); + } + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute UNIQUE + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_unique(&$attributes, &$field) + { + if ( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE) + { + $field['unique'] = ' UNIQUE'; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' AUTO_INCREMENT'; + } + } + + // -------------------------------------------------------------------- + + /** + * Process primary keys + * + * @param string $table Table name + * @return string + */ + protected function _process_primary_keys($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->primary_keys); $i < $c; $i++) + { + if ( ! isset($this->fields[$this->primary_keys[$i]])) + { + unset($this->primary_keys[$i]); + } + } + + if (count($this->primary_keys) > 0) + { + $sql .= ",\n\tCONSTRAINT ".$this->db->escape_identifiers('pk_'.$table) + .' PRIMARY KEY('.implode(', ', $this->db->escape_identifiers($this->primary_keys)).')'; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table Table name + * @return string[] list of SQL statements + */ + protected function _process_indexes($table) + { + $sqls = array(); + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sqls[] = 'CREATE INDEX '.$this->db->escape_identifiers($table.'_'.implode('_', $this->keys[$i])) + .' ON '.$this->db->escape_identifiers($table) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).');'; + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Reset + * + * Resets table creation vars + * + * @return void + */ + protected function _reset() + { + $this->fields = $this->keys = $this->primary_keys = array(); + } + +} diff --git a/system/database/DB_query_builder.php b/system/database/DB_query_builder.php new file mode 100644 index 00000000..81603bf3 --- /dev/null +++ b/system/database/DB_query_builder.php @@ -0,0 +1,2803 @@ +_protect_identifiers; + + foreach ($select as $val) + { + $val = trim($val); + + if ($val !== '') + { + $this->qb_select[] = $val; + $this->qb_no_escape[] = $escape; + + if ($this->qb_caching === TRUE) + { + $this->qb_cache_select[] = $val; + $this->qb_cache_exists[] = 'select'; + $this->qb_cache_no_escape[] = $escape; + } + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Select Max + * + * Generates a SELECT MAX(field) portion of a query + * + * @param string the field + * @param string an alias + * @return CI_DB_query_builder + */ + public function select_max($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'MAX'); + } + + // -------------------------------------------------------------------- + + /** + * Select Min + * + * Generates a SELECT MIN(field) portion of a query + * + * @param string the field + * @param string an alias + * @return CI_DB_query_builder + */ + public function select_min($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'MIN'); + } + + // -------------------------------------------------------------------- + + /** + * Select Average + * + * Generates a SELECT AVG(field) portion of a query + * + * @param string the field + * @param string an alias + * @return CI_DB_query_builder + */ + public function select_avg($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'AVG'); + } + + // -------------------------------------------------------------------- + + /** + * Select Sum + * + * Generates a SELECT SUM(field) portion of a query + * + * @param string the field + * @param string an alias + * @return CI_DB_query_builder + */ + public function select_sum($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'SUM'); + } + + // -------------------------------------------------------------------- + + /** + * SELECT [MAX|MIN|AVG|SUM]() + * + * @used-by select_max() + * @used-by select_min() + * @used-by select_avg() + * @used-by select_sum() + * + * @param string $select Field name + * @param string $alias + * @param string $type + * @return CI_DB_query_builder + */ + protected function _max_min_avg_sum($select = '', $alias = '', $type = 'MAX') + { + if ( ! is_string($select) OR $select === '') + { + $this->display_error('db_invalid_query'); + } + + $type = strtoupper($type); + + if ( ! in_array($type, array('MAX', 'MIN', 'AVG', 'SUM'))) + { + show_error('Invalid function type: '.$type); + } + + if ($alias === '') + { + $alias = $this->_create_alias_from_table(trim($select)); + } + + $sql = $type.'('.$this->protect_identifiers(trim($select)).') AS '.$this->escape_identifiers(trim($alias)); + + $this->qb_select[] = $sql; + $this->qb_no_escape[] = NULL; + + if ($this->qb_caching === TRUE) + { + $this->qb_cache_select[] = $sql; + $this->qb_cache_exists[] = 'select'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Determines the alias name based on the table + * + * @param string $item + * @return string + */ + protected function _create_alias_from_table($item) + { + if (strpos($item, '.') !== FALSE) + { + $item = explode('.', $item); + return end($item); + } + + return $item; + } + + // -------------------------------------------------------------------- + + /** + * DISTINCT + * + * Sets a flag which tells the query string compiler to add DISTINCT + * + * @param bool $val + * @return CI_DB_query_builder + */ + public function distinct($val = TRUE) + { + $this->qb_distinct = is_bool($val) ? $val : TRUE; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * From + * + * Generates the FROM portion of the query + * + * @param mixed $from can be a string or array + * @return CI_DB_query_builder + */ + public function from($from) + { + foreach ((array) $from as $val) + { + if (strpos($val, ',') !== FALSE) + { + foreach (explode(',', $val) as $v) + { + $v = trim($v); + $this->_track_aliases($v); + + $this->qb_from[] = $v = $this->protect_identifiers($v, TRUE, NULL, FALSE); + + if ($this->qb_caching === TRUE) + { + $this->qb_cache_from[] = $v; + $this->qb_cache_exists[] = 'from'; + } + } + } + else + { + $val = trim($val); + + // Extract any aliases that might exist. We use this information + // in the protect_identifiers to know whether to add a table prefix + $this->_track_aliases($val); + + $this->qb_from[] = $val = $this->protect_identifiers($val, TRUE, NULL, FALSE); + + if ($this->qb_caching === TRUE) + { + $this->qb_cache_from[] = $val; + $this->qb_cache_exists[] = 'from'; + } + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * JOIN + * + * Generates the JOIN portion of the query + * + * @param string + * @param string the join condition + * @param string the type of join + * @param string whether not to try to escape identifiers + * @return CI_DB_query_builder + */ + public function join($table, $cond, $type = '', $escape = NULL) + { + if ($type !== '') + { + $type = strtoupper(trim($type)); + + if ( ! in_array($type, array('LEFT', 'RIGHT', 'OUTER', 'INNER', 'LEFT OUTER', 'RIGHT OUTER'), TRUE)) + { + $type = ''; + } + else + { + $type .= ' '; + } + } + + // Extract any aliases that might exist. We use this information + // in the protect_identifiers to know whether to add a table prefix + $this->_track_aliases($table); + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + if ( ! $this->_has_operator($cond)) + { + $cond = ' USING ('.($escape ? $this->escape_identifiers($cond) : $cond).')'; + } + elseif ($escape === FALSE) + { + $cond = ' ON '.$cond; + } + else + { + // Split multiple conditions + if (preg_match_all('/\sAND\s|\sOR\s/i', $cond, $joints, PREG_OFFSET_CAPTURE)) + { + $conditions = array(); + $joints = $joints[0]; + array_unshift($joints, array('', 0)); + + for ($i = count($joints) - 1, $pos = strlen($cond); $i >= 0; $i--) + { + $joints[$i][1] += strlen($joints[$i][0]); // offset + $conditions[$i] = substr($cond, $joints[$i][1], $pos - $joints[$i][1]); + $pos = $joints[$i][1] - strlen($joints[$i][0]); + $joints[$i] = $joints[$i][0]; + } + } + else + { + $conditions = array($cond); + $joints = array(''); + } + + $cond = ' ON '; + for ($i = 0, $c = count($conditions); $i < $c; $i++) + { + $operator = $this->_get_operator($conditions[$i]); + $cond .= $joints[$i]; + $cond .= preg_match("/(\(*)?([\[\]\w\.'-]+)".preg_quote($operator)."(.*)/i", $conditions[$i], $match) + ? $match[1].$this->protect_identifiers($match[2]).$operator.$this->protect_identifiers($match[3]) + : $conditions[$i]; + } + } + + // Do we want to escape the table name? + if ($escape === TRUE) + { + $table = $this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // Assemble the JOIN statement + $this->qb_join[] = $join = $type.'JOIN '.$table.$cond; + + if ($this->qb_caching === TRUE) + { + $this->qb_cache_join[] = $join; + $this->qb_cache_exists[] = 'join'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * WHERE + * + * Generates the WHERE portion of the query. + * Separates multiple calls with 'AND'. + * + * @param mixed + * @param mixed + * @param bool + * @return CI_DB_query_builder + */ + public function where($key, $value = NULL, $escape = NULL) + { + return $this->_wh('qb_where', $key, $value, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR WHERE + * + * Generates the WHERE portion of the query. + * Separates multiple calls with 'OR'. + * + * @param mixed + * @param mixed + * @param bool + * @return CI_DB_query_builder + */ + public function or_where($key, $value = NULL, $escape = NULL) + { + return $this->_wh('qb_where', $key, $value, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * WHERE, HAVING + * + * @used-by where() + * @used-by or_where() + * @used-by having() + * @used-by or_having() + * + * @param string $qb_key 'qb_where' or 'qb_having' + * @param mixed $key + * @param mixed $value + * @param string $type + * @param bool $escape + * @return CI_DB_query_builder + */ + protected function _wh($qb_key, $key, $value = NULL, $type = 'AND ', $escape = NULL) + { + $qb_cache_key = ($qb_key === 'qb_having') ? 'qb_cache_having' : 'qb_cache_where'; + + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + // If the escape value was not set will base it on the global setting + is_bool($escape) OR $escape = $this->_protect_identifiers; + + foreach ($key as $k => $v) + { + $prefix = (count($this->$qb_key) === 0 && count($this->$qb_cache_key) === 0) + ? $this->_group_get_type('') + : $this->_group_get_type($type); + + if ($v !== NULL) + { + if ($escape === TRUE) + { + $v = ' '.$this->escape($v); + } + + if ( ! $this->_has_operator($k)) + { + $k .= ' = '; + } + } + elseif ( ! $this->_has_operator($k)) + { + // value appears not to have been set, assign the test to IS NULL + $k .= ' IS NULL'; + } + elseif (preg_match('/\s*(!?=|<>|\sIS(?:\s+NOT)?\s)\s*$/i', $k, $match, PREG_OFFSET_CAPTURE)) + { + $k = substr($k, 0, $match[0][1]).($match[1][0] === '=' ? ' IS NULL' : ' IS NOT NULL'); + } + + $this->{$qb_key}[] = array('condition' => $prefix.$k.$v, 'escape' => $escape); + if ($this->qb_caching === TRUE) + { + $this->{$qb_cache_key}[] = array('condition' => $prefix.$k.$v, 'escape' => $escape); + $this->qb_cache_exists[] = substr($qb_key, 3); + } + + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * WHERE IN + * + * Generates a WHERE field IN('item', 'item') SQL query, + * joined with 'AND' if appropriate. + * + * @param string $key The field to search + * @param array $values The values searched on + * @param bool $escape + * @return CI_DB_query_builder + */ + public function where_in($key = NULL, $values = NULL, $escape = NULL) + { + return $this->_where_in($key, $values, FALSE, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR WHERE IN + * + * Generates a WHERE field IN('item', 'item') SQL query, + * joined with 'OR' if appropriate. + * + * @param string $key The field to search + * @param array $values The values searched on + * @param bool $escape + * @return CI_DB_query_builder + */ + public function or_where_in($key = NULL, $values = NULL, $escape = NULL) + { + return $this->_where_in($key, $values, FALSE, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * WHERE NOT IN + * + * Generates a WHERE field NOT IN('item', 'item') SQL query, + * joined with 'AND' if appropriate. + * + * @param string $key The field to search + * @param array $values The values searched on + * @param bool $escape + * @return CI_DB_query_builder + */ + public function where_not_in($key = NULL, $values = NULL, $escape = NULL) + { + return $this->_where_in($key, $values, TRUE, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR WHERE NOT IN + * + * Generates a WHERE field NOT IN('item', 'item') SQL query, + * joined with 'OR' if appropriate. + * + * @param string $key The field to search + * @param array $values The values searched on + * @param bool $escape + * @return CI_DB_query_builder + */ + public function or_where_not_in($key = NULL, $values = NULL, $escape = NULL) + { + return $this->_where_in($key, $values, TRUE, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * Internal WHERE IN + * + * @used-by where_in() + * @used-by or_where_in() + * @used-by where_not_in() + * @used-by or_where_not_in() + * + * @param string $key The field to search + * @param array $values The values searched on + * @param bool $not If the statement would be IN or NOT IN + * @param string $type + * @param bool $escape + * @return CI_DB_query_builder + */ + protected function _where_in($key = NULL, $values = NULL, $not = FALSE, $type = 'AND ', $escape = NULL) + { + if ($key === NULL OR $values === NULL) + { + return $this; + } + + if ( ! is_array($values)) + { + $values = array($values); + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + $not = ($not) ? ' NOT' : ''; + + if ($escape === TRUE) + { + $where_in = array(); + foreach ($values as $value) + { + $where_in[] = $this->escape($value); + } + } + else + { + $where_in = array_values($values); + } + + $prefix = (count($this->qb_where) === 0 && count($this->qb_cache_where) === 0) + ? $this->_group_get_type('') + : $this->_group_get_type($type); + + $where_in = array( + 'condition' => $prefix.$key.$not.' IN('.implode(', ', $where_in).')', + 'escape' => $escape + ); + + $this->qb_where[] = $where_in; + if ($this->qb_caching === TRUE) + { + $this->qb_cache_where[] = $where_in; + $this->qb_cache_exists[] = 'where'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * LIKE + * + * Generates a %LIKE% portion of the query. + * Separates multiple calls with 'AND'. + * + * @param mixed $field + * @param string $match + * @param string $side + * @param bool $escape + * @return CI_DB_query_builder + */ + public function like($field, $match = '', $side = 'both', $escape = NULL) + { + return $this->_like($field, $match, 'AND ', $side, '', $escape); + } + + // -------------------------------------------------------------------- + + /** + * NOT LIKE + * + * Generates a NOT LIKE portion of the query. + * Separates multiple calls with 'AND'. + * + * @param mixed $field + * @param string $match + * @param string $side + * @param bool $escape + * @return CI_DB_query_builder + */ + public function not_like($field, $match = '', $side = 'both', $escape = NULL) + { + return $this->_like($field, $match, 'AND ', $side, 'NOT', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR LIKE + * + * Generates a %LIKE% portion of the query. + * Separates multiple calls with 'OR'. + * + * @param mixed $field + * @param string $match + * @param string $side + * @param bool $escape + * @return CI_DB_query_builder + */ + public function or_like($field, $match = '', $side = 'both', $escape = NULL) + { + return $this->_like($field, $match, 'OR ', $side, '', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR NOT LIKE + * + * Generates a NOT LIKE portion of the query. + * Separates multiple calls with 'OR'. + * + * @param mixed $field + * @param string $match + * @param string $side + * @param bool $escape + * @return CI_DB_query_builder + */ + public function or_not_like($field, $match = '', $side = 'both', $escape = NULL) + { + return $this->_like($field, $match, 'OR ', $side, 'NOT', $escape); + } + + // -------------------------------------------------------------------- + + /** + * Internal LIKE + * + * @used-by like() + * @used-by or_like() + * @used-by not_like() + * @used-by or_not_like() + * + * @param mixed $field + * @param string $match + * @param string $type + * @param string $side + * @param string $not + * @param bool $escape + * @return CI_DB_query_builder + */ + protected function _like($field, $match = '', $type = 'AND ', $side = 'both', $not = '', $escape = NULL) + { + if ( ! is_array($field)) + { + $field = array($field => $match); + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + // lowercase $side in case somebody writes e.g. 'BEFORE' instead of 'before' (doh) + $side = strtolower($side); + + foreach ($field as $k => $v) + { + $prefix = (count($this->qb_where) === 0 && count($this->qb_cache_where) === 0) + ? $this->_group_get_type('') : $this->_group_get_type($type); + + if ($escape === TRUE) + { + $v = $this->escape_like_str($v); + } + + if ($side === 'none') + { + $like_statement = "{$prefix} {$k} {$not} LIKE '{$v}'"; + } + elseif ($side === 'before') + { + $like_statement = "{$prefix} {$k} {$not} LIKE '%{$v}'"; + } + elseif ($side === 'after') + { + $like_statement = "{$prefix} {$k} {$not} LIKE '{$v}%'"; + } + else + { + $like_statement = "{$prefix} {$k} {$not} LIKE '%{$v}%'"; + } + + // some platforms require an escape sequence definition for LIKE wildcards + if ($escape === TRUE && $this->_like_escape_str !== '') + { + $like_statement .= sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + $this->qb_where[] = array('condition' => $like_statement, 'escape' => $escape); + if ($this->qb_caching === TRUE) + { + $this->qb_cache_where[] = array('condition' => $like_statement, 'escape' => $escape); + $this->qb_cache_exists[] = 'where'; + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Starts a query group. + * + * @param string $not (Internal use only) + * @param string $type (Internal use only) + * @return CI_DB_query_builder + */ + public function group_start($not = '', $type = 'AND ') + { + $type = $this->_group_get_type($type); + + $this->qb_where_group_started = TRUE; + $prefix = (count($this->qb_where) === 0 && count($this->qb_cache_where) === 0) ? '' : $type; + $where = array( + 'condition' => $prefix.$not.str_repeat(' ', ++$this->qb_where_group_count).' (', + 'escape' => FALSE + ); + + $this->qb_where[] = $where; + if ($this->qb_caching) + { + $this->qb_cache_where[] = $where; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Starts a query group, but ORs the group + * + * @return CI_DB_query_builder + */ + public function or_group_start() + { + return $this->group_start('', 'OR '); + } + + // -------------------------------------------------------------------- + + /** + * Starts a query group, but NOTs the group + * + * @return CI_DB_query_builder + */ + public function not_group_start() + { + return $this->group_start('NOT ', 'AND '); + } + + // -------------------------------------------------------------------- + + /** + * Starts a query group, but OR NOTs the group + * + * @return CI_DB_query_builder + */ + public function or_not_group_start() + { + return $this->group_start('NOT ', 'OR '); + } + + // -------------------------------------------------------------------- + + /** + * Ends a query group + * + * @return CI_DB_query_builder + */ + public function group_end() + { + $this->qb_where_group_started = FALSE; + $where = array( + 'condition' => str_repeat(' ', $this->qb_where_group_count--).')', + 'escape' => FALSE + ); + + $this->qb_where[] = $where; + if ($this->qb_caching) + { + $this->qb_cache_where[] = $where; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Group_get_type + * + * @used-by group_start() + * @used-by _like() + * @used-by _wh() + * @used-by _where_in() + * + * @param string $type + * @return string + */ + protected function _group_get_type($type) + { + if ($this->qb_where_group_started) + { + $type = ''; + $this->qb_where_group_started = FALSE; + } + + return $type; + } + + // -------------------------------------------------------------------- + + /** + * GROUP BY + * + * @param string $by + * @param bool $escape + * @return CI_DB_query_builder + */ + public function group_by($by, $escape = NULL) + { + is_bool($escape) OR $escape = $this->_protect_identifiers; + + if (is_string($by)) + { + $by = ($escape === TRUE) + ? explode(',', $by) + : array($by); + } + + foreach ($by as $val) + { + $val = trim($val); + + if ($val !== '') + { + $val = array('field' => $val, 'escape' => $escape); + + $this->qb_groupby[] = $val; + if ($this->qb_caching === TRUE) + { + $this->qb_cache_groupby[] = $val; + $this->qb_cache_exists[] = 'groupby'; + } + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * HAVING + * + * Separates multiple calls with 'AND'. + * + * @param string $key + * @param string $value + * @param bool $escape + * @return CI_DB_query_builder + */ + public function having($key, $value = NULL, $escape = NULL) + { + return $this->_wh('qb_having', $key, $value, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR HAVING + * + * Separates multiple calls with 'OR'. + * + * @param string $key + * @param string $value + * @param bool $escape + * @return CI_DB_query_builder + */ + public function or_having($key, $value = NULL, $escape = NULL) + { + return $this->_wh('qb_having', $key, $value, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * ORDER BY + * + * @param string $orderby + * @param string $direction ASC, DESC or RANDOM + * @param bool $escape + * @return CI_DB_query_builder + */ + public function order_by($orderby, $direction = '', $escape = NULL) + { + $direction = strtoupper(trim($direction)); + + if ($direction === 'RANDOM') + { + $direction = ''; + + // Do we have a seed value? + $orderby = ctype_digit((string) $orderby) + ? sprintf($this->_random_keyword[1], $orderby) + : $this->_random_keyword[0]; + } + elseif (empty($orderby)) + { + return $this; + } + elseif ($direction !== '') + { + $direction = in_array($direction, array('ASC', 'DESC'), TRUE) ? ' '.$direction : ''; + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + if ($escape === FALSE) + { + $qb_orderby[] = array('field' => $orderby, 'direction' => $direction, 'escape' => FALSE); + } + else + { + $qb_orderby = array(); + foreach (explode(',', $orderby) as $field) + { + $qb_orderby[] = ($direction === '' && preg_match('/\s+(ASC|DESC)$/i', rtrim($field), $match, PREG_OFFSET_CAPTURE)) + ? array('field' => ltrim(substr($field, 0, $match[0][1])), 'direction' => ' '.$match[1][0], 'escape' => TRUE) + : array('field' => trim($field), 'direction' => $direction, 'escape' => TRUE); + } + } + + $this->qb_orderby = array_merge($this->qb_orderby, $qb_orderby); + if ($this->qb_caching === TRUE) + { + $this->qb_cache_orderby = array_merge($this->qb_cache_orderby, $qb_orderby); + $this->qb_cache_exists[] = 'orderby'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * @param int $value LIMIT value + * @param int $offset OFFSET value + * @return CI_DB_query_builder + */ + public function limit($value, $offset = 0) + { + is_null($value) OR $this->qb_limit = (int) $value; + empty($offset) OR $this->qb_offset = (int) $offset; + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Sets the OFFSET value + * + * @param int $offset OFFSET value + * @return CI_DB_query_builder + */ + public function offset($offset) + { + empty($offset) OR $this->qb_offset = (int) $offset; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * LIMIT string + * + * Generates a platform-specific LIMIT clause. + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + return $sql.' LIMIT '.($this->qb_offset ? $this->qb_offset.', ' : '').(int) $this->qb_limit; + } + + // -------------------------------------------------------------------- + + /** + * The "set" function. + * + * Allows key/value pairs to be set for inserting or updating + * + * @param mixed + * @param string + * @param bool + * @return CI_DB_query_builder + */ + public function set($key, $value = '', $escape = NULL) + { + $key = $this->_object_to_array($key); + + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + foreach ($key as $k => $v) + { + $this->qb_set[$this->protect_identifiers($k, FALSE, $escape)] = ($escape) + ? $this->escape($v) : $v; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get SELECT query string + * + * Compiles a SELECT query string and returns the sql. + * + * @param string the table name to select from (optional) + * @param bool TRUE: resets QB values; FALSE: leave QB values alone + * @return string + */ + public function get_compiled_select($table = '', $reset = TRUE) + { + if ($table !== '') + { + $this->_track_aliases($table); + $this->from($table); + } + + $select = $this->_compile_select(); + + if ($reset === TRUE) + { + $this->_reset_select(); + } + + return $select; + } + + // -------------------------------------------------------------------- + + /** + * Get + * + * Compiles the select statement based on the other functions called + * and runs the query + * + * @param string the table + * @param string the limit clause + * @param string the offset clause + * @return CI_DB_result + */ + public function get($table = '', $limit = NULL, $offset = NULL) + { + if ($table !== '') + { + $this->_track_aliases($table); + $this->from($table); + } + + if ( ! empty($limit)) + { + $this->limit($limit, $offset); + } + + $result = $this->query($this->_compile_select()); + $this->_reset_select(); + return $result; + } + + // -------------------------------------------------------------------- + + /** + * "Count All Results" query + * + * Generates a platform-specific query string that counts all records + * returned by an Query Builder query. + * + * @param string + * @param bool the reset clause + * @return int + */ + public function count_all_results($table = '', $reset = TRUE) + { + if ($table !== '') + { + $this->_track_aliases($table); + $this->from($table); + } + + // ORDER BY usage is often problematic here (most notably + // on Microsoft SQL Server) and ultimately unnecessary + // for selecting COUNT(*) ... + $qb_orderby = $this->qb_orderby; + $qb_cache_orderby = $this->qb_cache_orderby; + $this->qb_orderby = $this->qb_cache_orderby = NULL; + + $result = ($this->qb_distinct === TRUE OR ! empty($this->qb_groupby) OR ! empty($this->qb_cache_groupby) OR $this->qb_limit OR $this->qb_offset) + ? $this->query($this->_count_string.$this->protect_identifiers('numrows')."\nFROM (\n".$this->_compile_select()."\n) CI_count_all_results") + : $this->query($this->_compile_select($this->_count_string.$this->protect_identifiers('numrows'))); + + if ($reset === TRUE) + { + $this->_reset_select(); + } + else + { + $this->qb_orderby = $qb_orderby; + $this->qb_cache_orderby = $qb_cache_orderby; + } + + if ($result->num_rows() === 0) + { + return 0; + } + + $row = $result->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Get_Where + * + * Allows the where clause, limit and offset to be added directly + * + * @param string $table + * @param string $where + * @param int $limit + * @param int $offset + * @return CI_DB_result + */ + public function get_where($table = '', $where = NULL, $limit = NULL, $offset = NULL) + { + if ($table !== '') + { + $this->from($table); + } + + if ($where !== NULL) + { + $this->where($where); + } + + if ( ! empty($limit)) + { + $this->limit($limit, $offset); + } + + $result = $this->query($this->_compile_select()); + $this->_reset_select(); + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Insert_Batch + * + * Compiles batch insert strings and runs the queries + * + * @param string $table Table to insert into + * @param array $set An associative array of insert values + * @param bool $escape Whether to escape values and identifiers + * @return int Number of rows inserted or FALSE on failure + */ + public function insert_batch($table, $set = NULL, $escape = NULL, $batch_size = 100) + { + if ($set === NULL) + { + if (empty($this->qb_set)) + { + return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE; + } + } + else + { + if (empty($set)) + { + return ($this->db_debug) ? $this->display_error('insert_batch() called with no data') : FALSE; + } + + $this->set_insert_batch($set, '', $escape); + } + + if (strlen($table) === 0) + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + + // Batch this baby + $affected_rows = 0; + for ($i = 0, $total = count($this->qb_set); $i < $total; $i += $batch_size) + { + if ($this->query($this->_insert_batch($this->protect_identifiers($table, TRUE, $escape, FALSE), $this->qb_keys, array_slice($this->qb_set, $i, $batch_size)))) + { + $affected_rows += $this->affected_rows(); + } + } + + $this->_reset_write(); + return $affected_rows; + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _insert_batch($table, $keys, $values) + { + return 'INSERT INTO '.$table.' ('.implode(', ', $keys).') VALUES '.implode(', ', $values); + } + + // -------------------------------------------------------------------- + + /** + * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts + * + * @param mixed + * @param string + * @param bool + * @return CI_DB_query_builder + */ + public function set_insert_batch($key, $value = '', $escape = NULL) + { + $key = $this->_object_to_array_batch($key); + + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + $keys = array_keys($this->_object_to_array(reset($key))); + sort($keys); + + foreach ($key as $row) + { + $row = $this->_object_to_array($row); + if (count(array_diff($keys, array_keys($row))) > 0 OR count(array_diff(array_keys($row), $keys)) > 0) + { + // batch function above returns an error on an empty array + $this->qb_set[] = array(); + return; + } + + ksort($row); // puts $row in the same order as our keys + + if ($escape !== FALSE) + { + $clean = array(); + foreach ($row as $value) + { + $clean[] = $this->escape($value); + } + + $row = $clean; + } + + $this->qb_set[] = '('.implode(',', $row).')'; + } + + foreach ($keys as $k) + { + $this->qb_keys[] = $this->protect_identifiers($k, FALSE, $escape); + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get INSERT query string + * + * Compiles an insert query and returns the sql + * + * @param string the table to insert into + * @param bool TRUE: reset QB values; FALSE: leave QB values alone + * @return string + */ + public function get_compiled_insert($table = '', $reset = TRUE) + { + if ($this->_validate_insert($table) === FALSE) + { + return FALSE; + } + + $sql = $this->_insert( + $this->protect_identifiers( + $this->qb_from[0], TRUE, NULL, FALSE + ), + array_keys($this->qb_set), + array_values($this->qb_set) + ); + + if ($reset === TRUE) + { + $this->_reset_write(); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Insert + * + * Compiles an insert string and runs the query + * + * @param string the table to insert data into + * @param array an associative array of insert values + * @param bool $escape Whether to escape values and identifiers + * @return bool TRUE on success, FALSE on failure + */ + public function insert($table = '', $set = NULL, $escape = NULL) + { + if ($set !== NULL) + { + $this->set($set, '', $escape); + } + + if ($this->_validate_insert($table) === FALSE) + { + return FALSE; + } + + $sql = $this->_insert( + $this->protect_identifiers( + $this->qb_from[0], TRUE, $escape, FALSE + ), + array_keys($this->qb_set), + array_values($this->qb_set) + ); + + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Validate Insert + * + * This method is used by both insert() and get_compiled_insert() to + * validate that the there data is actually being set and that table + * has been chosen to be inserted into. + * + * @param string the table to insert data into + * @return string + */ + protected function _validate_insert($table = '') + { + if (count($this->qb_set) === 0) + { + return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE; + } + + if ($table !== '') + { + $this->qb_from[0] = $table; + } + elseif ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Replace + * + * Compiles an replace into string and runs the query + * + * @param string the table to replace data into + * @param array an associative array of insert values + * @return bool TRUE on success, FALSE on failure + */ + public function replace($table = '', $set = NULL) + { + if ($set !== NULL) + { + $this->set($set); + } + + if (count($this->qb_set) === 0) + { + return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE; + } + + if ($table === '') + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + + $sql = $this->_replace($this->protect_identifiers($table, TRUE, NULL, FALSE), array_keys($this->qb_set), array_values($this->qb_set)); + + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Replace statement + * + * Generates a platform-specific replace string from the supplied data + * + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + protected function _replace($table, $keys, $values) + { + return 'REPLACE INTO '.$table.' ('.implode(', ', $keys).') VALUES ('.implode(', ', $values).')'; + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * Note: This is only used (and overridden) by MySQL and CUBRID. + * + * @return string + */ + protected function _from_tables() + { + return implode(', ', $this->qb_from); + } + + // -------------------------------------------------------------------- + + /** + * Get UPDATE query string + * + * Compiles an update query and returns the sql + * + * @param string the table to update + * @param bool TRUE: reset QB values; FALSE: leave QB values alone + * @return string + */ + public function get_compiled_update($table = '', $reset = TRUE) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ($this->_validate_update($table) === FALSE) + { + return FALSE; + } + + $sql = $this->_update($this->qb_from[0], $this->qb_set); + + if ($reset === TRUE) + { + $this->_reset_write(); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * UPDATE + * + * Compiles an update string and runs the query. + * + * @param string $table + * @param array $set An associative array of update values + * @param mixed $where + * @param int $limit + * @return bool TRUE on success, FALSE on failure + */ + public function update($table = '', $set = NULL, $where = NULL, $limit = NULL) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ($set !== NULL) + { + $this->set($set); + } + + if ($this->_validate_update($table) === FALSE) + { + return FALSE; + } + + if ($where !== NULL) + { + $this->where($where); + } + + if ( ! empty($limit)) + { + $this->limit($limit); + } + + $sql = $this->_update($this->qb_from[0], $this->qb_set); + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Validate Update + * + * This method is used by both update() and get_compiled_update() to + * validate that data is actually being set and that a table has been + * chosen to be update. + * + * @param string the table to update data on + * @return bool + */ + protected function _validate_update($table) + { + if (count($this->qb_set) === 0) + { + return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE; + } + + if ($table !== '') + { + $this->qb_from = array($this->protect_identifiers($table, TRUE, NULL, FALSE)); + } + elseif ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Update_Batch + * + * Compiles an update string and runs the query + * + * @param string the table to retrieve the results from + * @param array an associative array of update values + * @param string the where key + * @return int number of rows affected or FALSE on failure + */ + public function update_batch($table, $set = NULL, $index = NULL, $batch_size = 100) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ($index === NULL) + { + return ($this->db_debug) ? $this->display_error('db_must_use_index') : FALSE; + } + + if ($set === NULL) + { + if (empty($this->qb_set_ub)) + { + return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE; + } + } + else + { + if (empty($set)) + { + return ($this->db_debug) ? $this->display_error('update_batch() called with no data') : FALSE; + } + + $this->set_update_batch($set, $index); + } + + if (strlen($table) === 0) + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + + // Batch this baby + $affected_rows = 0; + for ($i = 0, $total = count($this->qb_set_ub); $i < $total; $i += $batch_size) + { + if ($this->query($this->_update_batch($this->protect_identifiers($table, TRUE, NULL, FALSE), array_slice($this->qb_set_ub, $i, $batch_size), $index))) + { + $affected_rows += $this->affected_rows(); + } + + $this->qb_where = array(); + } + + $this->_reset_write(); + return $affected_rows; + } + + // -------------------------------------------------------------------- + + /** + * Update_Batch statement + * + * Generates a platform-specific batch update string from the supplied data + * + * @param string $table Table name + * @param array $values Update data + * @param string $index WHERE key + * @return string + */ + protected function _update_batch($table, $values, $index) + { + $ids = array(); + foreach ($values as $key => $val) + { + $ids[] = $val[$index]['value']; + + foreach (array_keys($val) as $field) + { + if ($field !== $index) + { + $final[$val[$field]['field']][] = 'WHEN '.$val[$index]['field'].' = '.$val[$index]['value'].' THEN '.$val[$field]['value']; + } + } + } + + $cases = ''; + foreach ($final as $k => $v) + { + $cases .= $k." = CASE \n" + .implode("\n", $v)."\n" + .'ELSE '.$k.' END, '; + } + + $this->where($val[$index]['field'].' IN('.implode(',', $ids).')', NULL, FALSE); + + return 'UPDATE '.$table.' SET '.substr($cases, 0, -2).$this->_compile_wh('qb_where'); + } + + // -------------------------------------------------------------------- + + /** + * The "set_update_batch" function. Allows key/value pairs to be set for batch updating + * + * @param array + * @param string + * @param bool + * @return CI_DB_query_builder + */ + public function set_update_batch($key, $index = '', $escape = NULL) + { + $key = $this->_object_to_array_batch($key); + + if ( ! is_array($key)) + { + // @todo error + } + + is_bool($escape) OR $escape = $this->_protect_identifiers; + + foreach ($key as $k => $v) + { + $index_set = FALSE; + $clean = array(); + foreach ($v as $k2 => $v2) + { + if ($k2 === $index) + { + $index_set = TRUE; + } + + $clean[$k2] = array( + 'field' => $this->protect_identifiers($k2, FALSE, $escape), + 'value' => ($escape === FALSE ? $v2 : $this->escape($v2)) + ); + } + + if ($index_set === FALSE) + { + return $this->display_error('db_batch_missing_index'); + } + + $this->qb_set_ub[] = $clean; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Empty Table + * + * Compiles a delete string and runs "DELETE FROM table" + * + * @param string the table to empty + * @return bool TRUE on success, FALSE on failure + */ + public function empty_table($table = '') + { + if ($table === '') + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + else + { + $table = $this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + $sql = $this->_delete($table); + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Truncate + * + * Compiles a truncate string and runs the query + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @param string the table to truncate + * @return bool TRUE on success, FALSE on failure + */ + public function truncate($table = '') + { + if ($table === '') + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + else + { + $table = $this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + $sql = $this->_truncate($table); + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the truncate() command, + * then this method maps to 'DELETE FROM table' + * + * @param string the table name + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Get DELETE query string + * + * Compiles a delete query string and returns the sql + * + * @param string the table to delete from + * @param bool TRUE: reset QB values; FALSE: leave QB values alone + * @return string + */ + public function get_compiled_delete($table = '', $reset = TRUE) + { + $this->return_delete_sql = TRUE; + $sql = $this->delete($table, '', NULL, $reset); + $this->return_delete_sql = FALSE; + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Delete + * + * Compiles a delete string and runs the query + * + * @param mixed the table(s) to delete from. String or array + * @param mixed the where clause + * @param mixed the limit clause + * @param bool + * @return mixed + */ + public function delete($table = '', $where = '', $limit = NULL, $reset_data = TRUE) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ($table === '') + { + if ( ! isset($this->qb_from[0])) + { + return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE; + } + + $table = $this->qb_from[0]; + } + elseif (is_array($table)) + { + empty($where) && $reset_data = FALSE; + + foreach ($table as $single_table) + { + $this->delete($single_table, $where, $limit, $reset_data); + } + + return; + } + else + { + $table = $this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + if ($where !== '') + { + $this->where($where); + } + + if ( ! empty($limit)) + { + $this->limit($limit); + } + + if (count($this->qb_where) === 0) + { + return ($this->db_debug) ? $this->display_error('db_del_must_use_where') : FALSE; + } + + $sql = $this->_delete($table); + if ($reset_data) + { + $this->_reset_write(); + } + + return ($this->return_delete_sql === TRUE) ? $sql : $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string the table name + * @return string + */ + protected function _delete($table) + { + return 'DELETE FROM '.$table.$this->_compile_wh('qb_where') + .($this->qb_limit ? ' LIMIT '.$this->qb_limit : ''); + } + + // -------------------------------------------------------------------- + + /** + * DB Prefix + * + * Prepends a database prefix if one exists in configuration + * + * @param string the table + * @return string + */ + public function dbprefix($table = '') + { + if ($table === '') + { + $this->display_error('db_table_name_required'); + } + + return $this->dbprefix.$table; + } + + // -------------------------------------------------------------------- + + /** + * Set DB Prefix + * + * Set's the DB Prefix to something new without needing to reconnect + * + * @param string the prefix + * @return string + */ + public function set_dbprefix($prefix = '') + { + return $this->dbprefix = $prefix; + } + + // -------------------------------------------------------------------- + + /** + * Track Aliases + * + * Used to track SQL statements written with aliased tables. + * + * @param string The table to inspect + * @return string + */ + protected function _track_aliases($table) + { + if (is_array($table)) + { + foreach ($table as $t) + { + $this->_track_aliases($t); + } + return; + } + + // Does the string contain a comma? If so, we need to separate + // the string into discreet statements + if (strpos($table, ',') !== FALSE) + { + return $this->_track_aliases(explode(',', $table)); + } + + // if a table alias is used we can recognize it by a space + if (strpos($table, ' ') !== FALSE) + { + // if the alias is written with the AS keyword, remove it + $table = preg_replace('/\s+AS\s+/i', ' ', $table); + + // Grab the alias + $table = trim(strrchr($table, ' ')); + + // Store the alias, if it doesn't already exist + if ( ! in_array($table, $this->qb_aliased_tables, TRUE)) + { + $this->qb_aliased_tables[] = $table; + if ($this->qb_caching === TRUE && ! in_array($table, $this->qb_cache_aliased_tables, TRUE)) + { + $this->qb_cache_aliased_tables[] = $table; + $this->qb_cache_exists[] = 'aliased_tables'; + } + } + } + } + + // -------------------------------------------------------------------- + + /** + * Compile the SELECT statement + * + * Generates a query string based on which functions were used. + * Should not be called directly. + * + * @param bool $select_override + * @return string + */ + protected function _compile_select($select_override = FALSE) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + // Write the "select" portion of the query + if ($select_override !== FALSE) + { + $sql = $select_override; + } + else + { + $sql = ( ! $this->qb_distinct) ? 'SELECT ' : 'SELECT DISTINCT '; + + if (count($this->qb_select) === 0) + { + $sql .= '*'; + } + else + { + // Cycle through the "select" portion of the query and prep each column name. + // The reason we protect identifiers here rather than in the select() function + // is because until the user calls the from() function we don't know if there are aliases + foreach ($this->qb_select as $key => $val) + { + $no_escape = isset($this->qb_no_escape[$key]) ? $this->qb_no_escape[$key] : NULL; + $this->qb_select[$key] = $this->protect_identifiers($val, FALSE, $no_escape); + } + + $sql .= implode(', ', $this->qb_select); + } + } + + // Write the "FROM" portion of the query + if (count($this->qb_from) > 0) + { + $sql .= "\nFROM ".$this->_from_tables(); + } + + // Write the "JOIN" portion of the query + if (count($this->qb_join) > 0) + { + $sql .= "\n".implode("\n", $this->qb_join); + } + + $sql .= $this->_compile_wh('qb_where') + .$this->_compile_group_by() + .$this->_compile_wh('qb_having') + .$this->_compile_order_by(); // ORDER BY + + // LIMIT + if ($this->qb_limit OR $this->qb_offset) + { + return $this->_limit($sql."\n"); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Compile WHERE, HAVING statements + * + * Escapes identifiers in WHERE and HAVING statements at execution time. + * + * Required so that aliases are tracked properly, regardless of whether + * where(), or_where(), having(), or_having are called prior to from(), + * join() and dbprefix is added only if needed. + * + * @param string $qb_key 'qb_where' or 'qb_having' + * @return string SQL statement + */ + protected function _compile_wh($qb_key) + { + if (count($this->$qb_key) > 0) + { + for ($i = 0, $c = count($this->$qb_key); $i < $c; $i++) + { + // Is this condition already compiled? + if (is_string($this->{$qb_key}[$i])) + { + continue; + } + elseif ($this->{$qb_key}[$i]['escape'] === FALSE) + { + $this->{$qb_key}[$i] = $this->{$qb_key}[$i]['condition']; + continue; + } + + // Split multiple conditions + $conditions = preg_split( + '/((?:^|\s+)AND\s+|(?:^|\s+)OR\s+)/i', + $this->{$qb_key}[$i]['condition'], + -1, + PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY + ); + + for ($ci = 0, $cc = count($conditions); $ci < $cc; $ci++) + { + if (($op = $this->_get_operator($conditions[$ci])) === FALSE + OR ! preg_match('/^(\(?)(.*)('.preg_quote($op, '/').')\s*(.*(? '(test <= foo)', /* the whole thing */ + // 1 => '(', /* optional */ + // 2 => 'test', /* the field name */ + // 3 => ' <= ', /* $op */ + // 4 => 'foo', /* optional, if $op is e.g. 'IS NULL' */ + // 5 => ')' /* optional */ + // ); + + if ( ! empty($matches[4])) + { + $this->_is_literal($matches[4]) OR $matches[4] = $this->protect_identifiers(trim($matches[4])); + $matches[4] = ' '.$matches[4]; + } + + $conditions[$ci] = $matches[1].$this->protect_identifiers(trim($matches[2])) + .' '.trim($matches[3]).$matches[4].$matches[5]; + } + + $this->{$qb_key}[$i] = implode('', $conditions); + } + + return ($qb_key === 'qb_having' ? "\nHAVING " : "\nWHERE ") + .implode("\n", $this->$qb_key); + } + + return ''; + } + + // -------------------------------------------------------------------- + + /** + * Compile GROUP BY + * + * Escapes identifiers in GROUP BY statements at execution time. + * + * Required so that aliases are tracked properly, regardless of whether + * group_by() is called prior to from(), join() and dbprefix is added + * only if needed. + * + * @return string SQL statement + */ + protected function _compile_group_by() + { + if (count($this->qb_groupby) > 0) + { + for ($i = 0, $c = count($this->qb_groupby); $i < $c; $i++) + { + // Is it already compiled? + if (is_string($this->qb_groupby[$i])) + { + continue; + } + + $this->qb_groupby[$i] = ($this->qb_groupby[$i]['escape'] === FALSE OR $this->_is_literal($this->qb_groupby[$i]['field'])) + ? $this->qb_groupby[$i]['field'] + : $this->protect_identifiers($this->qb_groupby[$i]['field']); + } + + return "\nGROUP BY ".implode(', ', $this->qb_groupby); + } + + return ''; + } + + // -------------------------------------------------------------------- + + /** + * Compile ORDER BY + * + * Escapes identifiers in ORDER BY statements at execution time. + * + * Required so that aliases are tracked properly, regardless of whether + * order_by() is called prior to from(), join() and dbprefix is added + * only if needed. + * + * @return string SQL statement + */ + protected function _compile_order_by() + { + if (empty($this->qb_orderby)) + { + return ''; + } + + for ($i = 0, $c = count($this->qb_orderby); $i < $c; $i++) + { + if (is_string($this->qb_orderby[$i])) + { + continue; + } + + if ($this->qb_orderby[$i]['escape'] !== FALSE && ! $this->_is_literal($this->qb_orderby[$i]['field'])) + { + $this->qb_orderby[$i]['field'] = $this->protect_identifiers($this->qb_orderby[$i]['field']); + } + + $this->qb_orderby[$i] = $this->qb_orderby[$i]['field'].$this->qb_orderby[$i]['direction']; + } + + return "\nORDER BY ".implode(', ', $this->qb_orderby); + } + + // -------------------------------------------------------------------- + + /** + * Object to Array + * + * Takes an object as input and converts the class variables to array key/vals + * + * @param object + * @return array + */ + protected function _object_to_array($object) + { + if ( ! is_object($object)) + { + return $object; + } + + $array = array(); + foreach (get_object_vars($object) as $key => $val) + { + // There are some built in keys we need to ignore for this conversion + if ( ! is_object($val) && ! is_array($val) && $key !== '_parent_name') + { + $array[$key] = $val; + } + } + + return $array; + } + + // -------------------------------------------------------------------- + + /** + * Object to Array + * + * Takes an object as input and converts the class variables to array key/vals + * + * @param object + * @return array + */ + protected function _object_to_array_batch($object) + { + if ( ! is_object($object)) + { + return $object; + } + + $array = array(); + $out = get_object_vars($object); + $fields = array_keys($out); + + foreach ($fields as $val) + { + // There are some built in keys we need to ignore for this conversion + if ($val !== '_parent_name') + { + $i = 0; + foreach ($out[$val] as $data) + { + $array[$i++][$val] = $data; + } + } + } + + return $array; + } + + // -------------------------------------------------------------------- + + /** + * Start Cache + * + * Starts QB caching + * + * @return CI_DB_query_builder + */ + public function start_cache() + { + $this->qb_caching = TRUE; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Stop Cache + * + * Stops QB caching + * + * @return CI_DB_query_builder + */ + public function stop_cache() + { + $this->qb_caching = FALSE; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Flush Cache + * + * Empties the QB cache + * + * @return CI_DB_query_builder + */ + public function flush_cache() + { + $this->_reset_run(array( + 'qb_cache_select' => array(), + 'qb_cache_from' => array(), + 'qb_cache_join' => array(), + 'qb_cache_where' => array(), + 'qb_cache_groupby' => array(), + 'qb_cache_having' => array(), + 'qb_cache_orderby' => array(), + 'qb_cache_set' => array(), + 'qb_cache_exists' => array(), + 'qb_cache_no_escape' => array(), + 'qb_cache_aliased_tables' => array() + )); + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Merge Cache + * + * When called, this function merges any cached QB arrays with + * locally called ones. + * + * @return void + */ + protected function _merge_cache() + { + if (count($this->qb_cache_exists) === 0) + { + return; + } + elseif (in_array('select', $this->qb_cache_exists, TRUE)) + { + $qb_no_escape = $this->qb_cache_no_escape; + } + + foreach (array_unique($this->qb_cache_exists) as $val) // select, from, etc. + { + $qb_variable = 'qb_'.$val; + $qb_cache_var = 'qb_cache_'.$val; + $qb_new = $this->$qb_cache_var; + + for ($i = 0, $c = count($this->$qb_variable); $i < $c; $i++) + { + if ( ! in_array($this->{$qb_variable}[$i], $qb_new, TRUE)) + { + $qb_new[] = $this->{$qb_variable}[$i]; + if ($val === 'select') + { + $qb_no_escape[] = $this->qb_no_escape[$i]; + } + } + } + + $this->$qb_variable = $qb_new; + if ($val === 'select') + { + $this->qb_no_escape = $qb_no_escape; + } + } + } + + // -------------------------------------------------------------------- + + /** + * Is literal + * + * Determines if a string represents a literal value or a field name + * + * @param string $str + * @return bool + */ + protected function _is_literal($str) + { + $str = trim($str); + + if (empty($str) OR ctype_digit($str) OR (string) (float) $str === $str OR in_array(strtoupper($str), array('TRUE', 'FALSE'), TRUE)) + { + return TRUE; + } + + static $_str; + + if (empty($_str)) + { + $_str = ($this->_escape_char !== '"') + ? array('"', "'") : array("'"); + } + + return in_array($str[0], $_str, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Reset Query Builder values. + * + * Publicly-visible method to reset the QB values. + * + * @return CI_DB_query_builder + */ + public function reset_query() + { + $this->_reset_select(); + $this->_reset_write(); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Resets the query builder values. Called by the get() function + * + * @param array An array of fields to reset + * @return void + */ + protected function _reset_run($qb_reset_items) + { + foreach ($qb_reset_items as $item => $default_value) + { + $this->$item = $default_value; + } + } + + // -------------------------------------------------------------------- + + /** + * Resets the query builder values. Called by the get() function + * + * @return void + */ + protected function _reset_select() + { + $this->_reset_run(array( + 'qb_select' => array(), + 'qb_from' => array(), + 'qb_join' => array(), + 'qb_where' => array(), + 'qb_groupby' => array(), + 'qb_having' => array(), + 'qb_orderby' => array(), + 'qb_aliased_tables' => array(), + 'qb_no_escape' => array(), + 'qb_distinct' => FALSE, + 'qb_limit' => FALSE, + 'qb_offset' => FALSE + )); + } + + // -------------------------------------------------------------------- + + /** + * Resets the query builder "write" values. + * + * Called by the insert() update() insert_batch() update_batch() and delete() functions + * + * @return void + */ + protected function _reset_write() + { + $this->_reset_run(array( + 'qb_set' => array(), + 'qb_set_ub' => array(), + 'qb_from' => array(), + 'qb_join' => array(), + 'qb_where' => array(), + 'qb_orderby' => array(), + 'qb_keys' => array(), + 'qb_limit' => FALSE + )); + } + +} diff --git a/system/database/DB_result.php b/system/database/DB_result.php new file mode 100644 index 00000000..98d8876a --- /dev/null +++ b/system/database/DB_result.php @@ -0,0 +1,666 @@ +conn_id = $driver_object->conn_id; + $this->result_id = $driver_object->result_id; + } + + // -------------------------------------------------------------------- + + /** + * Number of rows in the result set + * + * @return int + */ + public function num_rows() + { + if (is_int($this->num_rows)) + { + return $this->num_rows; + } + elseif (count($this->result_array) > 0) + { + return $this->num_rows = count($this->result_array); + } + elseif (count($this->result_object) > 0) + { + return $this->num_rows = count($this->result_object); + } + + return $this->num_rows = count($this->result_array()); + } + + // -------------------------------------------------------------------- + + /** + * Query result. Acts as a wrapper function for the following functions. + * + * @param string $type 'object', 'array' or a custom class name + * @return array + */ + public function result($type = 'object') + { + if ($type === 'array') + { + return $this->result_array(); + } + elseif ($type === 'object') + { + return $this->result_object(); + } + else + { + return $this->custom_result_object($type); + } + } + + // -------------------------------------------------------------------- + + /** + * Custom query result. + * + * @param string $class_name + * @return array + */ + public function custom_result_object($class_name) + { + if (isset($this->custom_result_object[$class_name])) + { + return $this->custom_result_object[$class_name]; + } + elseif ( ! $this->result_id OR $this->num_rows === 0) + { + return array(); + } + + // Don't fetch the result set again if we already have it + $_data = NULL; + if (($c = count($this->result_array)) > 0) + { + $_data = 'result_array'; + } + elseif (($c = count($this->result_object)) > 0) + { + $_data = 'result_object'; + } + + if ($_data !== NULL) + { + for ($i = 0; $i < $c; $i++) + { + $this->custom_result_object[$class_name][$i] = new $class_name(); + + foreach ($this->{$_data}[$i] as $key => $value) + { + $this->custom_result_object[$class_name][$i]->$key = $value; + } + } + + return $this->custom_result_object[$class_name]; + } + + is_null($this->row_data) OR $this->data_seek(0); + $this->custom_result_object[$class_name] = array(); + + while ($row = $this->_fetch_object($class_name)) + { + $this->custom_result_object[$class_name][] = $row; + } + + return $this->custom_result_object[$class_name]; + } + + // -------------------------------------------------------------------- + + /** + * Query result. "object" version. + * + * @return array + */ + public function result_object() + { + if (count($this->result_object) > 0) + { + return $this->result_object; + } + + // In the event that query caching is on, the result_id variable + // will not be a valid resource so we'll simply return an empty + // array. + if ( ! $this->result_id OR $this->num_rows === 0) + { + return array(); + } + + if (($c = count($this->result_array)) > 0) + { + for ($i = 0; $i < $c; $i++) + { + $this->result_object[$i] = (object) $this->result_array[$i]; + } + + return $this->result_object; + } + + is_null($this->row_data) OR $this->data_seek(0); + while ($row = $this->_fetch_object()) + { + $this->result_object[] = $row; + } + + return $this->result_object; + } + + // -------------------------------------------------------------------- + + /** + * Query result. "array" version. + * + * @return array + */ + public function result_array() + { + if (count($this->result_array) > 0) + { + return $this->result_array; + } + + // In the event that query caching is on, the result_id variable + // will not be a valid resource so we'll simply return an empty + // array. + if ( ! $this->result_id OR $this->num_rows === 0) + { + return array(); + } + + if (($c = count($this->result_object)) > 0) + { + for ($i = 0; $i < $c; $i++) + { + $this->result_array[$i] = (array) $this->result_object[$i]; + } + + return $this->result_array; + } + + is_null($this->row_data) OR $this->data_seek(0); + while ($row = $this->_fetch_assoc()) + { + $this->result_array[] = $row; + } + + return $this->result_array; + } + + // -------------------------------------------------------------------- + + /** + * Row + * + * A wrapper method. + * + * @param mixed $n + * @param string $type 'object' or 'array' + * @return mixed + */ + public function row($n = 0, $type = 'object') + { + if ( ! is_numeric($n)) + { + // We cache the row data for subsequent uses + is_array($this->row_data) OR $this->row_data = $this->row_array(0); + + // array_key_exists() instead of isset() to allow for NULL values + if (empty($this->row_data) OR ! array_key_exists($n, $this->row_data)) + { + return NULL; + } + + return $this->row_data[$n]; + } + + if ($type === 'object') return $this->row_object($n); + elseif ($type === 'array') return $this->row_array($n); + else return $this->custom_row_object($n, $type); + } + + // -------------------------------------------------------------------- + + /** + * Assigns an item into a particular column slot + * + * @param mixed $key + * @param mixed $value + * @return void + */ + public function set_row($key, $value = NULL) + { + // We cache the row data for subsequent uses + if ( ! is_array($this->row_data)) + { + $this->row_data = $this->row_array(0); + } + + if (is_array($key)) + { + foreach ($key as $k => $v) + { + $this->row_data[$k] = $v; + } + return; + } + + if ($key !== '' && $value !== NULL) + { + $this->row_data[$key] = $value; + } + } + + // -------------------------------------------------------------------- + + /** + * Returns a single result row - custom object version + * + * @param int $n + * @param string $type + * @return object + */ + public function custom_row_object($n, $type) + { + isset($this->custom_result_object[$type]) OR $this->custom_result_object($type); + + if (count($this->custom_result_object[$type]) === 0) + { + return NULL; + } + + if ($n !== $this->current_row && isset($this->custom_result_object[$type][$n])) + { + $this->current_row = $n; + } + + return $this->custom_result_object[$type][$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns a single result row - object version + * + * @param int $n + * @return object + */ + public function row_object($n = 0) + { + $result = $this->result_object(); + if (count($result) === 0) + { + return NULL; + } + + if ($n !== $this->current_row && isset($result[$n])) + { + $this->current_row = $n; + } + + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns a single result row - array version + * + * @param int $n + * @return array + */ + public function row_array($n = 0) + { + $result = $this->result_array(); + if (count($result) === 0) + { + return NULL; + } + + if ($n !== $this->current_row && isset($result[$n])) + { + $this->current_row = $n; + } + + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "first" row + * + * @param string $type + * @return mixed + */ + public function first_row($type = 'object') + { + $result = $this->result($type); + return (count($result) === 0) ? NULL : $result[0]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "last" row + * + * @param string $type + * @return mixed + */ + public function last_row($type = 'object') + { + $result = $this->result($type); + return (count($result) === 0) ? NULL : $result[count($result) - 1]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "next" row + * + * @param string $type + * @return mixed + */ + public function next_row($type = 'object') + { + $result = $this->result($type); + if (count($result) === 0) + { + return NULL; + } + + return isset($result[$this->current_row + 1]) + ? $result[++$this->current_row] + : NULL; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "previous" row + * + * @param string $type + * @return mixed + */ + public function previous_row($type = 'object') + { + $result = $this->result($type); + if (count($result) === 0) + { + return NULL; + } + + if (isset($result[$this->current_row - 1])) + { + --$this->current_row; + } + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns an unbuffered row and move pointer to next row + * + * @param string $type 'array', 'object' or a custom class name + * @return mixed + */ + public function unbuffered_row($type = 'object') + { + if ($type === 'array') + { + return $this->_fetch_assoc(); + } + elseif ($type === 'object') + { + return $this->_fetch_object(); + } + + return $this->_fetch_object($type); + } + + // -------------------------------------------------------------------- + + /** + * The following methods are normally overloaded by the identically named + * methods in the platform-specific driver -- except when query caching + * is used. When caching is enabled we do not load the other driver. + * These functions are primarily here to prevent undefined function errors + * when a cached result object is in use. They are not otherwise fully + * operational due to the unavailability of the database resource IDs with + * cached results. + */ + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * Overridden by driver result classes. + * + * @return int + */ + public function num_fields() + { + return 0; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names. + * + * Overridden by driver result classes. + * + * @return array + */ + public function list_fields() + { + return array(); + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data. + * + * Overridden by driver result classes. + * + * @return array + */ + public function field_data() + { + return array(); + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * Overridden by driver result classes. + * + * @return void + */ + public function free_result() + { + $this->result_id = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * Overridden by driver result classes. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array. + * + * Overridden by driver result classes. + * + * @return array + */ + protected function _fetch_assoc() + { + return array(); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object. + * + * Overridden by driver result classes. + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return new $class_name(); + } + +} diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php new file mode 100644 index 00000000..25d842c0 --- /dev/null +++ b/system/database/DB_utility.php @@ -0,0 +1,424 @@ +db =& $db; + log_message('info', 'Database Utility Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * List databases + * + * @return array + */ + public function list_databases() + { + // Is there a cached result? + if (isset($this->db->data_cache['db_names'])) + { + return $this->db->data_cache['db_names']; + } + elseif ($this->_list_databases === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + $this->db->data_cache['db_names'] = array(); + + $query = $this->db->query($this->_list_databases); + if ($query === FALSE) + { + return $this->db->data_cache['db_names']; + } + + for ($i = 0, $query = $query->result_array(), $c = count($query); $i < $c; $i++) + { + $this->db->data_cache['db_names'][] = current($query[$i]); + } + + return $this->db->data_cache['db_names']; + } + + // -------------------------------------------------------------------- + + /** + * Determine if a particular database exists + * + * @param string $database_name + * @return bool + */ + public function database_exists($database_name) + { + return in_array($database_name, $this->list_databases()); + } + + // -------------------------------------------------------------------- + + /** + * Optimize Table + * + * @param string $table_name + * @return mixed + */ + public function optimize_table($table_name) + { + if ($this->_optimize_table === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + $query = $this->db->query(sprintf($this->_optimize_table, $this->db->escape_identifiers($table_name))); + if ($query !== FALSE) + { + $query = $query->result_array(); + return current($query); + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Optimize Database + * + * @return mixed + */ + public function optimize_database() + { + if ($this->_optimize_table === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + $result = array(); + foreach ($this->db->list_tables() as $table_name) + { + $res = $this->db->query(sprintf($this->_optimize_table, $this->db->escape_identifiers($table_name))); + if (is_bool($res)) + { + return $res; + } + + // Build the result array... + $res = $res->result_array(); + $res = current($res); + $key = str_replace($this->db->database.'.', '', current($res)); + $keys = array_keys($res); + unset($res[$keys[0]]); + + $result[$key] = $res; + } + + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Repair Table + * + * @param string $table_name + * @return mixed + */ + public function repair_table($table_name) + { + if ($this->_repair_table === FALSE) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE; + } + + $query = $this->db->query(sprintf($this->_repair_table, $this->db->escape_identifiers($table_name))); + if (is_bool($query)) + { + return $query; + } + + $query = $query->result_array(); + return current($query); + } + + // -------------------------------------------------------------------- + + /** + * Generate CSV from a query result object + * + * @param object $query Query result object + * @param string $delim Delimiter (default: ,) + * @param string $newline Newline character (default: \n) + * @param string $enclosure Enclosure (default: ") + * @return string + */ + public function csv_from_result($query, $delim = ',', $newline = "\n", $enclosure = '"') + { + if ( ! is_object($query) OR ! method_exists($query, 'list_fields')) + { + show_error('You must submit a valid result object'); + } + + $out = ''; + // First generate the headings from the table column names + foreach ($query->list_fields() as $name) + { + $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim; + } + + $out = substr($out, 0, -strlen($delim)).$newline; + + // Next blast through the result array and build out the rows + while ($row = $query->unbuffered_row('array')) + { + $line = array(); + foreach ($row as $item) + { + $line[] = $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure; + } + $out .= implode($delim, $line).$newline; + } + + return $out; + } + + // -------------------------------------------------------------------- + + /** + * Generate XML data from a query result object + * + * @param object $query Query result object + * @param array $params Any preferences + * @return string + */ + public function xml_from_result($query, $params = array()) + { + if ( ! is_object($query) OR ! method_exists($query, 'list_fields')) + { + show_error('You must submit a valid result object'); + } + + // Set our default values + foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val) + { + if ( ! isset($params[$key])) + { + $params[$key] = $val; + } + } + + // Create variables for convenience + extract($params); + + // Load the xml helper + get_instance()->load->helper('xml'); + + // Generate the result + $xml = '<'.$root.'>'.$newline; + while ($row = $query->unbuffered_row()) + { + $xml .= $tab.'<'.$element.'>'.$newline; + foreach ($row as $key => $val) + { + $xml .= $tab.$tab.'<'.$key.'>'.xml_convert($val).''.$newline; + } + $xml .= $tab.''.$newline; + } + + return $xml.''.$newline; + } + + // -------------------------------------------------------------------- + + /** + * Database Backup + * + * @param array $params + * @return string + */ + public function backup($params = array()) + { + // If the parameters have not been submitted as an + // array then we know that it is simply the table + // name, which is a valid short cut. + if (is_string($params)) + { + $params = array('tables' => $params); + } + + // Set up our default preferences + $prefs = array( + 'tables' => array(), + 'ignore' => array(), + 'filename' => '', + 'format' => 'gzip', // gzip, zip, txt + 'add_drop' => TRUE, + 'add_insert' => TRUE, + 'newline' => "\n", + 'foreign_key_checks' => TRUE + ); + + // Did the user submit any preferences? If so set them.... + if (count($params) > 0) + { + foreach ($prefs as $key => $val) + { + if (isset($params[$key])) + { + $prefs[$key] = $params[$key]; + } + } + } + + // Are we backing up a complete database or individual tables? + // If no table names were submitted we'll fetch the entire table list + if (count($prefs['tables']) === 0) + { + $prefs['tables'] = $this->db->list_tables(); + } + + // Validate the format + if ( ! in_array($prefs['format'], array('gzip', 'zip', 'txt'), TRUE)) + { + $prefs['format'] = 'txt'; + } + + // Is the encoder supported? If not, we'll either issue an + // error or use plain text depending on the debug settings + if (($prefs['format'] === 'gzip' && ! function_exists('gzencode')) + OR ($prefs['format'] === 'zip' && ! function_exists('gzcompress'))) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsupported_compression'); + } + + $prefs['format'] = 'txt'; + } + + // Was a Zip file requested? + if ($prefs['format'] === 'zip') + { + // Set the filename if not provided (only needed with Zip files) + if ($prefs['filename'] === '') + { + $prefs['filename'] = (count($prefs['tables']) === 1 ? $prefs['tables'] : $this->db->database) + .date('Y-m-d_H-i', time()).'.sql'; + } + else + { + // If they included the .zip file extension we'll remove it + if (preg_match('|.+?\.zip$|', $prefs['filename'])) + { + $prefs['filename'] = str_replace('.zip', '', $prefs['filename']); + } + + // Tack on the ".sql" file extension if needed + if ( ! preg_match('|.+?\.sql$|', $prefs['filename'])) + { + $prefs['filename'] .= '.sql'; + } + } + + // Load the Zip class and output it + $CI =& get_instance(); + $CI->load->library('zip'); + $CI->zip->add_data($prefs['filename'], $this->_backup($prefs)); + return $CI->zip->get_zip(); + } + elseif ($prefs['format'] === 'txt') // Was a text file requested? + { + return $this->_backup($prefs); + } + elseif ($prefs['format'] === 'gzip') // Was a Gzip file requested? + { + return gzencode($this->_backup($prefs)); + } + + return; + } + +} diff --git a/system/database/drivers/cubrid/cubrid_driver.php b/system/database/drivers/cubrid/cubrid_driver.php new file mode 100644 index 00000000..6e8aff7c --- /dev/null +++ b/system/database/drivers/cubrid/cubrid_driver.php @@ -0,0 +1,405 @@ +dsn, $matches)) + { + if (stripos($matches[2], 'autocommit=off') !== FALSE) + { + $this->auto_commit = FALSE; + } + } + else + { + // If no port is defined by the user, use the default value + empty($this->port) OR $this->port = 33000; + } + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + if (preg_match('/^CUBRID:[^:]+(:[0-9][1-9]{0,4})?:[^:]+:([^:]*):([^:]*):(\?.+)?$/', $this->dsn, $matches)) + { + $func = ($persistent !== TRUE) ? 'cubrid_connect_with_url' : 'cubrid_pconnect_with_url'; + return ($matches[2] === '' && $matches[3] === '' && $this->username !== '' && $this->password !== '') + ? $func($this->dsn, $this->username, $this->password) + : $func($this->dsn); + } + + $func = ($persistent !== TRUE) ? 'cubrid_connect' : 'cubrid_pconnect'; + return ($this->username !== '') + ? $func($this->hostname, $this->port, $this->database, $this->username, $this->password) + : $func($this->hostname, $this->port, $this->database); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @return void + */ + public function reconnect() + { + if (cubrid_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + return ( ! $this->conn_id OR ($version = cubrid_get_server_info($this->conn_id)) === FALSE) + ? FALSE + : $this->data_cache['version'] = $version; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + return cubrid_query($sql, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + if (($autocommit = cubrid_get_autocommit($this->conn_id)) === NULL) + { + return FALSE; + } + elseif ($autocommit === TRUE) + { + return cubrid_set_autocommit($this->conn_id, CUBRID_AUTOCOMMIT_FALSE); + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if ( ! cubrid_commit($this->conn_id)) + { + return FALSE; + } + + if ($this->auto_commit && ! cubrid_get_autocommit($this->conn_id)) + { + return cubrid_set_autocommit($this->conn_id, CUBRID_AUTOCOMMIT_TRUE); + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if ( ! cubrid_rollback($this->conn_id)) + { + return FALSE; + } + + if ($this->auto_commit && ! cubrid_get_autocommit($this->conn_id)) + { + cubrid_set_autocommit($this->conn_id, CUBRID_AUTOCOMMIT_TRUE); + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return cubrid_real_escape_string($str, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return cubrid_affected_rows(); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + return cubrid_insert_id($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SHOW TABLES'; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql." LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE))) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->Field; + + sscanf($query[$i]->Type, '%[a-z](%d)', + $retval[$i]->type, + $retval[$i]->max_length + ); + + $retval[$i]->default = $query[$i]->Default; + $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI'); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => cubrid_errno($this->conn_id), 'message' => cubrid_error($this->conn_id)); + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * @return string + */ + protected function _from_tables() + { + if ( ! empty($this->qb_join) && count($this->qb_from) > 1) + { + return '('.implode(', ', $this->qb_from).')'; + } + + return implode(', ', $this->qb_from); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + cubrid_close($this->conn_id); + } + +} diff --git a/system/database/drivers/cubrid/cubrid_forge.php b/system/database/drivers/cubrid/cubrid_forge.php new file mode 100644 index 00000000..27bfc146 --- /dev/null +++ b/system/database/drivers/cubrid/cubrid_forge.php @@ -0,0 +1,230 @@ + 'INTEGER', + 'SMALLINT' => 'INTEGER', + 'INT' => 'BIGINT', + 'INTEGER' => 'BIGINT', + 'BIGINT' => 'NUMERIC', + 'FLOAT' => 'DOUBLE', + 'REAL' => 'DOUBLE' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $sqls[] = $sql.' CHANGE '.$field[$i]['_literal']; + } + else + { + $alter_type = empty($field[$i]['new_name']) ? ' MODIFY ' : ' CHANGE '; + $sqls[] = $sql.$alter_type.$this->_process_column($field[$i]); + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + $extra_clause = isset($field['after']) + ? ' AFTER '.$this->db->escape_identifiers($field['after']) : ''; + + if (empty($extra_clause) && isset($field['first']) && $field['first'] === TRUE) + { + $extra_clause = ' FIRST'; + } + + return $this->db->escape_identifiers($field['name']) + .(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name'])) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['null'] + .$field['default'] + .$field['auto_increment'] + .$field['unique'] + .$extra_clause; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'LONGTEXT': + $attributes['TYPE'] = 'STRING'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table (ignored) + * @return string + */ + protected function _process_indexes($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sql .= ",\n\tKEY ".$this->db->escape_identifiers(implode('_', $this->keys[$i])) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).')'; + } + + $this->keys = array(); + + return $sql; + } + +} diff --git a/system/database/drivers/cubrid/cubrid_result.php b/system/database/drivers/cubrid/cubrid_result.php new file mode 100644 index 00000000..251b70a6 --- /dev/null +++ b/system/database/drivers/cubrid/cubrid_result.php @@ -0,0 +1,177 @@ +num_rows) + ? $this->num_rows + : $this->num_rows = cubrid_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return cubrid_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + return cubrid_column_names($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = cubrid_field_name($this->result_id, $i); + $retval[$i]->type = cubrid_field_type($this->result_id, $i); + $retval[$i]->max_length = cubrid_field_len($this->result_id, $i); + $retval[$i]->primary_key = (int) (strpos(cubrid_field_flags($this->result_id, $i), 'primary_key') !== FALSE); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id) OR + (get_resource_type($this->result_id) === 'Unknown' && preg_match('/Resource id #/', strval($this->result_id)))) + { + cubrid_close_request($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return cubrid_data_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return cubrid_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return cubrid_fetch_object($this->result_id, $class_name); + } + +} diff --git a/system/database/drivers/cubrid/cubrid_utility.php b/system/database/drivers/cubrid/cubrid_utility.php new file mode 100644 index 00000000..555ae7a9 --- /dev/null +++ b/system/database/drivers/cubrid/cubrid_utility.php @@ -0,0 +1,79 @@ +db->data_cache['db_names'])) + { + return $this->db->data_cache['db_names']; + } + + return $this->db->data_cache['db_names'] = cubrid_list_dbs($this->db->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * CUBRID Export + * + * @param array Preferences + * @return mixed + */ + protected function _backup($params = array()) + { + // No SQL based support in CUBRID as of version 8.4.0. Database or + // table backup can be performed using CUBRID Manager + // database administration tool. + return $this->db->display_error('db_unsupported_feature'); + } +} diff --git a/system/database/drivers/cubrid/index.html b/system/database/drivers/cubrid/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/cubrid/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/ibase/ibase_driver.php b/system/database/drivers/ibase/ibase_driver.php new file mode 100644 index 00000000..3069d669 --- /dev/null +++ b/system/database/drivers/ibase/ibase_driver.php @@ -0,0 +1,413 @@ +hostname.':'.$this->database, $this->username, $this->password, $this->char_set) + : ibase_connect($this->hostname.':'.$this->database, $this->username, $this->password, $this->char_set); + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if (($service = ibase_service_attach($this->hostname, $this->username, $this->password))) + { + $this->data_cache['version'] = ibase_server_info($service, IBASE_SVC_SERVER_VERSION); + + // Don't keep the service open + ibase_service_detach($service); + return $this->data_cache['version']; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + return ibase_query(isset($this->_ibase_trans) ? $this->_ibase_trans : $this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + if (($trans_handle = ibase_trans($this->conn_id)) === FALSE) + { + return FALSE; + } + + $this->_ibase_trans = $trans_handle; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if (ibase_commit($this->_ibase_trans)) + { + $this->_ibase_trans = NULL; + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if (ibase_rollback($this->_ibase_trans)) + { + $this->_ibase_trans = NULL; + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return ibase_affected_rows($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @param string $generator_name + * @param int $inc_by + * @return int + */ + public function insert_id($generator_name, $inc_by = 0) + { + //If a generator hasn't been used before it will return 0 + return ibase_gen_id('"'.$generator_name.'"', $inc_by); + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT TRIM("RDB$RELATION_NAME") AS TABLE_NAME FROM "RDB$RELATIONS" WHERE "RDB$RELATION_NAME" NOT LIKE \'RDB$%\' AND "RDB$RELATION_NAME" NOT LIKE \'MON$%\''; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql.' AND TRIM("RDB$RELATION_NAME") AS TABLE_NAME LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT TRIM("RDB$FIELD_NAME") AS COLUMN_NAME FROM "RDB$RELATION_FIELDS" WHERE "RDB$RELATION_NAME" = '.$this->escape($table); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "rfields"."RDB$FIELD_NAME" AS "name", + CASE "fields"."RDB$FIELD_TYPE" + WHEN 7 THEN \'SMALLINT\' + WHEN 8 THEN \'INTEGER\' + WHEN 9 THEN \'QUAD\' + WHEN 10 THEN \'FLOAT\' + WHEN 11 THEN \'DFLOAT\' + WHEN 12 THEN \'DATE\' + WHEN 13 THEN \'TIME\' + WHEN 14 THEN \'CHAR\' + WHEN 16 THEN \'INT64\' + WHEN 27 THEN \'DOUBLE\' + WHEN 35 THEN \'TIMESTAMP\' + WHEN 37 THEN \'VARCHAR\' + WHEN 40 THEN \'CSTRING\' + WHEN 261 THEN \'BLOB\' + ELSE NULL + END AS "type", + "fields"."RDB$FIELD_LENGTH" AS "max_length", + "rfields"."RDB$DEFAULT_VALUE" AS "default" + FROM "RDB$RELATION_FIELDS" "rfields" + JOIN "RDB$FIELDS" "fields" ON "rfields"."RDB$FIELD_SOURCE" = "fields"."RDB$FIELD_NAME" + WHERE "rfields"."RDB$RELATION_NAME" = '.$this->escape($table).' + ORDER BY "rfields"."RDB$FIELD_POSITION"'; + + return (($query = $this->query($sql)) !== FALSE) + ? $query->result_object() + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => ibase_errcode(), 'message' => ibase_errmsg()); + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'DELETE FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + // Limit clause depends on if Interbase or Firebird + if (stripos($this->version(), 'firebird') !== FALSE) + { + $select = 'FIRST '.$this->qb_limit + .($this->qb_offset ? ' SKIP '.$this->qb_offset : ''); + } + else + { + $select = 'ROWS ' + .($this->qb_offset ? $this->qb_offset.' TO '.($this->qb_limit + $this->qb_offset) : $this->qb_limit); + } + + return preg_replace('`SELECT`i', 'SELECT '.$select, $sql, 1); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + ibase_close($this->conn_id); + } + +} diff --git a/system/database/drivers/ibase/ibase_forge.php b/system/database/drivers/ibase/ibase_forge.php new file mode 100644 index 00000000..31352f12 --- /dev/null +++ b/system/database/drivers/ibase/ibase_forge.php @@ -0,0 +1,251 @@ + 'INTEGER', + 'INTEGER' => 'INT64', + 'FLOAT' => 'DOUBLE PRECISION' + ); + + /** + * NULL value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_null = 'NULL'; + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @param string $db_name + * @return bool + */ + public function create_database($db_name) + { + // Firebird databases are flat files, so a path is required + + // Hostname is needed for remote access + empty($this->db->hostname) OR $db_name = $this->hostname.':'.$db_name; + + return parent::create_database('"'.$db_name.'"'); + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @param string $db_name (ignored) + * @return bool + */ + public function drop_database($db_name) + { + if ( ! ibase_drop_db($this->conn_id)) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + elseif ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($this->db->database), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + return FALSE; + } + + if (isset($field[$i]['type'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identififers($field[$i]['name']) + .' TYPE '.$field[$i]['type'].$field[$i]['length']; + } + + if ( ! empty($field[$i]['default'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' SET DEFAULT '.$field[$i]['default']; + } + + if (isset($field[$i]['null'])) + { + $sqls[] = 'UPDATE "RDB$RELATION_FIELDS" SET "RDB$NULL_FLAG" = ' + .($field[$i]['null'] === TRUE ? 'NULL' : '1') + .' WHERE "RDB$FIELD_NAME" = '.$this->db->escape($field[$i]['name']) + .' AND "RDB$RELATION_NAME" = '.$this->db->escape($table); + } + + if ( ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'].$field['length'] + .$field['null'] + .$field['unique'] + .$field['default']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INT': + $attributes['TYPE'] = 'INTEGER'; + return; + case 'BIGINT': + $attributes['TYPE'] = 'INT64'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported + } + +} diff --git a/system/database/drivers/ibase/ibase_result.php b/system/database/drivers/ibase/ibase_result.php new file mode 100644 index 00000000..7d7dd79a --- /dev/null +++ b/system/database/drivers/ibase/ibase_result.php @@ -0,0 +1,161 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + for ($i = 0, $num_fields = $this->num_fields(); $i < $num_fields; $i++) + { + $info = ibase_field_info($this->result_id, $i); + $field_names[] = $info['name']; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $info = ibase_field_info($this->result_id, $i); + + $retval[$i] = new stdClass(); + $retval[$i]->name = $info['name']; + $retval[$i]->type = $info['type']; + $retval[$i]->max_length = $info['length']; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + ibase_free_result($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return ibase_fetch_assoc($this->result_id, IBASE_FETCH_BLOBS); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + $row = ibase_fetch_object($this->result_id, IBASE_FETCH_BLOBS); + + if ($class_name === 'stdClass' OR ! $row) + { + return $row; + } + + $class_name = new $class_name(); + foreach ($row as $key => $value) + { + $class_name->$key = $value; + } + + return $class_name; + } + +} diff --git a/system/Router/Exceptions/RouterException.php b/system/database/drivers/ibase/ibase_utility.php similarity index 55% rename from system/Router/Exceptions/RouterException.php rename to system/database/drivers/ibase/ibase_utility.php index b58d64eb..3c152101 100644 --- a/system/Router/Exceptions/RouterException.php +++ b/system/database/drivers/ibase/ibase_utility.php @@ -1,5 +1,4 @@ db->hostname, $this->db->username, $this->db->password)) + { + $res = ibase_backup($service, $this->db->database, $filename.'.fbk'); + + // Close the service connection + ibase_service_detach($service); + return $res; + } + + return FALSE; } + } diff --git a/system/database/drivers/ibase/index.html b/system/database/drivers/ibase/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/ibase/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/index.html b/system/database/drivers/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/mssql/index.html b/system/database/drivers/mssql/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/mssql/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php new file mode 100644 index 00000000..cb89f3b3 --- /dev/null +++ b/system/database/drivers/mssql/mssql_driver.php @@ -0,0 +1,518 @@ +port)) + { + $this->hostname .= (DIRECTORY_SEPARATOR === '\\' ? ',' : ':').$this->port; + } + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + $this->conn_id = ($persistent) + ? mssql_pconnect($this->hostname, $this->username, $this->password) + : mssql_connect($this->hostname, $this->username, $this->password); + + if ( ! $this->conn_id) + { + return FALSE; + } + + // ---------------------------------------------------------------- + + // Select the DB... assuming a database name is specified in the config file + if ($this->database !== '' && ! $this->db_select()) + { + log_message('error', 'Unable to select database: '.$this->database); + + return ($this->db_debug === TRUE) + ? $this->display_error('db_unable_to_select', $this->database) + : FALSE; + } + + // Determine how identifiers are escaped + $query = $this->query('SELECT CASE WHEN (@@OPTIONS | 256) = @@OPTIONS THEN 1 ELSE 0 END AS qi'); + $query = $query->row_array(); + $this->_quoted_identifier = empty($query) ? FALSE : (bool) $query['qi']; + $this->_escape_char = ($this->_quoted_identifier) ? '"' : array('[', ']'); + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @param string $database + * @return bool + */ + public function db_select($database = '') + { + if ($database === '') + { + $database = $this->database; + } + + // Note: Escaping is required in the event that the DB name + // contains reserved characters. + if (mssql_select_db('['.$database.']', $this->conn_id)) + { + $this->database = $database; + $this->data_cache = array(); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return mixed resource if rows are returned, bool otherwise + */ + protected function _execute($sql) + { + return mssql_query($sql, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return $this->simple_query('BEGIN TRAN'); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return $this->simple_query('COMMIT TRAN'); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return $this->simple_query('ROLLBACK TRAN'); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return mssql_rows_affected($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * Returns the last id created in the Identity column. + * + * @return string + */ + public function insert_id() + { + $query = version_compare($this->version(), '8', '>=') + ? 'SELECT SCOPE_IDENTITY() AS last_id' + : 'SELECT @@IDENTITY AS last_id'; + + $query = $this->query($query); + $query = $query->row(); + return $query->last_id; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @param string $charset + * @return bool + */ + protected function _db_set_charset($charset) + { + return (ini_set('mssql.charset', $charset) !== FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @return string + */ + protected function _version() + { + return "SELECT SERVERPROPERTY('ProductVersion') AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT '.$this->escape_identifiers('name') + .' FROM '.$this->escape_identifiers('sysobjects') + .' WHERE '.$this->escape_identifiers('type')." = 'U'"; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + $sql .= ' AND '.$this->escape_identifiers('name')." LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql.' ORDER BY '.$this->escape_identifiers('name'); + } + + // -------------------------------------------------------------------- + + /** + * List column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT COLUMN_NAME + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, COLUMN_DEFAULT + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + $retval[$i]->max_length = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; + $retval[$i]->default = $query[$i]->COLUMN_DEFAULT; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + // We need this because the error info is discarded by the + // server the first time you request it, and query() already + // calls error() once for logging purposes when a query fails. + static $error = array('code' => 0, 'message' => NULL); + + $message = mssql_get_last_message(); + if ( ! empty($message)) + { + $error['code'] = $this->query('SELECT @@ERROR AS code')->row()->code; + $error['message'] = $message; + } + + return $error; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE TABLE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + return 'WITH ci_delete AS (SELECT TOP '.$this->qb_limit.' * FROM '.$table.$this->_compile_wh('qb_where').') DELETE FROM ci_delete'; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + $limit = $this->qb_offset + $this->qb_limit; + + // As of SQL Server 2005 (9.0.*) ROW_NUMBER() is supported, + // however an ORDER BY clause is required for it to work + if (version_compare($this->version(), '9', '>=') && $this->qb_offset && ! empty($this->qb_orderby)) + { + $orderby = $this->_compile_order_by(); + + // We have to strip the ORDER BY clause + $sql = trim(substr($sql, 0, strrpos($sql, $orderby))); + + // Get the fields to select from our subquery, so that we can avoid CI_rownum appearing in the actual results + if (count($this->qb_select) === 0 OR strpos(implode(',', $this->qb_select), '*') !== FALSE) + { + $select = '*'; // Inevitable + } + else + { + // Use only field names and their aliases, everything else is out of our scope. + $select = array(); + $field_regexp = ($this->_quoted_identifier) + ? '("[^\"]+")' : '(\[[^\]]+\])'; + for ($i = 0, $c = count($this->qb_select); $i < $c; $i++) + { + $select[] = preg_match('/(?:\s|\.)'.$field_regexp.'$/i', $this->qb_select[$i], $m) + ? $m[1] : $this->qb_select[$i]; + } + $select = implode(', ', $select); + } + + return 'SELECT '.$select." FROM (\n\n" + .preg_replace('/^(SELECT( DISTINCT)?)/i', '\\1 ROW_NUMBER() OVER('.trim($orderby).') AS '.$this->escape_identifiers('CI_rownum').', ', $sql) + ."\n\n) ".$this->escape_identifiers('CI_subquery') + ."\nWHERE ".$this->escape_identifiers('CI_rownum').' BETWEEN '.($this->qb_offset + 1).' AND '.$limit; + } + + return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$limit.' ', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + // Multiple-value inserts are only supported as of SQL Server 2008 + if (version_compare($this->version(), '10', '>=')) + { + return parent::_insert_batch($table, $keys, $values); + } + + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + mssql_close($this->conn_id); + } + +} diff --git a/system/database/drivers/mssql/mssql_forge.php b/system/database/drivers/mssql/mssql_forge.php new file mode 100644 index 00000000..6b610986 --- /dev/null +++ b/system/database/drivers/mssql/mssql_forge.php @@ -0,0 +1,151 @@ + 'SMALLINT', + 'SMALLINT' => 'INT', + 'INT' => 'BIGINT', + 'REAL' => 'FLOAT' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('ADD', 'DROP'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' ALTER COLUMN '; + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + $sqls[] = $sql.$this->_process_column($field[$i]); + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + if (isset($attributes['CONSTRAINT']) && strpos($attributes['TYPE'], 'INT') !== FALSE) + { + unset($attributes['CONSTRAINT']); + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INTEGER': + $attributes['TYPE'] = 'INT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' IDENTITY(1,1)'; + } + } + +} diff --git a/system/database/drivers/mssql/mssql_result.php b/system/database/drivers/mssql/mssql_result.php new file mode 100644 index 00000000..38a0a057 --- /dev/null +++ b/system/database/drivers/mssql/mssql_result.php @@ -0,0 +1,198 @@ +num_rows) + ? $this->num_rows + : $this->num_rows = mssql_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return mssql_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + mssql_field_seek($this->result_id, 0); + while ($field = mssql_fetch_field($this->result_id)) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $field = mssql_fetch_field($this->result_id, $i); + + $retval[$i] = new stdClass(); + $retval[$i]->name = $field->name; + $retval[$i]->type = $field->type; + $retval[$i]->max_length = $field->max_length; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + mssql_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return mssql_data_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return mssql_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + $row = mssql_fetch_object($this->result_id); + + if ($class_name === 'stdClass' OR ! $row) + { + return $row; + } + + $class_name = new $class_name(); + foreach ($row as $key => $value) + { + $class_name->$key = $value; + } + + return $class_name; + } + +} diff --git a/system/Database/Postgre/Utils.php b/system/database/drivers/mssql/mssql_utility.php similarity index 55% rename from system/Database/Postgre/Utils.php rename to system/database/drivers/mssql/mssql_utility.php index dd45de11..95ce88f1 100644 --- a/system/Database/Postgre/Utils.php +++ b/system/database/drivers/mssql/mssql_utility.php @@ -6,8 +6,7 @@ * * This content is released under the MIT License (MIT) * - * Copyright (c) 2014-2019 British Columbia Institute of Technology - * Copyright (c) 2019-2020 CodeIgniter Foundation + * Copyright (c) 2014 - 2017, British Columbia Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -27,53 +26,52 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * - * @package CodeIgniter - * @author CodeIgniter Dev Team - * @copyright 2019-2020 CodeIgniter Foundation - * @license https://opensource.org/licenses/MIT MIT License - * @link https://codeigniter.com - * @since Version 4.0.0 + * @package CodeIgniter + * @author EllisLab Dev Team + * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/) + * @copyright Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/) + * @license http://opensource.org/licenses/MIT MIT License + * @link https://codeigniter.com + * @since Version 1.3.0 * @filesource */ - -namespace CodeIgniter\Database\Postgre; - -use CodeIgniter\Database\BaseUtils; -use CodeIgniter\Database\Exceptions\DatabaseException; +defined('BASEPATH') OR exit('No direct script access allowed'); /** - * Utils for Postgre + * MS SQL Utility Class + * + * @package CodeIgniter + * @subpackage Drivers + * @category Database + * @author EllisLab Dev Team + * @link https://codeigniter.com/user_guide/database/ */ -class Utils extends BaseUtils -{ +class CI_DB_mssql_utility extends CI_DB_utility { /** * List databases statement * - * @var string + * @var string */ - protected $listDatabases = 'SELECT datname FROM pg_database'; + protected $_list_databases = 'EXEC sp_helpdb'; // Can also be: EXEC sp_databases /** * OPTIMIZE TABLE statement * - * @var string + * @var string */ - protected $optimizeTable = 'REINDEX TABLE %s'; - - //-------------------------------------------------------------------- + protected $_optimize_table = 'ALTER INDEX all ON %s REORGANIZE'; /** - * Platform dependent version of the backup function. - * - * @param array|null $prefs + * Export * - * @return mixed + * @param array $params Preferences + * @return bool */ - public function _backup(array $prefs = null) + protected function _backup($params = array()) { - throw new DatabaseException('Unsupported feature of the database platform you are using.'); + // Currently unsupported + return $this->db->display_error('db_unsupported_feature'); } - //-------------------------------------------------------------------- } diff --git a/system/database/drivers/mysql/index.html b/system/database/drivers/mysql/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/mysql/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php new file mode 100644 index 00000000..71dad676 --- /dev/null +++ b/system/database/drivers/mysql/mysql_driver.php @@ -0,0 +1,494 @@ +port)) + { + $this->hostname .= ':'.$this->port; + } + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + $client_flags = ($this->compress === FALSE) ? 0 : MYSQL_CLIENT_COMPRESS; + + if ($this->encrypt === TRUE) + { + $client_flags = $client_flags | MYSQL_CLIENT_SSL; + } + + // Error suppression is necessary mostly due to PHP 5.5+ issuing E_DEPRECATED messages + $this->conn_id = ($persistent === TRUE) + ? mysql_pconnect($this->hostname, $this->username, $this->password, $client_flags) + : mysql_connect($this->hostname, $this->username, $this->password, TRUE, $client_flags); + + // ---------------------------------------------------------------- + + // Select the DB... assuming a database name is specified in the config file + if ($this->database !== '' && ! $this->db_select()) + { + log_message('error', 'Unable to select database: '.$this->database); + + return ($this->db_debug === TRUE) + ? $this->display_error('db_unable_to_select', $this->database) + : FALSE; + } + + if (isset($this->stricton) && is_resource($this->conn_id)) + { + if ($this->stricton) + { + $this->simple_query('SET SESSION sql_mode = CONCAT(@@sql_mode, ",", "STRICT_ALL_TABLES")'); + } + else + { + $this->simple_query( + 'SET SESSION sql_mode = + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( + @@sql_mode, + "STRICT_ALL_TABLES,", ""), + ",STRICT_ALL_TABLES", ""), + "STRICT_ALL_TABLES", ""), + "STRICT_TRANS_TABLES,", ""), + ",STRICT_TRANS_TABLES", ""), + "STRICT_TRANS_TABLES", "")' + ); + } + } + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @return void + */ + public function reconnect() + { + if (mysql_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @param string $database + * @return bool + */ + public function db_select($database = '') + { + if ($database === '') + { + $database = $this->database; + } + + if (mysql_select_db($database, $this->conn_id)) + { + $this->database = $database; + $this->data_cache = array(); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @param string $charset + * @return bool + */ + protected function _db_set_charset($charset) + { + return mysql_set_charset($charset, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if ( ! $this->conn_id OR ($version = mysql_get_server_info($this->conn_id)) === FALSE) + { + return FALSE; + } + + return $this->data_cache['version'] = $version; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return mixed + */ + protected function _execute($sql) + { + return mysql_query($this->_prep_query($sql), $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @param string $sql an SQL query + * @return string + */ + protected function _prep_query($sql) + { + // mysql_affected_rows() returns 0 for "DELETE FROM TABLE" queries. This hack + // modifies the query so that it a proper number of affected rows is returned. + if ($this->delete_hack === TRUE && preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql)) + { + return trim($sql).' WHERE 1=1'; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + $this->simple_query('SET AUTOCOMMIT=0'); + return $this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if ($this->simple_query('COMMIT')) + { + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if ($this->simple_query('ROLLBACK')) + { + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return mysql_real_escape_string($str, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return mysql_affected_rows($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + return mysql_insert_id($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SHOW TABLES FROM '.$this->escape_identifiers($this->database); + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql." LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE))) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->Field; + + sscanf($query[$i]->Type, '%[a-z](%d)', + $retval[$i]->type, + $retval[$i]->max_length + ); + + $retval[$i]->default = $query[$i]->Default; + $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI'); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => mysql_errno($this->conn_id), 'message' => mysql_error($this->conn_id)); + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * @return string + */ + protected function _from_tables() + { + if ( ! empty($this->qb_join) && count($this->qb_from) > 1) + { + return '('.implode(', ', $this->qb_from).')'; + } + + return implode(', ', $this->qb_from); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + // Error suppression to avoid annoying E_WARNINGs in cases + // where the connection has already been closed for some reason. + @mysql_close($this->conn_id); + } + +} diff --git a/system/database/drivers/mysql/mysql_forge.php b/system/database/drivers/mysql/mysql_forge.php new file mode 100644 index 00000000..7ed8f8d3 --- /dev/null +++ b/system/database/drivers/mysql/mysql_forge.php @@ -0,0 +1,243 @@ +db->char_set) && ! strpos($sql, 'CHARACTER SET') && ! strpos($sql, 'CHARSET')) + { + $sql .= ' DEFAULT CHARACTER SET = '.$this->db->char_set; + } + + if ( ! empty($this->db->dbcollat) && ! strpos($sql, 'COLLATE')) + { + $sql .= ' COLLATE = '.$this->db->dbcollat; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP') + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $field[$i] = ($alter_type === 'ADD') + ? "\n\tADD ".$field[$i]['_literal'] + : "\n\tMODIFY ".$field[$i]['_literal']; + } + else + { + if ($alter_type === 'ADD') + { + $field[$i]['_literal'] = "\n\tADD "; + } + else + { + $field[$i]['_literal'] = empty($field[$i]['new_name']) ? "\n\tMODIFY " : "\n\tCHANGE "; + } + + $field[$i] = $field[$i]['_literal'].$this->_process_column($field[$i]); + } + } + + return array($sql.implode(',', $field)); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + $extra_clause = isset($field['after']) + ? ' AFTER '.$this->db->escape_identifiers($field['after']) : ''; + + if (empty($extra_clause) && isset($field['first']) && $field['first'] === TRUE) + { + $extra_clause = ' FIRST'; + } + + + return $this->db->escape_identifiers($field['name']) + .(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name'])) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['null'] + .$field['default'] + .$field['auto_increment'] + .$field['unique'] + .(empty($field['comment']) ? '' : ' COMMENT '.$field['comment']) + .$extra_clause; + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table (ignored) + * @return string + */ + protected function _process_indexes($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sql .= ",\n\tKEY ".$this->db->escape_identifiers(implode('_', $this->keys[$i])) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).')'; + } + + $this->keys = array(); + + return $sql; + } + +} diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php new file mode 100644 index 00000000..7aa265eb --- /dev/null +++ b/system/database/drivers/mysql/mysql_result.php @@ -0,0 +1,199 @@ +num_rows = mysql_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of rows in the result set + * + * @return int + */ + public function num_rows() + { + return $this->num_rows; + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return mysql_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + mysql_field_seek($this->result_id, 0); + while ($field = mysql_fetch_field($this->result_id)) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = mysql_field_name($this->result_id, $i); + $retval[$i]->type = mysql_field_type($this->result_id, $i); + $retval[$i]->max_length = mysql_field_len($this->result_id, $i); + $retval[$i]->primary_key = (int) (strpos(mysql_field_flags($this->result_id, $i), 'primary_key') !== FALSE); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + mysql_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return $this->num_rows + ? mysql_data_seek($this->result_id, $n) + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return mysql_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return mysql_fetch_object($this->result_id, $class_name); + } + +} diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php new file mode 100644 index 00000000..bc01fc58 --- /dev/null +++ b/system/database/drivers/mysql/mysql_utility.php @@ -0,0 +1,211 @@ +db->query('SHOW CREATE TABLE '.$this->db->escape_identifiers($this->db->database.'.'.$table)); + + // No result means the table name was invalid + if ($query === FALSE) + { + continue; + } + + // Write out the table schema + $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline; + + if ($add_drop === TRUE) + { + $output .= 'DROP TABLE IF EXISTS '.$this->db->protect_identifiers($table).';'.$newline.$newline; + } + + $i = 0; + $result = $query->result_array(); + foreach ($result[0] as $val) + { + if ($i++ % 2) + { + $output .= $val.';'.$newline.$newline; + } + } + + // If inserts are not needed we're done... + if ($add_insert === FALSE) + { + continue; + } + + // Grab all the data from the current table + $query = $this->db->query('SELECT * FROM '.$this->db->protect_identifiers($table)); + + if ($query->num_rows() === 0) + { + continue; + } + + // Fetch the field names and determine if the field is an + // integer type. We use this info to decide whether to + // surround the data with quotes or not + + $i = 0; + $field_str = ''; + $is_int = array(); + while ($field = mysql_fetch_field($query->result_id)) + { + // Most versions of MySQL store timestamp as a string + $is_int[$i] = in_array(strtolower(mysql_field_type($query->result_id, $i)), + array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'), + TRUE); + + // Create a string of field names + $field_str .= $this->db->escape_identifiers($field->name).', '; + $i++; + } + + // Trim off the end comma + $field_str = preg_replace('/, $/' , '', $field_str); + + // Build the insert string + foreach ($query->result_array() as $row) + { + $val_str = ''; + + $i = 0; + foreach ($row as $v) + { + // Is the value NULL? + if ($v === NULL) + { + $val_str .= 'NULL'; + } + else + { + // Escape the data if it's not an integer + $val_str .= ($is_int[$i] === FALSE) ? $this->db->escape($v) : $v; + } + + // Append a comma + $val_str .= ', '; + $i++; + } + + // Remove the comma at the end of the string + $val_str = preg_replace('/, $/' , '', $val_str); + + // Build the INSERT string + $output .= 'INSERT INTO '.$this->db->protect_identifiers($table).' ('.$field_str.') VALUES ('.$val_str.');'.$newline; + } + + $output .= $newline.$newline; + } + + // Do we need to include a statement to re-enable foreign key checks? + if ($foreign_key_checks === FALSE) + { + $output .= 'SET foreign_key_checks = 1;'.$newline; + } + + return $output; + } + +} diff --git a/system/database/drivers/mysqli/index.html b/system/database/drivers/mysqli/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/mysqli/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php new file mode 100644 index 00000000..b59e8949 --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_driver.php @@ -0,0 +1,544 @@ +hostname[0] === '/') + { + $hostname = NULL; + $port = NULL; + $socket = $this->hostname; + } + else + { + $hostname = ($persistent === TRUE) + ? 'p:'.$this->hostname : $this->hostname; + $port = empty($this->port) ? NULL : $this->port; + $socket = NULL; + } + + $client_flags = ($this->compress === TRUE) ? MYSQLI_CLIENT_COMPRESS : 0; + $this->_mysqli = mysqli_init(); + + $this->_mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10); + + if (isset($this->stricton)) + { + if ($this->stricton) + { + $this->_mysqli->options(MYSQLI_INIT_COMMAND, 'SET SESSION sql_mode = CONCAT(@@sql_mode, ",", "STRICT_ALL_TABLES")'); + } + else + { + $this->_mysqli->options(MYSQLI_INIT_COMMAND, + 'SET SESSION sql_mode = + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( + @@sql_mode, + "STRICT_ALL_TABLES,", ""), + ",STRICT_ALL_TABLES", ""), + "STRICT_ALL_TABLES", ""), + "STRICT_TRANS_TABLES,", ""), + ",STRICT_TRANS_TABLES", ""), + "STRICT_TRANS_TABLES", "")' + ); + } + } + + if (is_array($this->encrypt)) + { + $ssl = array(); + empty($this->encrypt['ssl_key']) OR $ssl['key'] = $this->encrypt['ssl_key']; + empty($this->encrypt['ssl_cert']) OR $ssl['cert'] = $this->encrypt['ssl_cert']; + empty($this->encrypt['ssl_ca']) OR $ssl['ca'] = $this->encrypt['ssl_ca']; + empty($this->encrypt['ssl_capath']) OR $ssl['capath'] = $this->encrypt['ssl_capath']; + empty($this->encrypt['ssl_cipher']) OR $ssl['cipher'] = $this->encrypt['ssl_cipher']; + + if ( ! empty($ssl)) + { + if (isset($this->encrypt['ssl_verify'])) + { + if ($this->encrypt['ssl_verify']) + { + defined('MYSQLI_OPT_SSL_VERIFY_SERVER_CERT') && $this->_mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, TRUE); + } + // Apparently (when it exists), setting MYSQLI_OPT_SSL_VERIFY_SERVER_CERT + // to FALSE didn't do anything, so PHP 5.6.16 introduced yet another + // constant ... + // + // https://secure.php.net/ChangeLog-5.php#5.6.16 + // https://bugs.php.net/bug.php?id=68344 + elseif (defined('MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT')) + { + $client_flags |= MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT; + } + } + + $client_flags |= MYSQLI_CLIENT_SSL; + $this->_mysqli->ssl_set( + isset($ssl['key']) ? $ssl['key'] : NULL, + isset($ssl['cert']) ? $ssl['cert'] : NULL, + isset($ssl['ca']) ? $ssl['ca'] : NULL, + isset($ssl['capath']) ? $ssl['capath'] : NULL, + isset($ssl['cipher']) ? $ssl['cipher'] : NULL + ); + } + } + + if ($this->_mysqli->real_connect($hostname, $this->username, $this->password, $this->database, $port, $socket, $client_flags)) + { + // Prior to version 5.7.3, MySQL silently downgrades to an unencrypted connection if SSL setup fails + if ( + ($client_flags & MYSQLI_CLIENT_SSL) + && version_compare($this->_mysqli->client_info, '5.7.3', '<=') + && empty($this->_mysqli->query("SHOW STATUS LIKE 'ssl_cipher'")->fetch_object()->Value) + ) + { + $this->_mysqli->close(); + $message = 'MySQLi was configured for an SSL connection, but got an unencrypted connection instead!'; + log_message('error', $message); + return ($this->db_debug) ? $this->display_error($message, '', TRUE) : FALSE; + } + + return $this->_mysqli; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @return void + */ + public function reconnect() + { + if ($this->conn_id !== FALSE && $this->conn_id->ping() === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @param string $database + * @return bool + */ + public function db_select($database = '') + { + if ($database === '') + { + $database = $this->database; + } + + if ($this->conn_id->select_db($database)) + { + $this->database = $database; + $this->data_cache = array(); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @param string $charset + * @return bool + */ + protected function _db_set_charset($charset) + { + return $this->conn_id->set_charset($charset); + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + return $this->data_cache['version'] = $this->conn_id->server_info; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return mixed + */ + protected function _execute($sql) + { + return $this->conn_id->query($this->_prep_query($sql)); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @param string $sql an SQL query + * @return string + */ + protected function _prep_query($sql) + { + // mysqli_affected_rows() returns 0 for "DELETE FROM TABLE" queries. This hack + // modifies the query so that it a proper number of affected rows is returned. + if ($this->delete_hack === TRUE && preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql)) + { + return trim($sql).' WHERE 1=1'; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + $this->conn_id->autocommit(FALSE); + return is_php('5.5') + ? $this->conn_id->begin_transaction() + : $this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if ($this->conn_id->commit()) + { + $this->conn_id->autocommit(TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if ($this->conn_id->rollback()) + { + $this->conn_id->autocommit(TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return $this->conn_id->real_escape_string($str); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return $this->conn_id->affected_rows; + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + return $this->conn_id->insert_id; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SHOW TABLES FROM '.$this->escape_identifiers($this->database); + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql." LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE))) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->Field; + + sscanf($query[$i]->Type, '%[a-z](%d)', + $retval[$i]->type, + $retval[$i]->max_length + ); + + $retval[$i]->default = $query[$i]->Default; + $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI'); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + if ( ! empty($this->_mysqli->connect_errno)) + { + return array( + 'code' => $this->_mysqli->connect_errno, + 'message' => $this->_mysqli->connect_error + ); + } + + return array('code' => $this->conn_id->errno, 'message' => $this->conn_id->error); + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * @return string + */ + protected function _from_tables() + { + if ( ! empty($this->qb_join) && count($this->qb_from) > 1) + { + return '('.implode(', ', $this->qb_from).')'; + } + + return implode(', ', $this->qb_from); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + $this->conn_id->close(); + } + +} diff --git a/system/database/drivers/mysqli/mysqli_forge.php b/system/database/drivers/mysqli/mysqli_forge.php new file mode 100644 index 00000000..c5b23b6c --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_forge.php @@ -0,0 +1,244 @@ +db->char_set) && ! strpos($sql, 'CHARACTER SET') && ! strpos($sql, 'CHARSET')) + { + $sql .= ' DEFAULT CHARACTER SET = '.$this->db->char_set; + } + + if ( ! empty($this->db->dbcollat) && ! strpos($sql, 'COLLATE')) + { + $sql .= ' COLLATE = '.$this->db->dbcollat; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP') + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $field[$i] = ($alter_type === 'ADD') + ? "\n\tADD ".$field[$i]['_literal'] + : "\n\tMODIFY ".$field[$i]['_literal']; + } + else + { + if ($alter_type === 'ADD') + { + $field[$i]['_literal'] = "\n\tADD "; + } + else + { + $field[$i]['_literal'] = empty($field[$i]['new_name']) ? "\n\tMODIFY " : "\n\tCHANGE "; + } + + $field[$i] = $field[$i]['_literal'].$this->_process_column($field[$i]); + } + } + + return array($sql.implode(',', $field)); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + $extra_clause = isset($field['after']) + ? ' AFTER '.$this->db->escape_identifiers($field['after']) : ''; + + if (empty($extra_clause) && isset($field['first']) && $field['first'] === TRUE) + { + $extra_clause = ' FIRST'; + } + + return $this->db->escape_identifiers($field['name']) + .(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name'])) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['null'] + .$field['default'] + .$field['auto_increment'] + .$field['unique'] + .(empty($field['comment']) ? '' : ' COMMENT '.$field['comment']) + .$extra_clause; + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table (ignored) + * @return string + */ + protected function _process_indexes($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sql .= ",\n\tKEY ".$this->db->escape_identifiers(implode('_', $this->keys[$i])) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).')'; + } + + $this->keys = array(); + + return $sql; + } + +} diff --git a/system/database/drivers/mysqli/mysqli_result.php b/system/database/drivers/mysqli/mysqli_result.php new file mode 100644 index 00000000..0b3d9c2b --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_result.php @@ -0,0 +1,240 @@ +num_rows) + ? $this->num_rows + : $this->num_rows = $this->result_id->num_rows; + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return $this->result_id->field_count; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + $this->result_id->field_seek(0); + while ($field = $this->result_id->fetch_field()) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + $field_data = $this->result_id->fetch_fields(); + for ($i = 0, $c = count($field_data); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $field_data[$i]->name; + $retval[$i]->type = static::_get_field_type($field_data[$i]->type); + $retval[$i]->max_length = $field_data[$i]->max_length; + $retval[$i]->primary_key = (int) ($field_data[$i]->flags & MYSQLI_PRI_KEY_FLAG); + $retval[$i]->default = $field_data[$i]->def; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Get field type + * + * Extracts field type info from the bitflags returned by + * mysqli_result::fetch_fields() + * + * @used-by CI_DB_mysqli_result::field_data() + * @param int $flags + * @return string + */ + private static function _get_field_type($flags) + { + static $map; + isset($map) OR $map = array( + MYSQLI_TYPE_DECIMAL => 'decimal', + MYSQLI_TYPE_BIT => 'bit', + MYSQLI_TYPE_TINY => 'tinyint', + MYSQLI_TYPE_SHORT => 'smallint', + MYSQLI_TYPE_INT24 => 'mediumint', + MYSQLI_TYPE_LONG => 'int', + MYSQLI_TYPE_LONGLONG => 'bigint', + MYSQLI_TYPE_FLOAT => 'float', + MYSQLI_TYPE_DOUBLE => 'double', + MYSQLI_TYPE_TIMESTAMP => 'timestamp', + MYSQLI_TYPE_DATE => 'date', + MYSQLI_TYPE_TIME => 'time', + MYSQLI_TYPE_DATETIME => 'datetime', + MYSQLI_TYPE_YEAR => 'year', + MYSQLI_TYPE_NEWDATE => 'date', + MYSQLI_TYPE_INTERVAL => 'interval', + MYSQLI_TYPE_ENUM => 'enum', + MYSQLI_TYPE_SET => 'set', + MYSQLI_TYPE_TINY_BLOB => 'tinyblob', + MYSQLI_TYPE_MEDIUM_BLOB => 'mediumblob', + MYSQLI_TYPE_BLOB => 'blob', + MYSQLI_TYPE_LONG_BLOB => 'longblob', + MYSQLI_TYPE_STRING => 'char', + MYSQLI_TYPE_VAR_STRING => 'varchar', + MYSQLI_TYPE_GEOMETRY => 'geometry' + ); + + foreach ($map as $flag => $name) + { + if ($flags & $flag) + { + return $name; + } + } + + return $flags; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_object($this->result_id)) + { + $this->result_id->free(); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return $this->result_id->data_seek($n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return $this->result_id->fetch_assoc(); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return $this->result_id->fetch_object($class_name); + } + +} diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php new file mode 100644 index 00000000..1699b611 --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_utility.php @@ -0,0 +1,215 @@ +db->query('SHOW CREATE TABLE '.$this->db->escape_identifiers($this->db->database.'.'.$table)); + + // No result means the table name was invalid + if ($query === FALSE) + { + continue; + } + + // Write out the table schema + $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline; + + if ($add_drop === TRUE) + { + $output .= 'DROP TABLE IF EXISTS '.$this->db->protect_identifiers($table).';'.$newline.$newline; + } + + $i = 0; + $result = $query->result_array(); + foreach ($result[0] as $val) + { + if ($i++ % 2) + { + $output .= $val.';'.$newline.$newline; + } + } + + // If inserts are not needed we're done... + if ($add_insert === FALSE) + { + continue; + } + + // Grab all the data from the current table + $query = $this->db->query('SELECT * FROM '.$this->db->protect_identifiers($table)); + + if ($query->num_rows() === 0) + { + continue; + } + + // Fetch the field names and determine if the field is an + // integer type. We use this info to decide whether to + // surround the data with quotes or not + + $i = 0; + $field_str = ''; + $is_int = array(); + while ($field = $query->result_id->fetch_field()) + { + // Most versions of MySQL store timestamp as a string + $is_int[$i] = ($field->type & MYSQLI_TYPE_TINY) + OR ($field->type & MYSQLI_TYPE_SHORT) + OR ($field->type & MYSQLI_TYPE_INT24) + OR ($field->type & MYSQLI_TYPE_LONG) + OR ($field->type & MYSQLI_TYPE_LONGLONG); + + // Create a string of field names + $field_str .= $this->db->escape_identifiers($field->name).', '; + $i++; + } + + // Trim off the end comma + $field_str = preg_replace('/, $/' , '', $field_str); + + // Build the insert string + foreach ($query->result_array() as $row) + { + $val_str = ''; + + $i = 0; + foreach ($row as $v) + { + // Is the value NULL? + if ($v === NULL) + { + $val_str .= 'NULL'; + } + else + { + // Escape the data if it's not an integer + $val_str .= ($is_int[$i] === FALSE) ? $this->db->escape($v) : $v; + } + + // Append a comma + $val_str .= ', '; + $i++; + } + + // Remove the comma at the end of the string + $val_str = preg_replace('/, $/' , '', $val_str); + + // Build the INSERT string + $output .= 'INSERT INTO '.$this->db->protect_identifiers($table).' ('.$field_str.') VALUES ('.$val_str.');'.$newline; + } + + $output .= $newline.$newline; + } + + // Do we need to include a statement to re-enable foreign key checks? + if ($foreign_key_checks === FALSE) + { + $output .= 'SET foreign_key_checks = 1;'.$newline; + } + + return $output; + } + +} diff --git a/system/database/drivers/oci8/index.html b/system/database/drivers/oci8/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/oci8/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php new file mode 100644 index 00000000..fb2f6b31 --- /dev/null +++ b/system/database/drivers/oci8/oci8_driver.php @@ -0,0 +1,688 @@ + '/^\(DESCRIPTION=(\(.+\)){2,}\)$/', // TNS + // Easy Connect string (Oracle 10g+) + 'ec' => '/^(\/\/)?[a-z0-9.:_-]+(:[1-9][0-9]{0,4})?(\/[a-z0-9$_]+)?(:[^\/])?(\/[a-z0-9$_]+)?$/i', + 'in' => '/^[a-z0-9$_]+$/i' // Instance name (defined in tnsnames.ora) + ); + + /* Space characters don't have any effect when actually + * connecting, but can be a hassle while validating the DSN. + */ + $this->dsn = str_replace(array("\n", "\r", "\t", ' '), '', $this->dsn); + + if ($this->dsn !== '') + { + foreach ($valid_dsns as $regexp) + { + if (preg_match($regexp, $this->dsn)) + { + return; + } + } + } + + // Legacy support for TNS in the hostname configuration field + $this->hostname = str_replace(array("\n", "\r", "\t", ' '), '', $this->hostname); + if (preg_match($valid_dsns['tns'], $this->hostname)) + { + $this->dsn = $this->hostname; + return; + } + elseif ($this->hostname !== '' && strpos($this->hostname, '/') === FALSE && strpos($this->hostname, ':') === FALSE + && (( ! empty($this->port) && ctype_digit($this->port)) OR $this->database !== '')) + { + /* If the hostname field isn't empty, doesn't contain + * ':' and/or '/' and if port and/or database aren't + * empty, then the hostname field is most likely indeed + * just a hostname. Therefore we'll try and build an + * Easy Connect string from these 3 settings, assuming + * that the database field is a service name. + */ + $this->dsn = $this->hostname + .(( ! empty($this->port) && ctype_digit($this->port)) ? ':'.$this->port : '') + .($this->database !== '' ? '/'.ltrim($this->database, '/') : ''); + + if (preg_match($valid_dsns['ec'], $this->dsn)) + { + return; + } + } + + /* At this point, we can only try and validate the hostname and + * database fields separately as DSNs. + */ + if (preg_match($valid_dsns['ec'], $this->hostname) OR preg_match($valid_dsns['in'], $this->hostname)) + { + $this->dsn = $this->hostname; + return; + } + + $this->database = str_replace(array("\n", "\r", "\t", ' '), '', $this->database); + foreach ($valid_dsns as $regexp) + { + if (preg_match($regexp, $this->database)) + { + return; + } + } + + /* Well - OK, an empty string should work as well. + * PHP will try to use environment variables to + * determine which Oracle instance to connect to. + */ + $this->dsn = ''; + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + $func = ($persistent === TRUE) ? 'oci_pconnect' : 'oci_connect'; + return empty($this->char_set) + ? $func($this->username, $this->password, $this->dsn) + : $func($this->username, $this->password, $this->dsn, $this->char_set); + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if ( ! $this->conn_id OR ($version_string = oci_server_version($this->conn_id)) === FALSE) + { + return FALSE; + } + elseif (preg_match('#Release\s(\d+(?:\.\d+)+)#', $version_string, $match)) + { + return $this->data_cache['version'] = $match[1]; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + /* Oracle must parse the query before it is run. All of the actions with + * the query are based on the statement id returned by oci_parse(). + */ + if ($this->_reset_stmt_id === TRUE) + { + $this->stmt_id = oci_parse($this->conn_id, $sql); + } + + oci_set_prefetch($this->stmt_id, 1000); + return oci_execute($this->stmt_id, $this->commit_mode); + } + + // -------------------------------------------------------------------- + + /** + * Get cursor. Returns a cursor from the database + * + * @return resource + */ + public function get_cursor() + { + return $this->curs_id = oci_new_cursor($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Stored Procedure. Executes a stored procedure + * + * @param string package name in which the stored procedure is in + * @param string stored procedure name to execute + * @param array parameters + * @return mixed + * + * params array keys + * + * KEY OPTIONAL NOTES + * name no the name of the parameter should be in : format + * value no the value of the parameter. If this is an OUT or IN OUT parameter, + * this should be a reference to a variable + * type yes the type of the parameter + * length yes the max size of the parameter + */ + public function stored_procedure($package, $procedure, array $params) + { + if ($package === '' OR $procedure === '') + { + log_message('error', 'Invalid query: '.$package.'.'.$procedure); + return ($this->db_debug) ? $this->display_error('db_invalid_query') : FALSE; + } + + // Build the query string + $sql = 'BEGIN '.$package.'.'.$procedure.'('; + + $have_cursor = FALSE; + foreach ($params as $param) + { + $sql .= $param['name'].','; + + if (isset($param['type']) && $param['type'] === OCI_B_CURSOR) + { + $have_cursor = TRUE; + } + } + $sql = trim($sql, ',').'); END;'; + + $this->_reset_stmt_id = FALSE; + $this->stmt_id = oci_parse($this->conn_id, $sql); + $this->_bind_params($params); + $result = $this->query($sql, FALSE, $have_cursor); + $this->_reset_stmt_id = TRUE; + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Bind parameters + * + * @param array $params + * @return void + */ + protected function _bind_params($params) + { + if ( ! is_array($params) OR ! is_resource($this->stmt_id)) + { + return; + } + + foreach ($params as $param) + { + foreach (array('name', 'value', 'type', 'length') as $val) + { + if ( ! isset($param[$val])) + { + $param[$val] = ''; + } + } + + oci_bind_by_name($this->stmt_id, $param['name'], $param['value'], $param['length'], $param['type']); + } + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + $this->commit_mode = OCI_NO_AUTO_COMMIT; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + $this->commit_mode = OCI_COMMIT_ON_SUCCESS; + + return oci_commit($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + $this->commit_mode = OCI_COMMIT_ON_SUCCESS; + return oci_rollback($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return oci_num_rows($this->stmt_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + // not supported in oracle + return $this->display_error('db_unsupported_function'); + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "TABLE_NAME" FROM "ALL_TABLES"'; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql.' WHERE "TABLE_NAME" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + if (strpos($table, '.') !== FALSE) + { + sscanf($table, '%[^.].%s', $owner, $table); + } + else + { + $owner = $this->username; + } + + return 'SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS + WHERE UPPER(OWNER) = '.$this->escape(strtoupper($owner)).' + AND UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (strpos($table, '.') !== FALSE) + { + sscanf($table, '%[^.].%s', $owner, $table); + } + else + { + $owner = $this->username; + } + + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHAR_LENGTH, DATA_PRECISION, DATA_LENGTH, DATA_DEFAULT, NULLABLE + FROM ALL_TAB_COLUMNS + WHERE UPPER(OWNER) = '.$this->escape(strtoupper($owner)).' + AND UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + + $length = ($query[$i]->CHAR_LENGTH > 0) + ? $query[$i]->CHAR_LENGTH : $query[$i]->DATA_PRECISION; + if ($length === NULL) + { + $length = $query[$i]->DATA_LENGTH; + } + $retval[$i]->max_length = $length; + + $default = $query[$i]->DATA_DEFAULT; + if ($default === NULL && $query[$i]->NULLABLE === 'N') + { + $default = ''; + } + $retval[$i]->default = $default; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + // oci_error() returns an array that already contains + // 'code' and 'message' keys, but it can return false + // if there was no error .... + if (is_resource($this->curs_id)) + { + $error = oci_error($this->curs_id); + } + elseif (is_resource($this->stmt_id)) + { + $error = oci_error($this->stmt_id); + } + elseif (is_resource($this->conn_id)) + { + $error = oci_error($this->conn_id); + } + else + { + $error = oci_error(); + } + + return is_array($error) + ? $error + : array('code' => '', 'message' => ''); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _insert_batch($table, $keys, $values) + { + $keys = implode(', ', $keys); + $sql = "INSERT ALL\n"; + + for ($i = 0, $c = count($values); $i < $c; $i++) + { + $sql .= ' INTO '.$table.' ('.$keys.') VALUES '.$values[$i]."\n"; + } + + return $sql.'SELECT * FROM dual'; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE TABLE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + $this->where('rownum <= ',$this->qb_limit, FALSE); + $this->qb_limit = FALSE; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + if (version_compare($this->version(), '12.1', '>=')) + { + // OFFSET-FETCH can be used only with the ORDER BY clause + empty($this->qb_orderby) && $sql .= ' ORDER BY 1'; + + return $sql.' OFFSET '.(int) $this->qb_offset.' ROWS FETCH NEXT '.$this->qb_limit.' ROWS ONLY'; + } + + $this->limit_used = TRUE; + return 'SELECT * FROM (SELECT inner_query.*, rownum rnum FROM ('.$sql.') inner_query WHERE rownum < '.($this->qb_offset + $this->qb_limit + 1).')' + .($this->qb_offset ? ' WHERE rnum >= '.($this->qb_offset + 1) : ''); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + oci_close($this->conn_id); + } + +} diff --git a/system/database/drivers/oci8/oci8_forge.php b/system/database/drivers/oci8/oci8_forge.php new file mode 100644 index 00000000..724a76df --- /dev/null +++ b/system/database/drivers/oci8/oci8_forge.php @@ -0,0 +1,187 @@ +db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $field[$i] = "\n\t".$field[$i]['_literal']; + } + else + { + $field[$i]['_literal'] = "\n\t".$this->_process_column($field[$i]); + + if ( ! empty($field[$i]['comment'])) + { + $sqls[] = 'COMMENT ON COLUMN ' + .$this->db->escape_identifiers($table).'.'.$this->db->escape_identifiers($field[$i]['name']) + .' IS '.$field[$i]['comment']; + } + + if ($alter_type === 'MODIFY' && ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + + $field[$i] = "\n\t".$field[$i]['_literal']; + } + } + + $sql .= ' '.$alter_type.' '; + $sql .= (count($field) === 1) + ? $field[0] + : '('.implode(',', $field).')'; + + // RENAME COLUMN must be executed after MODIFY + array_unshift($sqls, $sql); + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported - sequences and triggers must be used instead + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'INT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'BIGINT': + $attributes['TYPE'] = 'NUMBER'; + return; + default: return; + } + } +} diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php new file mode 100644 index 00000000..0c354333 --- /dev/null +++ b/system/database/drivers/oci8/oci8_result.php @@ -0,0 +1,229 @@ +stmt_id = $driver_object->stmt_id; + $this->curs_id = $driver_object->curs_id; + $this->limit_used = $driver_object->limit_used; + $this->commit_mode =& $driver_object->commit_mode; + $driver_object->stmt_id = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + $count = oci_num_fields($this->stmt_id); + + // if we used a limit we subtract it + return ($this->limit_used) ? $count - 1 : $count; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + for ($c = 1, $fieldCount = $this->num_fields(); $c <= $fieldCount; $c++) + { + $field_names[] = oci_field_name($this->stmt_id, $c); + } + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($c = 1, $fieldCount = $this->num_fields(); $c <= $fieldCount; $c++) + { + $F = new stdClass(); + $F->name = oci_field_name($this->stmt_id, $c); + $F->type = oci_field_type($this->stmt_id, $c); + $F->max_length = oci_field_size($this->stmt_id, $c); + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + oci_free_statement($this->result_id); + $this->result_id = FALSE; + } + + if (is_resource($this->stmt_id)) + { + oci_free_statement($this->stmt_id); + } + + if (is_resource($this->curs_id)) + { + oci_cancel($this->curs_id); + $this->curs_id = NULL; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id; + return oci_fetch_assoc($id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + $row = ($this->curs_id) + ? oci_fetch_object($this->curs_id) + : oci_fetch_object($this->stmt_id); + + if ($class_name === 'stdClass' OR ! $row) + { + return $row; + } + + $class_name = new $class_name(); + foreach ($row as $key => $value) + { + $class_name->$key = $value; + } + + return $class_name; + } + +} diff --git a/system/Encryption/EncrypterInterface.php b/system/database/drivers/oci8/oci8_utility.php similarity index 56% rename from system/Encryption/EncrypterInterface.php rename to system/database/drivers/oci8/oci8_utility.php index 4b008ad9..ce0dfc5f 100644 --- a/system/Encryption/EncrypterInterface.php +++ b/system/database/drivers/oci8/oci8_utility.php @@ -1,5 +1,4 @@ db->display_error('db_unsupported_feature'); + } + } diff --git a/system/database/drivers/odbc/index.html b/system/database/drivers/odbc/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/odbc/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php new file mode 100644 index 00000000..ef982fc6 --- /dev/null +++ b/system/database/drivers/odbc/odbc_driver.php @@ -0,0 +1,425 @@ +dsn)) + { + $this->dsn = $this->hostname; + } + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + return ($persistent === TRUE) + ? odbc_pconnect($this->dsn, $this->username, $this->password) + : odbc_connect($this->dsn, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Compile Bindings + * + * @param string $sql SQL statement + * @param array $binds An array of values to bind + * @return string + */ + public function compile_binds($sql, $binds) + { + if (empty($binds) OR empty($this->bind_marker) OR strpos($sql, $this->bind_marker) === FALSE) + { + return $sql; + } + elseif ( ! is_array($binds)) + { + $binds = array($binds); + $bind_count = 1; + } + else + { + // Make sure we're using numeric keys + $binds = array_values($binds); + $bind_count = count($binds); + } + + // We'll need the marker length later + $ml = strlen($this->bind_marker); + + // Make sure not to replace a chunk inside a string that happens to match the bind marker + if ($c = preg_match_all("/'[^']*'|\"[^\"]*\"/i", $sql, $matches)) + { + $c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i', + str_replace($matches[0], + str_replace($this->bind_marker, str_repeat(' ', $ml), $matches[0]), + $sql, $c), + $matches, PREG_OFFSET_CAPTURE); + + // Bind values' count must match the count of markers in the query + if ($bind_count !== $c) + { + return $sql; + } + } + elseif (($c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i', $sql, $matches, PREG_OFFSET_CAPTURE)) !== $bind_count) + { + return $sql; + } + + if ($this->bind_marker !== '?') + { + do + { + $c--; + $sql = substr_replace($sql, '?', $matches[0][$c][1], $ml); + } + while ($c !== 0); + } + + if (FALSE !== ($this->odbc_result = odbc_prepare($this->conn_id, $sql))) + { + $this->binds = array_values($binds); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + if ( ! isset($this->odbc_result)) + { + return odbc_exec($this->conn_id, $sql); + } + elseif ($this->odbc_result === FALSE) + { + return FALSE; + } + + if (TRUE === ($success = odbc_execute($this->odbc_result, $this->binds))) + { + // For queries that return result sets, return the result_id resource on success + $this->is_write_type($sql) OR $success = $this->odbc_result; + } + + $this->odbc_result = NULL; + $this->binds = array(); + + return $success; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return odbc_autocommit($this->conn_id, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if (odbc_commit($this->conn_id)) + { + odbc_autocommit($this->conn_id, TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if (odbc_rollback($this->conn_id)) + { + odbc_autocommit($this->conn_id, TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @param string An SQL query string + * @return bool + */ + public function is_write_type($sql) + { + if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#is', $sql)) + { + return FALSE; + } + + return parent::is_write_type($sql); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + $this->display_error('db_unsupported_feature'); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return odbc_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return bool + */ + public function insert_id() + { + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = '".$this->schema."'"; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql." AND table_name LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @param string $table + * @return string + */ + protected function _field_data($table) + { + return 'SELECT TOP 1 FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => odbc_error($this->conn_id), 'message' => odbc_errormsg($this->conn_id)); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + odbc_close($this->conn_id); + } +} diff --git a/system/Database/MySQLi/Builder.php b/system/database/drivers/odbc/odbc_forge.php similarity index 51% rename from system/Database/MySQLi/Builder.php rename to system/database/drivers/odbc/odbc_forge.php index d2eb6e6c..77b2fdf6 100644 --- a/system/Database/MySQLi/Builder.php +++ b/system/database/drivers/odbc/odbc_forge.php @@ -1,5 +1,4 @@ 'IGNORE', - 'insert' => 'IGNORE', - 'delete' => 'IGNORE', - ]; + protected $_drop_table_if = FALSE; /** - * FROM tables - * - * Groups tables in FROM clauses if needed, so there is no confusion - * about operator precedence. + * UNSIGNED support * - * Note: This is only used (and overridden) by MySQL. + * @var bool|array + */ + protected $_unsigned = FALSE; + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT * - * @return string + * @param array &$attributes + * @param array &$field + * @return void */ - protected function _fromTables(): string + protected function _attr_auto_increment(&$attributes, &$field) { - if (! empty($this->QBJoin) && count($this->QBFrom) > 1) - { - return '(' . implode(', ', $this->QBFrom) . ')'; - } - - return implode(', ', $this->QBFrom); + // Not supported (in most databases at least) } + } diff --git a/system/database/drivers/odbc/odbc_result.php b/system/database/drivers/odbc/odbc_result.php new file mode 100644 index 00000000..845aa9c7 --- /dev/null +++ b/system/database/drivers/odbc/odbc_result.php @@ -0,0 +1,268 @@ +num_rows)) + { + return $this->num_rows; + } + elseif (($this->num_rows = odbc_num_rows($this->result_id)) !== -1) + { + return $this->num_rows; + } + + // Work-around for ODBC subdrivers that don't support num_rows() + if (count($this->result_array) > 0) + { + return $this->num_rows = count($this->result_array); + } + elseif (count($this->result_object) > 0) + { + return $this->num_rows = count($this->result_object); + } + + return $this->num_rows = count($this->result_array()); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return odbc_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + $num_fields = $this->num_fields(); + + if ($num_fields > 0) + { + for ($i = 1; $i <= $num_fields; $i++) + { + $field_names[] = odbc_field_name($this->result_id, $i); + } + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $odbc_index = 1, $c = $this->num_fields(); $i < $c; $i++, $odbc_index++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = odbc_field_name($this->result_id, $odbc_index); + $retval[$i]->type = odbc_field_type($this->result_id, $odbc_index); + $retval[$i]->max_length = odbc_field_len($this->result_id, $odbc_index); + $retval[$i]->primary_key = 0; + $retval[$i]->default = ''; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + odbc_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return odbc_fetch_array($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + $row = odbc_fetch_object($this->result_id); + + if ($class_name === 'stdClass' OR ! $row) + { + return $row; + } + + $class_name = new $class_name(); + foreach ($row as $key => $value) + { + $class_name->$key = $value; + } + + return $class_name; + } + +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('odbc_fetch_array')) +{ + /** + * ODBC Fetch array + * + * Emulates the native odbc_fetch_array() function when + * it is not available (odbc_fetch_array() requires unixODBC) + * + * @param resource &$result + * @param int $rownumber + * @return array + */ + function odbc_fetch_array(&$result, $rownumber = 1) + { + $rs = array(); + if ( ! odbc_fetch_into($result, $rs, $rownumber)) + { + return FALSE; + } + + $rs_assoc = array(); + foreach ($rs as $k => $v) + { + $field_name = odbc_field_name($result, $k+1); + $rs_assoc[$field_name] = $v; + } + + return $rs_assoc; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('odbc_fetch_object')) +{ + /** + * ODBC Fetch object + * + * Emulates the native odbc_fetch_object() function when + * it is not available. + * + * @param resource &$result + * @param int $rownumber + * @return object + */ + function odbc_fetch_object(&$result, $rownumber = 1) + { + $rs = array(); + if ( ! odbc_fetch_into($result, $rs, $rownumber)) + { + return FALSE; + } + + $rs_object = new stdClass(); + foreach ($rs as $k => $v) + { + $field_name = odbc_field_name($result, $k+1); + $rs_object->$field_name = $v; + } + + return $rs_object; + } +} diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php new file mode 100644 index 00000000..643f6ec0 --- /dev/null +++ b/system/database/drivers/odbc/odbc_utility.php @@ -0,0 +1,63 @@ +db->display_error('db_unsupported_feature'); + } + +} diff --git a/system/database/drivers/pdo/index.html b/system/database/drivers/pdo/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/pdo/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/pdo/pdo_driver.php b/system/database/drivers/pdo/pdo_driver.php new file mode 100644 index 00000000..6afc999c --- /dev/null +++ b/system/database/drivers/pdo/pdo_driver.php @@ -0,0 +1,329 @@ +dsn, $match) && count($match) === 2) + { + // If there is a minimum valid dsn string pattern found, we're done + // This is for general PDO users, who tend to have a full DSN string. + $this->subdriver = $match[1]; + return; + } + // Legacy support for DSN specified in the hostname field + elseif (preg_match('/([^:]+):/', $this->hostname, $match) && count($match) === 2) + { + $this->dsn = $this->hostname; + $this->hostname = NULL; + $this->subdriver = $match[1]; + return; + } + elseif (in_array($this->subdriver, array('mssql', 'sybase'), TRUE)) + { + $this->subdriver = 'dblib'; + } + elseif ($this->subdriver === '4D') + { + $this->subdriver = '4d'; + } + elseif ( ! in_array($this->subdriver, array('4d', 'cubrid', 'dblib', 'firebird', 'ibm', 'informix', 'mysql', 'oci', 'odbc', 'pgsql', 'sqlite', 'sqlsrv'), TRUE)) + { + log_message('error', 'PDO: Invalid or non-existent subdriver'); + + if ($this->db_debug) + { + show_error('Invalid or non-existent PDO subdriver'); + } + } + + $this->dsn = NULL; + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return object + */ + public function db_connect($persistent = FALSE) + { + if ($persistent === TRUE) + { + $this->options[PDO::ATTR_PERSISTENT] = TRUE; + } + + try + { + return new PDO($this->dsn, $this->username, $this->password, $this->options); + } + catch (PDOException $e) + { + if ($this->db_debug && empty($this->failover)) + { + $this->display_error($e->getMessage(), '', TRUE); + } + + return FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + // Not all subdrivers support the getAttribute() method + try + { + return $this->data_cache['version'] = $this->conn_id->getAttribute(PDO::ATTR_SERVER_VERSION); + } + catch (PDOException $e) + { + return parent::version(); + } + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql SQL query + * @return mixed + */ + protected function _execute($sql) + { + return $this->conn_id->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return $this->conn_id->beginTransaction(); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return $this->conn_id->commit(); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return $this->conn_id->rollBack(); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + // Escape the string + $str = $this->conn_id->quote($str); + + // If there are duplicated quotes, trim them away + return ($str[0] === "'") + ? substr($str, 1, -1) + : $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return is_object($this->result_id) ? $this->result_id->rowCount() : 0; + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @param string $name + * @return int + */ + public function insert_id($name = NULL) + { + return $this->conn_id->lastInsertId($name); + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @param string $table + * @return string + */ + protected function _field_data($table) + { + return 'SELECT TOP 1 * FROM '.$this->protect_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + $error = array('code' => '00000', 'message' => ''); + $pdo_error = $this->conn_id->errorInfo(); + + if (empty($pdo_error[0])) + { + return $error; + } + + $error['code'] = isset($pdo_error[1]) ? $pdo_error[0].'/'.$pdo_error[1] : $pdo_error[0]; + if (isset($pdo_error[2])) + { + $error['message'] = $pdo_error[2]; + } + + return $error; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE TABLE '.$table; + } + +} diff --git a/system/Format/FormatterInterface.php b/system/database/drivers/pdo/pdo_forge.php similarity index 59% rename from system/Format/FormatterInterface.php rename to system/database/drivers/pdo/pdo_forge.php index 17bc6935..685b6776 100644 --- a/system/Format/FormatterInterface.php +++ b/system/database/drivers/pdo/pdo_forge.php @@ -1,5 +1,4 @@ num_rows)) + { + return $this->num_rows; + } + elseif (count($this->result_array) > 0) + { + return $this->num_rows = count($this->result_array); + } + elseif (count($this->result_object) > 0) + { + return $this->num_rows = count($this->result_object); + } + elseif (($num_rows = $this->result_id->rowCount()) > 0) + { + return $this->num_rows = $num_rows; + } + + return $this->num_rows = count($this->result_array()); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return $this->result_id->columnCount(); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return bool + */ + public function list_fields() + { + $field_names = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + // Might trigger an E_WARNING due to not all subdrivers + // supporting getColumnMeta() + $field_names[$i] = @$this->result_id->getColumnMeta($i); + $field_names[$i] = $field_names[$i]['name']; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + try + { + $retval = array(); + + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $field = $this->result_id->getColumnMeta($i); + + $retval[$i] = new stdClass(); + $retval[$i]->name = $field['name']; + $retval[$i]->type = $field['native_type']; + $retval[$i]->max_length = ($field['len'] > 0) ? $field['len'] : NULL; + $retval[$i]->primary_key = (int) ( ! empty($field['flags']) && in_array('primary_key', $field['flags'], TRUE)); + } + + return $retval; + } + catch (Exception $e) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsupported_feature'); + } + + return FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_object($this->result_id)) + { + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return $this->result_id->fetch(PDO::FETCH_ASSOC); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return $this->result_id->fetchObject($class_name); + } + +} diff --git a/system/database/drivers/pdo/pdo_utility.php b/system/database/drivers/pdo/pdo_utility.php new file mode 100644 index 00000000..5029cac9 --- /dev/null +++ b/system/database/drivers/pdo/pdo_utility.php @@ -0,0 +1,63 @@ +db->display_error('db_unsupported_feature'); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/index.html b/system/database/drivers/pdo/subdrivers/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/pdo/subdrivers/pdo_4d_driver.php b/system/database/drivers/pdo/subdrivers/pdo_4d_driver.php new file mode 100644 index 00000000..7eaeaa1f --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_4d_driver.php @@ -0,0 +1,200 @@ +dsn)) + { + $this->dsn = '4D:host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + empty($this->port) OR $this->dsn .= ';port='.$this->port; + empty($this->database) OR $this->dsn .= ';dbname='.$this->database; + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + } + elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 3) === FALSE) + { + $this->dsn .= ';charset='.$this->char_set; + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT '.$this->escape_identifiers('TABLE_NAME').' FROM '.$this->escape_identifiers('_USER_TABLES'); + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' WHERE '.$this->escape_identifiers('TABLE_NAME')." LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT '.$this->escape_identifiers('COLUMN_NAME').' FROM '.$this->escape_identifiers('_USER_COLUMNS') + .' WHERE '.$this->escape_identifiers('TABLE_NAME').' = '.$this->escape($table); + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @param string $table + * @return string + */ + protected function _field_data($table) + { + return 'SELECT * FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE).' LIMIT 1'; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + return $sql.' LIMIT '.$this->qb_limit.($this->qb_offset ? ' OFFSET '.$this->qb_offset : ''); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_4d_forge.php b/system/database/drivers/pdo/subdrivers/pdo_4d_forge.php new file mode 100644 index 00000000..3f636d3b --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_4d_forge.php @@ -0,0 +1,217 @@ + 'INT', + 'SMALLINT' => 'INT', + 'INT' => 'INT64', + 'INT32' => 'INT64' + ); + + /** + * DEFAULT value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_default = FALSE; + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('ADD', 'DROP'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + // No method of modifying columns is supported + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'].$field['length'] + .$field['null'] + .$field['unique'] + .$field['auto_increment']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INTEGER': + $attributes['TYPE'] = 'INT'; + return; + case 'BIGINT': + $attributes['TYPE'] = 'INT64'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute UNIQUE + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_unique(&$attributes, &$field) + { + if ( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE) + { + $field['unique'] = ' UNIQUE'; + + // UNIQUE must be used with NOT NULL + $field['null'] = ' NOT NULL'; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE) + { + if (stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' AUTO_INCREMENT'; + } + elseif (strcasecmp($field['type'], 'UUID') === 0) + { + $field['auto_increment'] = ' AUTO_GENERATE'; + } + } + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php b/system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php new file mode 100644 index 00000000..fc49e0dd --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php @@ -0,0 +1,209 @@ +dsn)) + { + $this->dsn = 'cubrid:host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + empty($this->port) OR $this->dsn .= ';port='.$this->port; + empty($this->database) OR $this->dsn .= ';dbname='.$this->database; + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SHOW TABLES'; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql." LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE))) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->Field; + + sscanf($query[$i]->Type, '%[a-z](%d)', + $retval[$i]->type, + $retval[$i]->max_length + ); + + $retval[$i]->default = $query[$i]->Default; + $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI'); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * @return string + */ + protected function _from_tables() + { + if ( ! empty($this->qb_join) && count($this->qb_from) > 1) + { + return '('.implode(', ', $this->qb_from).')'; + } + + return implode(', ', $this->qb_from); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php b/system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php new file mode 100644 index 00000000..276cbb6b --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php @@ -0,0 +1,230 @@ + 'INTEGER', + 'SMALLINT' => 'INTEGER', + 'INT' => 'BIGINT', + 'INTEGER' => 'BIGINT', + 'BIGINT' => 'NUMERIC', + 'FLOAT' => 'DOUBLE', + 'REAL' => 'DOUBLE' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $sqls[] = $sql.' CHANGE '.$field[$i]['_literal']; + } + else + { + $alter_type = empty($field[$i]['new_name']) ? ' MODIFY ' : ' CHANGE '; + $sqls[] = $sql.$alter_type.$this->_process_column($field[$i]); + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + $extra_clause = isset($field['after']) + ? ' AFTER '.$this->db->escape_identifiers($field['after']) : ''; + + if (empty($extra_clause) && isset($field['first']) && $field['first'] === TRUE) + { + $extra_clause = ' FIRST'; + } + + return $this->db->escape_identifiers($field['name']) + .(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name'])) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['null'] + .$field['default'] + .$field['auto_increment'] + .$field['unique'] + .$extra_clause; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'LONGTEXT': + $attributes['TYPE'] = 'STRING'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table (ignored) + * @return string + */ + protected function _process_indexes($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sql .= ",\n\tKEY ".$this->db->escape_identifiers(implode('_', $this->keys[$i])) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).')'; + } + + $this->keys = array(); + + return $sql; + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php b/system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php new file mode 100644 index 00000000..b9b86f78 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php @@ -0,0 +1,353 @@ +dsn)) + { + $this->dsn = $params['subdriver'].':host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + if ( ! empty($this->port)) + { + $this->dsn .= (DIRECTORY_SEPARATOR === '\\' ? ',' : ':').$this->port; + } + + empty($this->database) OR $this->dsn .= ';dbname='.$this->database; + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + empty($this->appname) OR $this->dsn .= ';appname='.$this->appname; + } + else + { + if ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 6) === FALSE) + { + $this->dsn .= ';charset='.$this->char_set; + } + + $this->subdriver = 'dblib'; + } + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return object + */ + public function db_connect($persistent = FALSE) + { + if ($persistent === TRUE) + { + log_message('debug', "dblib driver doesn't support persistent connections"); + } + + $this->conn_id = parent::db_connect(FALSE); + + if ( ! is_object($this->conn_id)) + { + return $this->conn_id; + } + + // Determine how identifiers are escaped + $query = $this->query('SELECT CASE WHEN (@@OPTIONS | 256) = @@OPTIONS THEN 1 ELSE 0 END AS qi'); + $query = $query->row_array(); + $this->_quoted_identifier = empty($query) ? FALSE : (bool) $query['qi']; + $this->_escape_char = ($this->_quoted_identifier) ? '"' : array('[', ']'); + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT '.$this->escape_identifiers('name') + .' FROM '.$this->escape_identifiers('sysobjects') + .' WHERE '.$this->escape_identifiers('type')." = 'U'"; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' AND '.$this->escape_identifiers('name')." LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql.' ORDER BY '.$this->escape_identifiers('name'); + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT COLUMN_NAME + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, COLUMN_DEFAULT + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + $retval[$i]->max_length = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; + $retval[$i]->default = $query[$i]->COLUMN_DEFAULT; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + return 'WITH ci_delete AS (SELECT TOP '.$this->qb_limit.' * FROM '.$table.$this->_compile_wh('qb_where').') DELETE FROM ci_delete'; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + $limit = $this->qb_offset + $this->qb_limit; + + // As of SQL Server 2005 (9.0.*) ROW_NUMBER() is supported, + // however an ORDER BY clause is required for it to work + if (version_compare($this->version(), '9', '>=') && $this->qb_offset && ! empty($this->qb_orderby)) + { + $orderby = $this->_compile_order_by(); + + // We have to strip the ORDER BY clause + $sql = trim(substr($sql, 0, strrpos($sql, $orderby))); + + // Get the fields to select from our subquery, so that we can avoid CI_rownum appearing in the actual results + if (count($this->qb_select) === 0 OR strpos(implode(',', $this->qb_select), '*') !== FALSE) + { + $select = '*'; // Inevitable + } + else + { + // Use only field names and their aliases, everything else is out of our scope. + $select = array(); + $field_regexp = ($this->_quoted_identifier) + ? '("[^\"]+")' : '(\[[^\]]+\])'; + for ($i = 0, $c = count($this->qb_select); $i < $c; $i++) + { + $select[] = preg_match('/(?:\s|\.)'.$field_regexp.'$/i', $this->qb_select[$i], $m) + ? $m[1] : $this->qb_select[$i]; + } + $select = implode(', ', $select); + } + + return 'SELECT '.$select." FROM (\n\n" + .preg_replace('/^(SELECT( DISTINCT)?)/i', '\\1 ROW_NUMBER() OVER('.trim($orderby).') AS '.$this->escape_identifiers('CI_rownum').', ', $sql) + ."\n\n) ".$this->escape_identifiers('CI_subquery') + ."\nWHERE ".$this->escape_identifiers('CI_rownum').' BETWEEN '.($this->qb_offset + 1).' AND '.$limit; + } + + return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$limit.' ', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + // Multiple-value inserts are only supported as of SQL Server 2008 + if (version_compare($this->version(), '10', '>=')) + { + return parent::_insert_batch($table, $keys, $values); + } + + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + return $this->data_cache['version'] = $this->conn_id->query("SELECT SERVERPROPERTY('ProductVersion') AS ver")->fetchColumn(0); + } +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php b/system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php new file mode 100644 index 00000000..d0cca38d --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php @@ -0,0 +1,149 @@ + 'SMALLINT', + 'SMALLINT' => 'INT', + 'INT' => 'BIGINT', + 'REAL' => 'FLOAT' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('ADD', 'DROP'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' ALTER COLUMN '; + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + $sqls[] = $sql.$this->_process_column($field[$i]); + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + if (isset($attributes['CONSTRAINT']) && strpos($attributes['TYPE'], 'INT') !== FALSE) + { + unset($attributes['CONSTRAINT']); + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INTEGER': + $attributes['TYPE'] = 'INT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' IDENTITY(1,1)'; + } + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php b/system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php new file mode 100644 index 00000000..cb93f19b --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php @@ -0,0 +1,279 @@ +dsn)) + { + $this->dsn = 'firebird:'; + + if ( ! empty($this->database)) + { + $this->dsn .= 'dbname='.$this->database; + } + elseif ( ! empty($this->hostname)) + { + $this->dsn .= 'dbname='.$this->hostname; + } + + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + empty($this->role) OR $this->dsn .= ';role='.$this->role; + } + elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 9) === FALSE) + { + $this->dsn .= ';charset='.$this->char_set; + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "RDB$RELATION_NAME" FROM "RDB$RELATIONS" WHERE "RDB$RELATION_NAME" NOT LIKE \'RDB$%\' AND "RDB$RELATION_NAME" NOT LIKE \'MON$%\''; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql.' AND "RDB$RELATION_NAME" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT "RDB$FIELD_NAME" FROM "RDB$RELATION_FIELDS" WHERE "RDB$RELATION_NAME" = '.$this->escape($table); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "rfields"."RDB$FIELD_NAME" AS "name", + CASE "fields"."RDB$FIELD_TYPE" + WHEN 7 THEN \'SMALLINT\' + WHEN 8 THEN \'INTEGER\' + WHEN 9 THEN \'QUAD\' + WHEN 10 THEN \'FLOAT\' + WHEN 11 THEN \'DFLOAT\' + WHEN 12 THEN \'DATE\' + WHEN 13 THEN \'TIME\' + WHEN 14 THEN \'CHAR\' + WHEN 16 THEN \'INT64\' + WHEN 27 THEN \'DOUBLE\' + WHEN 35 THEN \'TIMESTAMP\' + WHEN 37 THEN \'VARCHAR\' + WHEN 40 THEN \'CSTRING\' + WHEN 261 THEN \'BLOB\' + ELSE NULL + END AS "type", + "fields"."RDB$FIELD_LENGTH" AS "max_length", + "rfields"."RDB$DEFAULT_VALUE" AS "default" + FROM "RDB$RELATION_FIELDS" "rfields" + JOIN "RDB$FIELDS" "fields" ON "rfields"."RDB$FIELD_SOURCE" = "fields"."RDB$FIELD_NAME" + WHERE "rfields"."RDB$RELATION_NAME" = '.$this->escape($table).' + ORDER BY "rfields"."RDB$FIELD_POSITION"'; + + return (($query = $this->query($sql)) !== FALSE) + ? $query->result_object() + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'DELETE FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + // Limit clause depends on if Interbase or Firebird + if (stripos($this->version(), 'firebird') !== FALSE) + { + $select = 'FIRST '.$this->qb_limit + .($this->qb_offset > 0 ? ' SKIP '.$this->qb_offset : ''); + } + else + { + $select = 'ROWS ' + .($this->qb_offset > 0 ? $this->qb_offset.' TO '.($this->qb_limit + $this->qb_offset) : $this->qb_limit); + } + + return preg_replace('`SELECT`i', 'SELECT '.$select, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php b/system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php new file mode 100644 index 00000000..20c5a689 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php @@ -0,0 +1,237 @@ + 'INTEGER', + 'INTEGER' => 'INT64', + 'FLOAT' => 'DOUBLE PRECISION' + ); + + /** + * NULL value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_null = 'NULL'; + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @param string $db_name + * @return string + */ + public function create_database($db_name) + { + // Firebird databases are flat files, so a path is required + + // Hostname is needed for remote access + empty($this->db->hostname) OR $db_name = $this->hostname.':'.$db_name; + + return parent::create_database('"'.$db_name.'"'); + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @param string $db_name (ignored) + * @return bool + */ + public function drop_database($db_name) + { + if ( ! ibase_drop_db($this->conn_id)) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + elseif ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($this->db->database), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + return FALSE; + } + + if (isset($field[$i]['type'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TYPE '.$field[$i]['type'].$field[$i]['length']; + } + + if ( ! empty($field[$i]['default'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' SET DEFAULT '.$field[$i]['default']; + } + + if (isset($field[$i]['null'])) + { + $sqls[] = 'UPDATE "RDB$RELATION_FIELDS" SET "RDB$NULL_FLAG" = ' + .($field[$i]['null'] === TRUE ? 'NULL' : '1') + .' WHERE "RDB$FIELD_NAME" = '.$this->db->escape($field[$i]['name']) + .' AND "RDB$RELATION_NAME" = '.$this->db->escape($table); + } + + if ( ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'].$field['length'] + .$field['null'] + .$field['unique'] + .$field['default']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INT': + $attributes['TYPE'] = 'INTEGER'; + return; + case 'BIGINT': + $attributes['TYPE'] = 'INT64'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php b/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php new file mode 100644 index 00000000..26b556a7 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php @@ -0,0 +1,244 @@ +dsn)) + { + $this->dsn = 'ibm:'; + + // Pre-defined DSN + if (empty($this->hostname) && empty($this->HOSTNAME) && empty($this->port) && empty($this->PORT)) + { + if (isset($this->DSN)) + { + $this->dsn .= 'DSN='.$this->DSN; + } + elseif ( ! empty($this->database)) + { + $this->dsn .= 'DSN='.$this->database; + } + + return; + } + + $this->dsn .= 'DRIVER='.(isset($this->DRIVER) ? '{'.$this->DRIVER.'}' : '{IBM DB2 ODBC DRIVER}').';'; + + if (isset($this->DATABASE)) + { + $this->dsn .= 'DATABASE='.$this->DATABASE.';'; + } + elseif ( ! empty($this->database)) + { + $this->dsn .= 'DATABASE='.$this->database.';'; + } + + if (isset($this->HOSTNAME)) + { + $this->dsn .= 'HOSTNAME='.$this->HOSTNAME.';'; + } + else + { + $this->dsn .= 'HOSTNAME='.(empty($this->hostname) ? '127.0.0.1;' : $this->hostname.';'); + } + + if (isset($this->PORT)) + { + $this->dsn .= 'PORT='.$this->port.';'; + } + elseif ( ! empty($this->port)) + { + $this->dsn .= ';PORT='.$this->port.';'; + } + + $this->dsn .= 'PROTOCOL='.(isset($this->PROTOCOL) ? $this->PROTOCOL.';' : 'TCPIP;'); + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "tabname" FROM "syscat"."tables" + WHERE "type" = \'T\' AND LOWER("tabschema") = '.$this->escape(strtolower($this->database)); + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' AND "tabname" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return array + */ + protected function _list_columns($table = '') + { + return 'SELECT "colname" FROM "syscat"."columns" + WHERE LOWER("tabschema") = '.$this->escape(strtolower($this->database)).' + AND LOWER("tabname") = '.$this->escape(strtolower($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "colname" AS "name", "typename" AS "type", "default" AS "default", "length" AS "max_length", + CASE "keyseq" WHEN NULL THEN 0 ELSE 1 END AS "primary_key" + FROM "syscat"."columns" + WHERE LOWER("tabschema") = '.$this->escape(strtolower($this->database)).' + AND LOWER("tabname") = '.$this->escape(strtolower($table)).' + ORDER BY "colno"'; + + return (($query = $this->query($sql)) !== FALSE) + ? $query->result_object() + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + $sql .= ' FETCH FIRST '.($this->qb_limit + $this->qb_offset).' ROWS ONLY'; + + return ($this->qb_offset) + ? 'SELECT * FROM ('.$sql.') WHERE rownum > '.$this->qb_offset + : $sql; + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php b/system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php new file mode 100644 index 00000000..4238ca08 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php @@ -0,0 +1,154 @@ + 'INTEGER', + 'INT' => 'BIGINT', + 'INTEGER' => 'BIGINT' + ); + + /** + * DEFAULT value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_default = FALSE; + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'CHANGE') + { + $alter_type = 'MODIFY'; + } + + return parent::_alter_table($alter_type, $table, $field); + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute UNIQUE + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_unique(&$attributes, &$field) + { + if ( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE) + { + $field['unique'] = ' UNIQUE'; + + // UNIQUE must be used with NOT NULL + $field['null'] = ' NOT NULL'; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_informix_driver.php b/system/database/drivers/pdo/subdrivers/pdo_informix_driver.php new file mode 100644 index 00000000..050171f6 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_informix_driver.php @@ -0,0 +1,309 @@ +dsn)) + { + $this->dsn = 'informix:'; + + // Pre-defined DSN + if (empty($this->hostname) && empty($this->host) && empty($this->port) && empty($this->service)) + { + if (isset($this->DSN)) + { + $this->dsn .= 'DSN='.$this->DSN; + } + elseif ( ! empty($this->database)) + { + $this->dsn .= 'DSN='.$this->database; + } + + return; + } + + if (isset($this->host)) + { + $this->dsn .= 'host='.$this->host; + } + else + { + $this->dsn .= 'host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + } + + if (isset($this->service)) + { + $this->dsn .= '; service='.$this->service; + } + elseif ( ! empty($this->port)) + { + $this->dsn .= '; service='.$this->port; + } + + empty($this->database) OR $this->dsn .= '; database='.$this->database; + empty($this->server) OR $this->dsn .= '; server='.$this->server; + + $this->dsn .= '; protocol='.(isset($this->protocol) ? $this->protocol : 'onsoctcp') + .'; EnableScrollableCursors=1'; + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "tabname" FROM "systables" + WHERE "tabid" > 99 AND "tabtype" = \'T\' AND LOWER("owner") = '.$this->escape(strtolower($this->username)); + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' AND "tabname" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + if (strpos($table, '.') !== FALSE) + { + sscanf($table, '%[^.].%s', $owner, $table); + } + else + { + $owner = $this->username; + } + + return 'SELECT "colname" FROM "systables", "syscolumns" + WHERE "systables"."tabid" = "syscolumns"."tabid" + AND "systables"."tabtype" = \'T\' + AND LOWER("systables"."owner") = '.$this->escape(strtolower($owner)).' + AND LOWER("systables"."tabname") = '.$this->escape(strtolower($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "syscolumns"."colname" AS "name", + CASE "syscolumns"."coltype" + WHEN 0 THEN \'CHAR\' + WHEN 1 THEN \'SMALLINT\' + WHEN 2 THEN \'INTEGER\' + WHEN 3 THEN \'FLOAT\' + WHEN 4 THEN \'SMALLFLOAT\' + WHEN 5 THEN \'DECIMAL\' + WHEN 6 THEN \'SERIAL\' + WHEN 7 THEN \'DATE\' + WHEN 8 THEN \'MONEY\' + WHEN 9 THEN \'NULL\' + WHEN 10 THEN \'DATETIME\' + WHEN 11 THEN \'BYTE\' + WHEN 12 THEN \'TEXT\' + WHEN 13 THEN \'VARCHAR\' + WHEN 14 THEN \'INTERVAL\' + WHEN 15 THEN \'NCHAR\' + WHEN 16 THEN \'NVARCHAR\' + WHEN 17 THEN \'INT8\' + WHEN 18 THEN \'SERIAL8\' + WHEN 19 THEN \'SET\' + WHEN 20 THEN \'MULTISET\' + WHEN 21 THEN \'LIST\' + WHEN 22 THEN \'Unnamed ROW\' + WHEN 40 THEN \'LVARCHAR\' + WHEN 41 THEN \'BLOB/CLOB/BOOLEAN\' + WHEN 4118 THEN \'Named ROW\' + ELSE "syscolumns"."coltype" + END AS "type", + "syscolumns"."collength" as "max_length", + CASE "sysdefaults"."type" + WHEN \'L\' THEN "sysdefaults"."default" + ELSE NULL + END AS "default" + FROM "syscolumns", "systables", "sysdefaults" + WHERE "syscolumns"."tabid" = "systables"."tabid" + AND "systables"."tabid" = "sysdefaults"."tabid" + AND "syscolumns"."colno" = "sysdefaults"."colno" + AND "systables"."tabtype" = \'T\' + AND LOWER("systables"."owner") = '.$this->escape(strtolower($this->username)).' + AND LOWER("systables"."tabname") = '.$this->escape(strtolower($table)).' + ORDER BY "syscolumns"."colno"'; + + return (($query = $this->query($sql)) !== FALSE) + ? $query->result_object() + : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE TABLE ONLY '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql $SQL Query + * @return string + */ + protected function _limit($sql) + { + $select = 'SELECT '.($this->qb_offset ? 'SKIP '.$this->qb_offset : '').'FIRST '.$this->qb_limit.' '; + return preg_replace('/^(SELECT\s)/i', $select, $sql, 1); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_informix_forge.php b/system/database/drivers/pdo/subdrivers/pdo_informix_forge.php new file mode 100644 index 00000000..2ddc2a93 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_informix_forge.php @@ -0,0 +1,163 @@ + 'INTEGER', + 'INT' => 'BIGINT', + 'INTEGER' => 'BIGINT', + 'REAL' => 'DOUBLE PRECISION', + 'SMALLFLOAT' => 'DOUBLE PRECISION' + ); + + /** + * DEFAULT value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_default = ', '; + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'CHANGE') + { + $alter_type = 'MODIFY'; + } + + return parent::_alter_table($alter_type, $table, $field); + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'BYTE': + case 'TEXT': + case 'BLOB': + case 'CLOB': + $attributes['UNIQUE'] = FALSE; + if (isset($attributes['DEFAULT'])) + { + unset($attributes['DEFAULT']); + } + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute UNIQUE + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_unique(&$attributes, &$field) + { + if ( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE) + { + $field['unique'] = ' UNIQUE CONSTRAINT '.$this->db->escape_identifiers($field['name']); + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php b/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php new file mode 100644 index 00000000..64b13d82 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php @@ -0,0 +1,374 @@ +dsn)) + { + $this->dsn = 'mysql:host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + empty($this->port) OR $this->dsn .= ';port='.$this->port; + empty($this->database) OR $this->dsn .= ';dbname='.$this->database; + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + } + elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 6) === FALSE) + { + $this->dsn .= ';charset='.$this->char_set; + } + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return object + */ + public function db_connect($persistent = FALSE) + { + if (isset($this->stricton)) + { + if ($this->stricton) + { + $sql = 'CONCAT(@@sql_mode, ",", "STRICT_ALL_TABLES")'; + } + else + { + $sql = 'REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( + @@sql_mode, + "STRICT_ALL_TABLES,", ""), + ",STRICT_ALL_TABLES", ""), + "STRICT_ALL_TABLES", ""), + "STRICT_TRANS_TABLES,", ""), + ",STRICT_TRANS_TABLES", ""), + "STRICT_TRANS_TABLES", "")'; + } + + if ( ! empty($sql)) + { + if (empty($this->options[PDO::MYSQL_ATTR_INIT_COMMAND])) + { + $this->options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET SESSION sql_mode = '.$sql; + } + else + { + $this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= ', @@session.sql_mode = '.$sql; + } + } + } + + if ($this->compress === TRUE) + { + $this->options[PDO::MYSQL_ATTR_COMPRESS] = TRUE; + } + + if (is_array($this->encrypt)) + { + $ssl = array(); + empty($this->encrypt['ssl_key']) OR $ssl[PDO::MYSQL_ATTR_SSL_KEY] = $this->encrypt['ssl_key']; + empty($this->encrypt['ssl_cert']) OR $ssl[PDO::MYSQL_ATTR_SSL_CERT] = $this->encrypt['ssl_cert']; + empty($this->encrypt['ssl_ca']) OR $ssl[PDO::MYSQL_ATTR_SSL_CA] = $this->encrypt['ssl_ca']; + empty($this->encrypt['ssl_capath']) OR $ssl[PDO::MYSQL_ATTR_SSL_CAPATH] = $this->encrypt['ssl_capath']; + empty($this->encrypt['ssl_cipher']) OR $ssl[PDO::MYSQL_ATTR_SSL_CIPHER] = $this->encrypt['ssl_cipher']; + + // DO NOT use array_merge() here! + // It re-indexes numeric keys and the PDO_MYSQL_ATTR_SSL_* constants are integers. + empty($ssl) OR $this->options += $ssl; + } + + // Prior to version 5.7.3, MySQL silently downgrades to an unencrypted connection if SSL setup fails + if ( + ($pdo = parent::db_connect($persistent)) !== FALSE + && ! empty($ssl) + && version_compare($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), '5.7.3', '<=') + && empty($pdo->query("SHOW STATUS LIKE 'ssl_cipher'")->fetchObject()->Value) + ) + { + $message = 'PDO_MYSQL was configured for an SSL connection, but got an unencrypted connection instead!'; + log_message('error', $message); + return ($this->db_debug) ? $this->display_error($message, '', TRUE) : FALSE; + } + + return $pdo; + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @param string $database + * @return bool + */ + public function db_select($database = '') + { + if ($database === '') + { + $database = $this->database; + } + + if (FALSE !== $this->simple_query('USE '.$this->escape_identifiers($database))) + { + $this->database = $database; + $this->data_cache = array(); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + $this->conn_id->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE); + return $this->conn_id->beginTransaction(); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + if ($this->conn_id->commit()) + { + $this->conn_id->setAttribute(PDO::ATTR_AUTOCOMMIT, TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + if ($this->conn_id->rollBack()) + { + $this->conn_id->setAttribute(PDO::ATTR_AUTOCOMMIT, TRUE); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SHOW TABLES'; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql." LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('SHOW COLUMNS FROM '.$this->protect_identifiers($table, TRUE, NULL, FALSE))) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->Field; + + sscanf($query[$i]->Type, '%[a-z](%d)', + $retval[$i]->type, + $retval[$i]->max_length + ); + + $retval[$i]->default = $query[$i]->Default; + $retval[$i]->primary_key = (int) ($query[$i]->Key === 'PRI'); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * FROM tables + * + * Groups tables in FROM clauses if needed, so there is no confusion + * about operator precedence. + * + * @return string + */ + protected function _from_tables() + { + if ( ! empty($this->qb_join) && count($this->qb_from) > 1) + { + return '('.implode(', ', $this->qb_from).')'; + } + + return implode(', ', $this->qb_from); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php b/system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php new file mode 100644 index 00000000..c7a92b82 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php @@ -0,0 +1,256 @@ +db->char_set) && ! strpos($sql, 'CHARACTER SET') && ! strpos($sql, 'CHARSET')) + { + $sql .= ' DEFAULT CHARACTER SET = '.$this->db->char_set; + } + + if ( ! empty($this->db->dbcollat) && ! strpos($sql, 'COLLATE')) + { + $sql .= ' COLLATE = '.$this->db->dbcollat; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP') + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $field[$i] = ($alter_type === 'ADD') + ? "\n\tADD ".$field[$i]['_literal'] + : "\n\tMODIFY ".$field[$i]['_literal']; + } + else + { + if ($alter_type === 'ADD') + { + $field[$i]['_literal'] = "\n\tADD "; + } + else + { + $field[$i]['_literal'] = empty($field[$i]['new_name']) ? "\n\tMODIFY " : "\n\tCHANGE "; + } + + $field[$i] = $field[$i]['_literal'].$this->_process_column($field[$i]); + } + } + + return array($sql.implode(',', $field)); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + $extra_clause = isset($field['after']) + ? ' AFTER '.$this->db->escape_identifiers($field['after']) : ''; + + if (empty($extra_clause) && isset($field['first']) && $field['first'] === TRUE) + { + $extra_clause = ' FIRST'; + } + + return $this->db->escape_identifiers($field['name']) + .(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name'])) + .' '.$field['type'].$field['length'] + .$field['unsigned'] + .$field['null'] + .$field['default'] + .$field['auto_increment'] + .$field['unique'] + .(empty($field['comment']) ? '' : ' COMMENT '.$field['comment']) + .$extra_clause; + } + + // -------------------------------------------------------------------- + + /** + * Process indexes + * + * @param string $table (ignored) + * @return string + */ + protected function _process_indexes($table) + { + $sql = ''; + + for ($i = 0, $c = count($this->keys); $i < $c; $i++) + { + if (is_array($this->keys[$i])) + { + for ($i2 = 0, $c2 = count($this->keys[$i]); $i2 < $c2; $i2++) + { + if ( ! isset($this->fields[$this->keys[$i][$i2]])) + { + unset($this->keys[$i][$i2]); + continue; + } + } + } + elseif ( ! isset($this->fields[$this->keys[$i]])) + { + unset($this->keys[$i]); + continue; + } + + is_array($this->keys[$i]) OR $this->keys[$i] = array($this->keys[$i]); + + $sql .= ",\n\tKEY ".$this->db->escape_identifiers(implode('_', $this->keys[$i])) + .' ('.implode(', ', $this->db->escape_identifiers($this->keys[$i])).')'; + } + + $this->keys = array(); + + return $sql; + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_oci_driver.php b/system/database/drivers/pdo/subdrivers/pdo_oci_driver.php new file mode 100644 index 00000000..abf9167d --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_oci_driver.php @@ -0,0 +1,326 @@ +dsn)) + { + $this->dsn = 'oci:dbname='; + + // Oracle has a slightly different PDO DSN format (Easy Connect), + // which also supports pre-defined DSNs. + if (empty($this->hostname) && empty($this->port)) + { + $this->dsn .= $this->database; + } + else + { + $this->dsn .= '//'.(empty($this->hostname) ? '127.0.0.1' : $this->hostname) + .(empty($this->port) ? '' : ':'.$this->port).'/'; + + empty($this->database) OR $this->dsn .= $this->database; + } + + empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set; + } + elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 4) === FALSE) + { + $this->dsn .= ';charset='.$this->char_set; + } + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + $version_string = parent::version(); + if (preg_match('#Release\s(?\d+(?:\.\d+)+)#', $version_string, $match)) + { + return $this->data_cache['version'] = $match[1]; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "TABLE_NAME" FROM "ALL_TABLES"'; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql.' WHERE "TABLE_NAME" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + if (strpos($table, '.') !== FALSE) + { + sscanf($table, '%[^.].%s', $owner, $table); + } + else + { + $owner = $this->username; + } + + return 'SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS + WHERE UPPER(OWNER) = '.$this->escape(strtoupper($owner)).' + AND UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (strpos($table, '.') !== FALSE) + { + sscanf($table, '%[^.].%s', $owner, $table); + } + else + { + $owner = $this->username; + } + + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHAR_LENGTH, DATA_PRECISION, DATA_LENGTH, DATA_DEFAULT, NULLABLE + FROM ALL_TAB_COLUMNS + WHERE UPPER(OWNER) = '.$this->escape(strtoupper($owner)).' + AND UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + + $length = ($query[$i]->CHAR_LENGTH > 0) + ? $query[$i]->CHAR_LENGTH : $query[$i]->DATA_PRECISION; + if ($length === NULL) + { + $length = $query[$i]->DATA_LENGTH; + } + $retval[$i]->max_length = $length; + + $default = $query[$i]->DATA_DEFAULT; + if ($default === NULL && $query[$i]->NULLABLE === 'N') + { + $default = ''; + } + $retval[$i]->default = $query[$i]->COLUMN_DEFAULT; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _insert_batch($table, $keys, $values) + { + $keys = implode(', ', $keys); + $sql = "INSERT ALL\n"; + + for ($i = 0, $c = count($values); $i < $c; $i++) + { + $sql .= ' INTO '.$table.' ('.$keys.') VALUES '.$values[$i]."\n"; + } + + return $sql.'SELECT * FROM dual'; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + $this->where('rownum <= ',$this->qb_limit, FALSE); + $this->qb_limit = FALSE; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + if (version_compare($this->version(), '12.1', '>=')) + { + // OFFSET-FETCH can be used only with the ORDER BY clause + empty($this->qb_orderby) && $sql .= ' ORDER BY 1'; + + return $sql.' OFFSET '.(int) $this->qb_offset.' ROWS FETCH NEXT '.$this->qb_limit.' ROWS ONLY'; + } + + return 'SELECT * FROM (SELECT inner_query.*, rownum rnum FROM ('.$sql.') inner_query WHERE rownum < '.($this->qb_offset + $this->qb_limit + 1).')' + .($this->qb_offset ? ' WHERE rnum >= '.($this->qb_offset + 1): ''); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_oci_forge.php b/system/database/drivers/pdo/subdrivers/pdo_oci_forge.php new file mode 100644 index 00000000..813207b8 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_oci_forge.php @@ -0,0 +1,176 @@ +db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + $field[$i] = "\n\t".$field[$i]['_literal']; + } + else + { + $field[$i]['_literal'] = "\n\t".$this->_process_column($field[$i]); + + if ( ! empty($field[$i]['comment'])) + { + $sqls[] = 'COMMENT ON COLUMN ' + .$this->db->escape_identifiers($table).'.'.$this->db->escape_identifiers($field[$i]['name']) + .' IS '.$field[$i]['comment']; + } + + if ($alter_type === 'MODIFY' && ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + } + } + + $sql .= ' '.$alter_type.' '; + $sql .= (count($field) === 1) + ? $field[0] + : '('.implode(',', $field).')'; + + // RENAME COLUMN must be executed after MODIFY + array_unshift($sqls, $sql); + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + // Not supported - sequences and triggers must be used instead + } + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'INT': + $attributes['TYPE'] = 'NUMBER'; + return; + case 'BIGINT': + $attributes['TYPE'] = 'NUMBER'; + return; + default: return; + } + } +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php b/system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php new file mode 100644 index 00000000..066dd961 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php @@ -0,0 +1,229 @@ +dsn)) + { + $this->dsn = 'odbc:'; + + // Pre-defined DSN + if (empty($this->hostname) && empty($this->HOSTNAME) && empty($this->port) && empty($this->PORT)) + { + if (isset($this->DSN)) + { + $this->dsn .= 'DSN='.$this->DSN; + } + elseif ( ! empty($this->database)) + { + $this->dsn .= 'DSN='.$this->database; + } + + return; + } + + // If the DSN is not pre-configured - try to build an IBM DB2 connection string + $this->dsn .= 'DRIVER='.(isset($this->DRIVER) ? '{'.$this->DRIVER.'}' : '{IBM DB2 ODBC DRIVER}').';'; + + if (isset($this->DATABASE)) + { + $this->dsn .= 'DATABASE='.$this->DATABASE.';'; + } + elseif ( ! empty($this->database)) + { + $this->dsn .= 'DATABASE='.$this->database.';'; + } + + if (isset($this->HOSTNAME)) + { + $this->dsn .= 'HOSTNAME='.$this->HOSTNAME.';'; + } + else + { + $this->dsn .= 'HOSTNAME='.(empty($this->hostname) ? '127.0.0.1;' : $this->hostname.';'); + } + + if (isset($this->PORT)) + { + $this->dsn .= 'PORT='.$this->port.';'; + } + elseif ( ! empty($this->port)) + { + $this->dsn .= ';PORT='.$this->port.';'; + } + + $this->dsn .= 'PROTOCOL='.(isset($this->PROTOCOL) ? $this->PROTOCOL.';' : 'TCPIP;'); + } + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + $this->display_error('db_unsupported_feature'); + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @param string An SQL query string + * @return bool + */ + public function is_write_type($sql) + { + if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#is', $sql)) + { + return FALSE; + } + + return parent::is_write_type($sql); + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = '".$this->schema."'"; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql." AND table_name LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT column_name FROM information_schema.columns WHERE table_name = '.$this->escape($table); + } +} diff --git a/system/Database/SQLite3/Utils.php b/system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php similarity index 55% rename from system/Database/SQLite3/Utils.php rename to system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php index 72f8d4bc..a2a3bada 100644 --- a/system/Database/SQLite3/Utils.php +++ b/system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php @@ -1,5 +1,4 @@ dsn)) + { + $this->dsn = 'pgsql:host='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + empty($this->port) OR $this->dsn .= ';port='.$this->port; + empty($this->database) OR $this->dsn .= ';dbname='.$this->database; + + if ( ! empty($this->username)) + { + $this->dsn .= ';username='.$this->username; + empty($this->password) OR $this->dsn .= ';password='.$this->password; + } + } + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return object + */ + public function db_connect($persistent = FALSE) + { + $this->conn_id = parent::db_connect($persistent); + + if (is_object($this->conn_id) && ! empty($this->schema)) + { + $this->simple_query('SET search_path TO '.$this->schema.',public'); + } + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @param string $name + * @return int + */ + public function insert_id($name = NULL) + { + if ($name === NULL && version_compare($this->version(), '8.1', '>=')) + { + $query = $this->query('SELECT LASTVAL() AS ins_id'); + $query = $query->row(); + return $query->ins_id; + } + + return $this->conn_id->lastInsertId($name); + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @param string An SQL query string + * @return bool + */ + public function is_write_type($sql) + { + if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#is', $sql)) + { + return FALSE; + } + + return parent::is_write_type($sql); + } + + // -------------------------------------------------------------------- + + /** + * "Smart" Escape String + * + * Escapes data based on type + * + * @param string $str + * @return mixed + */ + public function escape($str) + { + if (is_bool($str)) + { + return ($str) ? 'TRUE' : 'FALSE'; + } + + return parent::escape($str); + } + + // -------------------------------------------------------------------- + + /** + * ORDER BY + * + * @param string $orderby + * @param string $direction ASC, DESC or RANDOM + * @param bool $escape + * @return object + */ + public function order_by($orderby, $direction = '', $escape = NULL) + { + $direction = strtoupper(trim($direction)); + if ($direction === 'RANDOM') + { + if ( ! is_float($orderby) && ctype_digit((string) $orderby)) + { + $orderby = ($orderby > 1) + ? (float) '0.'.$orderby + : (float) $orderby; + } + + if (is_float($orderby)) + { + $this->simple_query('SET SEED '.$orderby); + } + + $orderby = $this->_random_keyword[0]; + $direction = ''; + $escape = FALSE; + } + + return parent::order_by($orderby, $direction, $escape); + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "table_name" FROM "information_schema"."tables" WHERE "table_schema" = \''.$this->schema."'"; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql.' AND "table_name" LIKE \'' + .$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * List column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT "column_name" + FROM "information_schema"."columns" + WHERE LOWER("table_name") = '.$this->escape(strtolower($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "column_name", "data_type", "character_maximum_length", "numeric_precision", "column_default" + FROM "information_schema"."columns" + WHERE LOWER("table_name") = '.$this->escape(strtolower($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->column_name; + $retval[$i]->type = $query[$i]->data_type; + $retval[$i]->max_length = ($query[$i]->character_maximum_length > 0) ? $query[$i]->character_maximum_length : $query[$i]->numeric_precision; + $retval[$i]->default = $query[$i]->column_default; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Update_Batch statement + * + * Generates a platform-specific batch update string from the supplied data + * + * @param string $table Table name + * @param array $values Update data + * @param string $index WHERE key + * @return string + */ + protected function _update_batch($table, $values, $index) + { + $ids = array(); + foreach ($values as $key => $val) + { + $ids[] = $val[$index]['value']; + + foreach (array_keys($val) as $field) + { + if ($field !== $index) + { + $final[$val[$field]['field']][] = 'WHEN '.$val[$index]['value'].' THEN '.$val[$field]['value']; + } + } + } + + $cases = ''; + foreach ($final as $k => $v) + { + $cases .= $k.' = (CASE '.$val[$index]['field']."\n" + .implode("\n", $v)."\n" + .'ELSE '.$k.' END), '; + } + + $this->where($val[$index]['field'].' IN('.implode(',', $ids).')', NULL, FALSE); + + return 'UPDATE '.$table.' SET '.substr($cases, 0, -2).$this->_compile_wh('qb_where'); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + return $sql.' LIMIT '.$this->qb_limit.($this->qb_offset ? ' OFFSET '.$this->qb_offset : ''); + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php b/system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php new file mode 100644 index 00000000..b00af4ad --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php @@ -0,0 +1,210 @@ + 'INTEGER', + 'SMALLINT' => 'INTEGER', + 'INT' => 'BIGINT', + 'INT4' => 'BIGINT', + 'INTEGER' => 'BIGINT', + 'INT8' => 'NUMERIC', + 'BIGINT' => 'NUMERIC', + 'REAL' => 'DOUBLE PRECISION', + 'FLOAT' => 'DOUBLE PRECISION' + ); + + /** + * NULL value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_null = 'NULL'; + + // -------------------------------------------------------------------- + + /** + * Class constructor + * + * @param object &$db Database object + * @return void + */ + public function __construct(&$db) + { + parent::__construct($db); + + if (version_compare($this->db->version(), '9.0', '>')) + { + $this->create_table_if = 'CREATE TABLE IF NOT EXISTS'; + } + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + return FALSE; + } + + if (version_compare($this->db->version(), '8', '>=') && isset($field[$i]['type'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TYPE '.$field[$i]['type'].$field[$i]['length']; + } + + if ( ! empty($field[$i]['default'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' SET DEFAULT '.$field[$i]['default']; + } + + if (isset($field[$i]['null'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .($field[$i]['null'] === TRUE ? ' DROP NOT NULL' : ' SET NOT NULL'); + } + + if ( ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + + if ( ! empty($field[$i]['comment'])) + { + $sqls[] = 'COMMENT ON COLUMN ' + .$this->db->escape_identifiers($table).'.'.$this->db->escape_identifiers($field[$i]['name']) + .' IS '.$field[$i]['comment']; + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + // Reset field lengths for data types that don't support it + if (isset($attributes['CONSTRAINT']) && stripos($attributes['TYPE'], 'int') !== FALSE) + { + $attributes['CONSTRAINT'] = NULL; + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $field['type'] = ($field['type'] === 'NUMERIC') + ? 'BIGSERIAL' + : 'SERIAL'; + } + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php b/system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php new file mode 100644 index 00000000..9b70f3ea --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php @@ -0,0 +1,219 @@ +dsn)) + { + $this->dsn = 'sqlite:'; + + if (empty($this->database) && empty($this->hostname)) + { + $this->database = ':memory:'; + } + + $this->database = empty($this->database) ? $this->hostname : $this->database; + } + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "NAME" FROM "SQLITE_MASTER" WHERE "TYPE" = \'table\''; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + return $sql.' AND "NAME" LIKE \''.$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * @param string $table Table name + * @return array + */ + public function list_fields($table) + { + // Is there a cached result? + if (isset($this->data_cache['field_names'][$table])) + { + return $this->data_cache['field_names'][$table]; + } + + if (($result = $this->query('PRAGMA TABLE_INFO('.$this->protect_identifiers($table, TRUE, NULL, FALSE).')')) === FALSE) + { + return FALSE; + } + + $this->data_cache['field_names'][$table] = array(); + foreach ($result->result_array() as $row) + { + $this->data_cache['field_names'][$table][] = $row['name']; + } + + return $this->data_cache['field_names'][$table]; + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('PRAGMA TABLE_INFO('.$this->protect_identifiers($table, TRUE, NULL, FALSE).')')) === FALSE) + { + return FALSE; + } + + $query = $query->result_array(); + if (empty($query)) + { + return FALSE; + } + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]['name']; + $retval[$i]->type = $query[$i]['type']; + $retval[$i]->max_length = NULL; + $retval[$i]->default = $query[$i]['dflt_value']; + $retval[$i]->primary_key = isset($query[$i]['pk']) ? (int) $query[$i]['pk'] : 0; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Replace statement + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _replace($table, $keys, $values) + { + return 'INSERT OR '.parent::_replace($table, $keys, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'DELETE FROM '.$table; + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php b/system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php new file mode 100644 index 00000000..18c475b1 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php @@ -0,0 +1,238 @@ +db->version(), '3.3', '<')) + { + $this->_create_table_if = FALSE; + $this->_drop_table_if = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @param string $db_name (ignored) + * @return bool + */ + public function create_database($db_name) + { + // In SQLite, a database is created when you connect to the database. + // We'll return TRUE so that an error isn't generated + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @param string $db_name (ignored) + * @return bool + */ + public function drop_database($db_name) + { + // In SQLite, a database is dropped when we delete a file + if (file_exists($this->db->database)) + { + // We need to close the pseudo-connection first + $this->db->close(); + if ( ! @unlink($this->db->database)) + { + return $this->db->db_debug ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + elseif ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($this->db->database), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + return $this->db->db_debug ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP' OR $alter_type === 'CHANGE') + { + // drop_column(): + // BEGIN TRANSACTION; + // CREATE TEMPORARY TABLE t1_backup(a,b); + // INSERT INTO t1_backup SELECT a,b FROM t1; + // DROP TABLE t1; + // CREATE TABLE t1(a,b); + // INSERT INTO t1 SELECT a,b FROM t1_backup; + // DROP TABLE t1_backup; + // COMMIT; + + return FALSE; + } + + return parent::_alter_table($alter_type, $table, $field); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'] + .$field['auto_increment'] + .$field['null'] + .$field['unique'] + .$field['default']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'ENUM': + case 'SET': + $attributes['TYPE'] = 'TEXT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['type'] = 'INTEGER PRIMARY KEY'; + $field['default'] = ''; + $field['null'] = ''; + $field['unique'] = ''; + $field['auto_increment'] = ' AUTOINCREMENT'; + + $this->primary_keys = array(); + } + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php b/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php new file mode 100644 index 00000000..a9fb4d14 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php @@ -0,0 +1,369 @@ +dsn)) + { + $this->dsn = 'sqlsrv:Server='.(empty($this->hostname) ? '127.0.0.1' : $this->hostname); + + empty($this->port) OR $this->dsn .= ','.$this->port; + empty($this->database) OR $this->dsn .= ';Database='.$this->database; + + // Some custom options + + if (isset($this->QuotedId)) + { + $this->dsn .= ';QuotedId='.$this->QuotedId; + $this->_quoted_identifier = (bool) $this->QuotedId; + } + + if (isset($this->ConnectionPooling)) + { + $this->dsn .= ';ConnectionPooling='.$this->ConnectionPooling; + } + + if ($this->encrypt === TRUE) + { + $this->dsn .= ';Encrypt=1'; + } + + if (isset($this->TraceOn)) + { + $this->dsn .= ';TraceOn='.$this->TraceOn; + } + + if (isset($this->TrustServerCertificate)) + { + $this->dsn .= ';TrustServerCertificate='.$this->TrustServerCertificate; + } + + empty($this->APP) OR $this->dsn .= ';APP='.$this->APP; + empty($this->Failover_Partner) OR $this->dsn .= ';Failover_Partner='.$this->Failover_Partner; + empty($this->LoginTimeout) OR $this->dsn .= ';LoginTimeout='.$this->LoginTimeout; + empty($this->MultipleActiveResultSets) OR $this->dsn .= ';MultipleActiveResultSets='.$this->MultipleActiveResultSets; + empty($this->TraceFile) OR $this->dsn .= ';TraceFile='.$this->TraceFile; + empty($this->WSID) OR $this->dsn .= ';WSID='.$this->WSID; + } + elseif (preg_match('/QuotedId=(0|1)/', $this->dsn, $match)) + { + $this->_quoted_identifier = (bool) $match[1]; + } + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return object + */ + public function db_connect($persistent = FALSE) + { + if ( ! empty($this->char_set) && preg_match('/utf[^8]*8/i', $this->char_set)) + { + $this->options[PDO::SQLSRV_ENCODING_UTF8] = 1; + } + + $this->conn_id = parent::db_connect($persistent); + + if ( ! is_object($this->conn_id) OR is_bool($this->_quoted_identifier)) + { + return $this->conn_id; + } + + // Determine how identifiers are escaped + $query = $this->query('SELECT CASE WHEN (@@OPTIONS | 256) = @@OPTIONS THEN 1 ELSE 0 END AS qi'); + $query = $query->row_array(); + $this->_quoted_identifier = empty($query) ? FALSE : (bool) $query['qi']; + $this->_escape_char = ($this->_quoted_identifier) ? '"' : array('[', ']'); + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT '.$this->escape_identifiers('name') + .' FROM '.$this->escape_identifiers('sysobjects') + .' WHERE '.$this->escape_identifiers('type')." = 'U'"; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' AND '.$this->escape_identifiers('name')." LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql.' ORDER BY '.$this->escape_identifiers('name'); + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT COLUMN_NAME + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, COLUMN_DEFAULT + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + $retval[$i]->max_length = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; + $retval[$i]->default = $query[$i]->COLUMN_DEFAULT; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + return 'WITH ci_delete AS (SELECT TOP '.$this->qb_limit.' * FROM '.$table.$this->_compile_wh('qb_where').') DELETE FROM ci_delete'; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + // As of SQL Server 2012 (11.0.*) OFFSET is supported + if (version_compare($this->version(), '11', '>=')) + { + // SQL Server OFFSET-FETCH can be used only with the ORDER BY clause + empty($this->qb_orderby) && $sql .= ' ORDER BY 1'; + + return $sql.' OFFSET '.(int) $this->qb_offset.' ROWS FETCH NEXT '.$this->qb_limit.' ROWS ONLY'; + } + + $limit = $this->qb_offset + $this->qb_limit; + + // An ORDER BY clause is required for ROW_NUMBER() to work + if ($this->qb_offset && ! empty($this->qb_orderby)) + { + $orderby = $this->_compile_order_by(); + + // We have to strip the ORDER BY clause + $sql = trim(substr($sql, 0, strrpos($sql, $orderby))); + + // Get the fields to select from our subquery, so that we can avoid CI_rownum appearing in the actual results + if (count($this->qb_select) === 0 OR strpos(implode(',', $this->qb_select), '*') !== FALSE) + { + $select = '*'; // Inevitable + } + else + { + // Use only field names and their aliases, everything else is out of our scope. + $select = array(); + $field_regexp = ($this->_quoted_identifier) + ? '("[^\"]+")' : '(\[[^\]]+\])'; + for ($i = 0, $c = count($this->qb_select); $i < $c; $i++) + { + $select[] = preg_match('/(?:\s|\.)'.$field_regexp.'$/i', $this->qb_select[$i], $m) + ? $m[1] : $this->qb_select[$i]; + } + $select = implode(', ', $select); + } + + return 'SELECT '.$select." FROM (\n\n" + .preg_replace('/^(SELECT( DISTINCT)?)/i', '\\1 ROW_NUMBER() OVER('.trim($orderby).') AS '.$this->escape_identifiers('CI_rownum').', ', $sql) + ."\n\n) ".$this->escape_identifiers('CI_subquery') + ."\nWHERE ".$this->escape_identifiers('CI_rownum').' BETWEEN '.($this->qb_offset + 1).' AND '.$limit; + } + + return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$limit.' ', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + // Multiple-value inserts are only supported as of SQL Server 2008 + if (version_compare($this->version(), '10', '>=')) + { + return parent::_insert_batch($table, $keys, $values); + } + + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + +} diff --git a/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php b/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php new file mode 100644 index 00000000..82a0d515 --- /dev/null +++ b/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php @@ -0,0 +1,149 @@ + 'SMALLINT', + 'SMALLINT' => 'INT', + 'INT' => 'BIGINT', + 'REAL' => 'FLOAT' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('ADD', 'DROP'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' ALTER COLUMN '; + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + $sqls[] = $sql.$this->_process_column($field[$i]); + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + if (isset($attributes['CONSTRAINT']) && strpos($attributes['TYPE'], 'INT') !== FALSE) + { + unset($attributes['CONSTRAINT']); + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INTEGER': + $attributes['TYPE'] = 'INT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' IDENTITY(1,1)'; + } + } + +} diff --git a/system/database/drivers/postgre/index.html b/system/database/drivers/postgre/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/postgre/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php new file mode 100644 index 00000000..bcdfc060 --- /dev/null +++ b/system/database/drivers/postgre/postgre_driver.php @@ -0,0 +1,620 @@ +dsn)) + { + return; + } + + $this->dsn === '' OR $this->dsn = ''; + + if (strpos($this->hostname, '/') !== FALSE) + { + // If UNIX sockets are used, we shouldn't set a port + $this->port = ''; + } + + $this->hostname === '' OR $this->dsn = 'host='.$this->hostname.' '; + + if ( ! empty($this->port) && ctype_digit($this->port)) + { + $this->dsn .= 'port='.$this->port.' '; + } + + if ($this->username !== '') + { + $this->dsn .= 'user='.$this->username.' '; + + /* An empty password is valid! + * + * $db['password'] = NULL must be done in order to ignore it. + */ + $this->password === NULL OR $this->dsn .= "password='".$this->password."' "; + } + + $this->database === '' OR $this->dsn .= 'dbname='.$this->database.' '; + + /* We don't have these options as elements in our standard configuration + * array, but they might be set by parse_url() if the configuration was + * provided via string. Example: + * + * postgre://username:password@localhost:5432/database?connect_timeout=5&sslmode=1 + */ + foreach (array('connect_timeout', 'options', 'sslmode', 'service') as $key) + { + if (isset($this->$key) && is_string($this->$key) && $this->$key !== '') + { + $this->dsn .= $key."='".$this->$key."' "; + } + } + + $this->dsn = rtrim($this->dsn); + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $persistent + * @return resource + */ + public function db_connect($persistent = FALSE) + { + $this->conn_id = ($persistent === TRUE) + ? pg_pconnect($this->dsn) + : pg_connect($this->dsn); + + if ($this->conn_id !== FALSE) + { + if ($persistent === TRUE + && pg_connection_status($this->conn_id) === PGSQL_CONNECTION_BAD + && pg_ping($this->conn_id) === FALSE + ) + { + return FALSE; + } + + empty($this->schema) OR $this->simple_query('SET search_path TO '.$this->schema.',public'); + } + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @return void + */ + public function reconnect() + { + if (pg_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @param string $charset + * @return bool + */ + protected function _db_set_charset($charset) + { + return (pg_set_client_encoding($this->conn_id, $charset) === 0); + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if ( ! $this->conn_id OR ($pg_version = pg_version($this->conn_id)) === FALSE) + { + return FALSE; + } + + /* If PHP was compiled with PostgreSQL lib versions earlier + * than 7.4, pg_version() won't return the server version + * and so we'll have to fall back to running a query in + * order to get it. + */ + return isset($pg_version['server']) + ? $this->data_cache['version'] = $pg_version['server'] + : parent::version(); + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + return pg_query($this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return (bool) pg_query($this->conn_id, 'BEGIN'); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return (bool) pg_query($this->conn_id, 'COMMIT'); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return (bool) pg_query($this->conn_id, 'ROLLBACK'); + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @param string An SQL query string + * @return bool + */ + public function is_write_type($sql) + { + if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#is', $sql)) + { + return FALSE; + } + + return parent::is_write_type($sql); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return pg_escape_string($this->conn_id, $str); + } + + // -------------------------------------------------------------------- + + /** + * "Smart" Escape String + * + * Escapes data based on type + * + * @param string $str + * @return mixed + */ + public function escape($str) + { + if (is_php('5.4.4') && (is_string($str) OR (is_object($str) && method_exists($str, '__toString')))) + { + return pg_escape_literal($this->conn_id, $str); + } + elseif (is_bool($str)) + { + return ($str) ? 'TRUE' : 'FALSE'; + } + + return parent::escape($str); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return pg_affected_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return string + */ + public function insert_id() + { + $v = pg_version($this->conn_id); + $v = isset($v['server']) ? $v['server'] : 0; // 'server' key is only available since PosgreSQL 7.4 + + $table = (func_num_args() > 0) ? func_get_arg(0) : NULL; + $column = (func_num_args() > 1) ? func_get_arg(1) : NULL; + + if ($table === NULL && $v >= '8.1') + { + $sql = 'SELECT LASTVAL() AS ins_id'; + } + elseif ($table !== NULL) + { + if ($column !== NULL && $v >= '8.0') + { + $sql = 'SELECT pg_get_serial_sequence(\''.$table."', '".$column."') AS seq"; + $query = $this->query($sql); + $query = $query->row(); + $seq = $query->seq; + } + else + { + // seq_name passed in table parameter + $seq = $table; + } + + $sql = 'SELECT CURRVAL(\''.$seq."') AS ins_id"; + } + else + { + return pg_last_oid($this->result_id); + } + + $query = $this->query($sql); + $query = $query->row(); + return (int) $query->ins_id; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT "table_name" FROM "information_schema"."tables" WHERE "table_schema" = \''.$this->schema."'"; + + if ($prefix_limit !== FALSE && $this->dbprefix !== '') + { + return $sql.' AND "table_name" LIKE \'' + .$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * List column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT "column_name" + FROM "information_schema"."columns" + WHERE LOWER("table_name") = '.$this->escape(strtolower($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT "column_name", "data_type", "character_maximum_length", "numeric_precision", "column_default" + FROM "information_schema"."columns" + WHERE LOWER("table_name") = '.$this->escape(strtolower($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->column_name; + $retval[$i]->type = $query[$i]->data_type; + $retval[$i]->max_length = ($query[$i]->character_maximum_length > 0) ? $query[$i]->character_maximum_length : $query[$i]->numeric_precision; + $retval[$i]->default = $query[$i]->column_default; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => '', 'message' => pg_last_error($this->conn_id)); + } + + // -------------------------------------------------------------------- + + /** + * ORDER BY + * + * @param string $orderby + * @param string $direction ASC, DESC or RANDOM + * @param bool $escape + * @return object + */ + public function order_by($orderby, $direction = '', $escape = NULL) + { + $direction = strtoupper(trim($direction)); + if ($direction === 'RANDOM') + { + if ( ! is_float($orderby) && ctype_digit((string) $orderby)) + { + $orderby = ($orderby > 1) + ? (float) '0.'.$orderby + : (float) $orderby; + } + + if (is_float($orderby)) + { + $this->simple_query('SET SEED '.$orderby); + } + + $orderby = $this->_random_keyword[0]; + $direction = ''; + $escape = FALSE; + } + + return parent::order_by($orderby, $direction, $escape); + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Update_Batch statement + * + * Generates a platform-specific batch update string from the supplied data + * + * @param string $table Table name + * @param array $values Update data + * @param string $index WHERE key + * @return string + */ + protected function _update_batch($table, $values, $index) + { + $ids = array(); + foreach ($values as $key => $val) + { + $ids[] = $val[$index]['value']; + + foreach (array_keys($val) as $field) + { + if ($field !== $index) + { + $final[$val[$field]['field']][] = 'WHEN '.$val[$index]['value'].' THEN '.$val[$field]['value']; + } + } + } + + $cases = ''; + foreach ($final as $k => $v) + { + $cases .= $k.' = (CASE '.$val[$index]['field']."\n" + .implode("\n", $v)."\n" + .'ELSE '.$k.' END), '; + } + + $this->where($val[$index]['field'].' IN('.implode(',', $ids).')', NULL, FALSE); + + return 'UPDATE '.$table.' SET '.substr($cases, 0, -2).$this->_compile_wh('qb_where'); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + $this->qb_limit = FALSE; + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + return $sql.' LIMIT '.$this->qb_limit.($this->qb_offset ? ' OFFSET '.$this->qb_offset : ''); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + pg_close($this->conn_id); + } + +} diff --git a/system/database/drivers/postgre/postgre_forge.php b/system/database/drivers/postgre/postgre_forge.php new file mode 100644 index 00000000..cdbff4c4 --- /dev/null +++ b/system/database/drivers/postgre/postgre_forge.php @@ -0,0 +1,205 @@ + 'INTEGER', + 'SMALLINT' => 'INTEGER', + 'INT' => 'BIGINT', + 'INT4' => 'BIGINT', + 'INTEGER' => 'BIGINT', + 'INT8' => 'NUMERIC', + 'BIGINT' => 'NUMERIC', + 'REAL' => 'DOUBLE PRECISION', + 'FLOAT' => 'DOUBLE PRECISION' + ); + + /** + * NULL value representation in CREATE/ALTER TABLE statements + * + * @var string + */ + protected $_null = 'NULL'; + + // -------------------------------------------------------------------- + + /** + * Class constructor + * + * @param object &$db Database object + * @return void + */ + public function __construct(&$db) + { + parent::__construct($db); + + if (version_compare($this->db->version(), '9.0', '>')) + { + $this->create_table_if = 'CREATE TABLE IF NOT EXISTS'; + } + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('DROP', 'ADD'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table); + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + if ($field[$i]['_literal'] !== FALSE) + { + return FALSE; + } + + if (version_compare($this->db->version(), '8', '>=') && isset($field[$i]['type'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TYPE '.$field[$i]['type'].$field[$i]['length']; + } + + if ( ! empty($field[$i]['default'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' SET DEFAULT '.$field[$i]['default']; + } + + if (isset($field[$i]['null'])) + { + $sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .($field[$i]['null'] === TRUE ? ' DROP NOT NULL' : ' SET NOT NULL'); + } + + if ( ! empty($field[$i]['new_name'])) + { + $sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name']) + .' TO '.$this->db->escape_identifiers($field[$i]['new_name']); + } + + if ( ! empty($field[$i]['comment'])) + { + $sqls[] = 'COMMENT ON COLUMN ' + .$this->db->escape_identifiers($table).'.'.$this->db->escape_identifiers($field[$i]['name']) + .' IS '.$field[$i]['comment']; + } + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + // Reset field lengths for data types that don't support it + if (isset($attributes['CONSTRAINT']) && stripos($attributes['TYPE'], 'int') !== FALSE) + { + $attributes['CONSTRAINT'] = NULL; + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'TINYINT': + $attributes['TYPE'] = 'SMALLINT'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $field['type'] = ($field['type'] === 'NUMERIC') + ? 'BIGSERIAL' + : 'SERIAL'; + } + } + +} diff --git a/system/database/drivers/postgre/postgre_result.php b/system/database/drivers/postgre/postgre_result.php new file mode 100644 index 00000000..57864a7f --- /dev/null +++ b/system/database/drivers/postgre/postgre_result.php @@ -0,0 +1,182 @@ +num_rows) + ? $this->num_rows + : $this->num_rows = pg_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return pg_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $field_names[] = pg_field_name($this->result_id, $i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = pg_field_name($this->result_id, $i); + $retval[$i]->type = pg_field_type($this->result_id, $i); + $retval[$i]->max_length = pg_field_size($this->result_id, $i); + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + pg_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return pg_result_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return pg_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return pg_fetch_object($this->result_id, NULL, $class_name); + } + +} diff --git a/system/Modules/Modules.php b/system/database/drivers/postgre/postgre_utility.php similarity index 52% rename from system/Modules/Modules.php rename to system/database/drivers/postgre/postgre_utility.php index 73d68354..5ca358da 100644 --- a/system/Modules/Modules.php +++ b/system/database/drivers/postgre/postgre_utility.php @@ -1,5 +1,4 @@ enabled) - { - return false; - } - - return in_array(strtolower($alias), $this->aliases); + // Currently unsupported + return $this->db->display_error('db_unsupported_feature'); } } diff --git a/system/database/drivers/sqlite/index.html b/system/database/drivers/sqlite/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/sqlite/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php new file mode 100644 index 00000000..03c96e44 --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_driver.php @@ -0,0 +1,330 @@ +database, 0666, $error) + : sqlite_open($this->database, 0666, $error); + + isset($error) && log_message('error', $error); + + return $conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + return isset($this->data_cache['version']) + ? $this->data_cache['version'] + : $this->data_cache['version'] = sqlite_libversion(); + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + return $this->is_write_type($sql) + ? sqlite_exec($this->conn_id, $sql) + : sqlite_query($this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return $this->simple_query('BEGIN TRANSACTION'); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return $this->simple_query('COMMIT'); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return $this->simple_query('ROLLBACK'); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependant string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return sqlite_escape_string($str); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return sqlite_changes($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + return sqlite_last_insert_rowid($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT name FROM sqlite_master WHERE type='table'"; + + if ($prefix_limit !== FALSE && $this->dbprefix != '') + { + return $sql." AND 'name' LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_chr); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return bool + */ + protected function _list_columns($table = '') + { + // Not supported + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('PRAGMA TABLE_INFO('.$this->protect_identifiers($table, TRUE, NULL, FALSE).')')) === FALSE) + { + return FALSE; + } + + $query = $query->result_array(); + if (empty($query)) + { + return FALSE; + } + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]['name']; + $retval[$i]->type = $query[$i]['type']; + $retval[$i]->max_length = NULL; + $retval[$i]->default = $query[$i]['dflt_value']; + $retval[$i]->primary_key = isset($query[$i]['pk']) ? (int) $query[$i]['pk'] : 0; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occured. + * + * @return array + */ + public function error() + { + $error = array('code' => sqlite_last_error($this->conn_id)); + $error['message'] = sqlite_error_string($error['code']); + return $error; + } + + // -------------------------------------------------------------------- + + /** + * Replace statement + * + * Generates a platform-specific replace string from the supplied data + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _replace($table, $keys, $values) + { + return 'INSERT OR '.parent::_replace($table, $keys, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this function maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'DELETE FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + sqlite_close($this->conn_id); + } + +} diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php new file mode 100644 index 00000000..a0fc0cdb --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_forge.php @@ -0,0 +1,205 @@ +db->database) OR ! @unlink($this->db->database)) + { + return ($this->db->db_debug) ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + elseif ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($this->db->database), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @todo implement drop_column(), modify_column() + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP' OR $alter_type === 'CHANGE') + { + // drop_column(): + // BEGIN TRANSACTION; + // CREATE TEMPORARY TABLE t1_backup(a,b); + // INSERT INTO t1_backup SELECT a,b FROM t1; + // DROP TABLE t1; + // CREATE TABLE t1(a,b); + // INSERT INTO t1 SELECT a,b FROM t1_backup; + // DROP TABLE t1_backup; + // COMMIT; + + return FALSE; + } + + return parent::_alter_table($alter_type, $table, $field); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'] + .$field['auto_increment'] + .$field['null'] + .$field['unique'] + .$field['default']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'ENUM': + case 'SET': + $attributes['TYPE'] = 'TEXT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['type'] = 'INTEGER PRIMARY KEY'; + $field['default'] = ''; + $field['null'] = ''; + $field['unique'] = ''; + $field['auto_increment'] = ' AUTOINCREMENT'; + + $this->primary_keys = array(); + } + } + +} diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php new file mode 100644 index 00000000..34d3ac3c --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_result.php @@ -0,0 +1,164 @@ +num_rows) + ? $this->num_rows + : $this->num_rows = @sqlite_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return @sqlite_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $field_names[$i] = sqlite_field_name($this->result_id, $i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = sqlite_field_name($this->result_id, $i); + $retval[$i]->type = NULL; + $retval[$i]->max_length = NULL; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n + * @return bool + */ + public function data_seek($n = 0) + { + return sqlite_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return sqlite_fetch_array($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return sqlite_fetch_object($this->result_id, $class_name); + } + +} diff --git a/system/Router/Exceptions/RedirectException.php b/system/database/drivers/sqlite/sqlite_utility.php similarity index 59% rename from system/Router/Exceptions/RedirectException.php rename to system/database/drivers/sqlite/sqlite_utility.php index 61142076..90ca4b16 100644 --- a/system/Router/Exceptions/RedirectException.php +++ b/system/database/drivers/sqlite/sqlite_utility.php @@ -1,5 +1,4 @@ db->display_error('db_unsupported_feature'); + } + } diff --git a/system/database/drivers/sqlite3/index.html b/system/database/drivers/sqlite3/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/sqlite3/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/sqlite3/sqlite3_driver.php b/system/database/drivers/sqlite3/sqlite3_driver.php new file mode 100644 index 00000000..d131baad --- /dev/null +++ b/system/database/drivers/sqlite3/sqlite3_driver.php @@ -0,0 +1,350 @@ +password) + ? new SQLite3($this->database) + : new SQLite3($this->database, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $this->password); + } + catch (Exception $e) + { + return FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + $version = SQLite3::version(); + return $this->data_cache['version'] = $version['versionString']; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @todo Implement use of SQLite3::querySingle(), if needed + * @param string $sql + * @return mixed SQLite3Result object or bool + */ + protected function _execute($sql) + { + return $this->is_write_type($sql) + ? $this->conn_id->exec($sql) + : $this->conn_id->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return $this->conn_id->exec('BEGIN TRANSACTION'); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return $this->conn_id->exec('END TRANSACTION'); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return $this->conn_id->exec('ROLLBACK'); + } + + // -------------------------------------------------------------------- + + /** + * Platform-dependent string escape + * + * @param string + * @return string + */ + protected function _escape_str($str) + { + return $this->conn_id->escapeString($str); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return $this->conn_id->changes(); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @return int + */ + public function insert_id() + { + return $this->conn_id->lastInsertRowID(); + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool $prefix_limit + * @return string + */ + protected function _list_tables($prefix_limit = FALSE) + { + return 'SELECT "NAME" FROM "SQLITE_MASTER" WHERE "TYPE" = \'table\'' + .(($prefix_limit !== FALSE && $this->dbprefix != '') + ? ' AND "NAME" LIKE \''.$this->escape_like_str($this->dbprefix).'%\' '.sprintf($this->_like_escape_str, $this->_like_escape_chr) + : ''); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * @param string $table Table name + * @return array + */ + public function list_fields($table) + { + // Is there a cached result? + if (isset($this->data_cache['field_names'][$table])) + { + return $this->data_cache['field_names'][$table]; + } + + if (($result = $this->query('PRAGMA TABLE_INFO('.$this->protect_identifiers($table, TRUE, NULL, FALSE).')')) === FALSE) + { + return FALSE; + } + + $this->data_cache['field_names'][$table] = array(); + foreach ($result->result_array() as $row) + { + $this->data_cache['field_names'][$table][] = $row['name']; + } + + return $this->data_cache['field_names'][$table]; + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + if (($query = $this->query('PRAGMA TABLE_INFO('.$this->protect_identifiers($table, TRUE, NULL, FALSE).')')) === FALSE) + { + return FALSE; + } + + $query = $query->result_array(); + if (empty($query)) + { + return FALSE; + } + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]['name']; + $retval[$i]->type = $query[$i]['type']; + $retval[$i]->max_length = NULL; + $retval[$i]->default = $query[$i]['dflt_value']; + $retval[$i]->primary_key = isset($query[$i]['pk']) ? (int) $query[$i]['pk'] : 0; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + return array('code' => $this->conn_id->lastErrorCode(), 'message' => $this->conn_id->lastErrorMsg()); + } + + // -------------------------------------------------------------------- + + /** + * Replace statement + * + * Generates a platform-specific replace string from the supplied data + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string + */ + protected function _replace($table, $keys, $values) + { + return 'INSERT OR '.parent::_replace($table, $keys, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'DELETE FROM '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + $this->conn_id->close(); + } + +} diff --git a/system/database/drivers/sqlite3/sqlite3_forge.php b/system/database/drivers/sqlite3/sqlite3_forge.php new file mode 100644 index 00000000..5ee6daae --- /dev/null +++ b/system/database/drivers/sqlite3/sqlite3_forge.php @@ -0,0 +1,225 @@ +db->version(), '3.3', '<')) + { + $this->_create_table_if = FALSE; + $this->_drop_table_if = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @param string $db_name + * @return bool + */ + public function create_database($db_name) + { + // In SQLite, a database is created when you connect to the database. + // We'll return TRUE so that an error isn't generated + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @param string $db_name (ignored) + * @return bool + */ + public function drop_database($db_name) + { + // In SQLite, a database is dropped when we delete a file + if (file_exists($this->db->database)) + { + // We need to close the pseudo-connection first + $this->db->close(); + if ( ! @unlink($this->db->database)) + { + return $this->db->db_debug ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + elseif ( ! empty($this->db->data_cache['db_names'])) + { + $key = array_search(strtolower($this->db->database), array_map('strtolower', $this->db->data_cache['db_names']), TRUE); + if ($key !== FALSE) + { + unset($this->db->data_cache['db_names'][$key]); + } + } + + return TRUE; + } + + return $this->db->db_debug ? $this->db->display_error('db_unable_to_drop') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @todo implement drop_column(), modify_column() + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if ($alter_type === 'DROP' OR $alter_type === 'CHANGE') + { + // drop_column(): + // BEGIN TRANSACTION; + // CREATE TEMPORARY TABLE t1_backup(a,b); + // INSERT INTO t1_backup SELECT a,b FROM t1; + // DROP TABLE t1; + // CREATE TABLE t1(a,b); + // INSERT INTO t1 SELECT a,b FROM t1_backup; + // DROP TABLE t1_backup; + // COMMIT; + + return FALSE; + } + + return parent::_alter_table($alter_type, $table, $field); + } + + // -------------------------------------------------------------------- + + /** + * Process column + * + * @param array $field + * @return string + */ + protected function _process_column($field) + { + return $this->db->escape_identifiers($field['name']) + .' '.$field['type'] + .$field['auto_increment'] + .$field['null'] + .$field['unique'] + .$field['default']; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + switch (strtoupper($attributes['TYPE'])) + { + case 'ENUM': + case 'SET': + $attributes['TYPE'] = 'TEXT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['type'] = 'INTEGER PRIMARY KEY'; + $field['default'] = ''; + $field['null'] = ''; + $field['unique'] = ''; + $field['auto_increment'] = ' AUTOINCREMENT'; + + $this->primary_keys = array(); + } + } + +} diff --git a/system/database/drivers/sqlite3/sqlite3_result.php b/system/database/drivers/sqlite3/sqlite3_result.php new file mode 100644 index 00000000..03751f0d --- /dev/null +++ b/system/database/drivers/sqlite3/sqlite3_result.php @@ -0,0 +1,194 @@ +result_id->numColumns(); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $field_names[] = $this->result_id->columnName($i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + static $data_types = array( + SQLITE3_INTEGER => 'integer', + SQLITE3_FLOAT => 'float', + SQLITE3_TEXT => 'text', + SQLITE3_BLOB => 'blob', + SQLITE3_NULL => 'null' + ); + + $retval = array(); + for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $this->result_id->columnName($i); + + $type = $this->result_id->columnType($i); + $retval[$i]->type = isset($data_types[$type]) ? $data_types[$type] : $type; + + $retval[$i]->max_length = NULL; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_object($this->result_id)) + { + $this->result_id->finalize(); + $this->result_id = NULL; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return $this->result_id->fetchArray(SQLITE3_ASSOC); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + // No native support for fetching rows as objects + if (($row = $this->result_id->fetchArray(SQLITE3_ASSOC)) === FALSE) + { + return FALSE; + } + elseif ($class_name === 'stdClass') + { + return (object) $row; + } + + $class_name = new $class_name(); + foreach (array_keys($row) as $key) + { + $class_name->$key = $row[$key]; + } + + return $class_name; + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero. + * + * @param int $n (ignored) + * @return array + */ + public function data_seek($n = 0) + { + // Only resetting to the start of the result set is supported + return ($n > 0) ? FALSE : $this->result_id->reset(); + } + +} diff --git a/system/CLI/Exceptions/CLIException.php b/system/database/drivers/sqlite3/sqlite3_utility.php similarity index 59% rename from system/CLI/Exceptions/CLIException.php rename to system/database/drivers/sqlite3/sqlite3_utility.php index 474064ef..20d562f9 100644 --- a/system/CLI/Exceptions/CLIException.php +++ b/system/database/drivers/sqlite3/sqlite3_utility.php @@ -1,5 +1,4 @@ db->display_error('db_unsupported_feature'); } + } diff --git a/system/database/drivers/sqlsrv/index.html b/system/database/drivers/sqlsrv/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/drivers/sqlsrv/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/database/drivers/sqlsrv/sqlsrv_driver.php b/system/database/drivers/sqlsrv/sqlsrv_driver.php new file mode 100644 index 00000000..4edcc7fb --- /dev/null +++ b/system/database/drivers/sqlsrv/sqlsrv_driver.php @@ -0,0 +1,543 @@ +scrollable === NULL) + { + $this->scrollable = defined('SQLSRV_CURSOR_CLIENT_BUFFERED') + ? SQLSRV_CURSOR_CLIENT_BUFFERED + : FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Database connection + * + * @param bool $pooling + * @return resource + */ + public function db_connect($pooling = FALSE) + { + $charset = in_array(strtolower($this->char_set), array('utf-8', 'utf8'), TRUE) + ? 'UTF-8' : SQLSRV_ENC_CHAR; + + $connection = array( + 'UID' => empty($this->username) ? '' : $this->username, + 'PWD' => empty($this->password) ? '' : $this->password, + 'Database' => $this->database, + 'ConnectionPooling' => ($pooling === TRUE) ? 1 : 0, + 'CharacterSet' => $charset, + 'Encrypt' => ($this->encrypt === TRUE) ? 1 : 0, + 'ReturnDatesAsStrings' => 1 + ); + + // If the username and password are both empty, assume this is a + // 'Windows Authentication Mode' connection. + if (empty($connection['UID']) && empty($connection['PWD'])) + { + unset($connection['UID'], $connection['PWD']); + } + + if (FALSE !== ($this->conn_id = sqlsrv_connect($this->hostname, $connection))) + { + // Determine how identifiers are escaped + $query = $this->query('SELECT CASE WHEN (@@OPTIONS | 256) = @@OPTIONS THEN 1 ELSE 0 END AS qi'); + $query = $query->row_array(); + $this->_quoted_identifier = empty($query) ? FALSE : (bool) $query['qi']; + $this->_escape_char = ($this->_quoted_identifier) ? '"' : array('[', ']'); + } + + return $this->conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @param string $database + * @return bool + */ + public function db_select($database = '') + { + if ($database === '') + { + $database = $this->database; + } + + if ($this->_execute('USE '.$this->escape_identifiers($database))) + { + $this->database = $database; + $this->data_cache = array(); + return TRUE; + } + + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @param string $sql an SQL query + * @return resource + */ + protected function _execute($sql) + { + return ($this->scrollable === FALSE OR $this->is_write_type($sql)) + ? sqlsrv_query($this->conn_id, $sql) + : sqlsrv_query($this->conn_id, $sql, NULL, array('Scrollable' => $this->scrollable)); + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @return bool + */ + protected function _trans_begin() + { + return sqlsrv_begin_transaction($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @return bool + */ + protected function _trans_commit() + { + return sqlsrv_commit($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @return bool + */ + protected function _trans_rollback() + { + return sqlsrv_rollback($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @return int + */ + public function affected_rows() + { + return sqlsrv_rows_affected($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * Returns the last id created in the Identity column. + * + * @return string + */ + public function insert_id() + { + return $this->query('SELECT SCOPE_IDENTITY() AS insert_id')->row()->insert_id; + } + + // -------------------------------------------------------------------- + + /** + * Database version number + * + * @return string + */ + public function version() + { + if (isset($this->data_cache['version'])) + { + return $this->data_cache['version']; + } + + if ( ! $this->conn_id OR ($info = sqlsrv_server_info($this->conn_id)) === FALSE) + { + return FALSE; + } + + return $this->data_cache['version'] = $info['SQLServerVersion']; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @param bool + * @return string $prefix_limit + */ + protected function _list_tables($prefix_limit = FALSE) + { + $sql = 'SELECT '.$this->escape_identifiers('name') + .' FROM '.$this->escape_identifiers('sysobjects') + .' WHERE '.$this->escape_identifiers('type')." = 'U'"; + + if ($prefix_limit === TRUE && $this->dbprefix !== '') + { + $sql .= ' AND '.$this->escape_identifiers('name')." LIKE '".$this->escape_like_str($this->dbprefix)."%' " + .sprintf($this->_escape_like_str, $this->_escape_like_chr); + } + + return $sql.' ORDER BY '.$this->escape_identifiers('name'); + } + + // -------------------------------------------------------------------- + + /** + * List column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @param string $table + * @return string + */ + protected function _list_columns($table = '') + { + return 'SELECT COLUMN_NAME + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @param string $table + * @return array + */ + public function field_data($table) + { + $sql = 'SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, COLUMN_DEFAULT + FROM INFORMATION_SCHEMA.Columns + WHERE UPPER(TABLE_NAME) = '.$this->escape(strtoupper($table)); + + if (($query = $this->query($sql)) === FALSE) + { + return FALSE; + } + $query = $query->result_object(); + + $retval = array(); + for ($i = 0, $c = count($query); $i < $c; $i++) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $query[$i]->COLUMN_NAME; + $retval[$i]->type = $query[$i]->DATA_TYPE; + $retval[$i]->max_length = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; + $retval[$i]->default = $query[$i]->COLUMN_DEFAULT; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Error + * + * Returns an array containing code and message of the last + * database error that has occurred. + * + * @return array + */ + public function error() + { + $error = array('code' => '00000', 'message' => ''); + $sqlsrv_errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); + + if ( ! is_array($sqlsrv_errors)) + { + return $error; + } + + $sqlsrv_error = array_shift($sqlsrv_errors); + if (isset($sqlsrv_error['SQLSTATE'])) + { + $error['code'] = isset($sqlsrv_error['code']) ? $sqlsrv_error['SQLSTATE'].'/'.$sqlsrv_error['code'] : $sqlsrv_error['SQLSTATE']; + } + elseif (isset($sqlsrv_error['code'])) + { + $error['code'] = $sqlsrv_error['code']; + } + + if (isset($sqlsrv_error['message'])) + { + $error['message'] = $sqlsrv_error['message']; + } + + return $error; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @param string $table + * @param array $values + * @return string + */ + protected function _update($table, $values) + { + $this->qb_limit = FALSE; + $this->qb_orderby = array(); + return parent::_update($table, $values); + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * + * If the database does not support the TRUNCATE statement, + * then this method maps to 'DELETE FROM table' + * + * @param string $table + * @return string + */ + protected function _truncate($table) + { + return 'TRUNCATE TABLE '.$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @param string $table + * @return string + */ + protected function _delete($table) + { + if ($this->qb_limit) + { + return 'WITH ci_delete AS (SELECT TOP '.$this->qb_limit.' * FROM '.$table.$this->_compile_wh('qb_where').') DELETE FROM ci_delete'; + } + + return parent::_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * LIMIT + * + * Generates a platform-specific LIMIT clause + * + * @param string $sql SQL Query + * @return string + */ + protected function _limit($sql) + { + // As of SQL Server 2012 (11.0.*) OFFSET is supported + if (version_compare($this->version(), '11', '>=')) + { + // SQL Server OFFSET-FETCH can be used only with the ORDER BY clause + empty($this->qb_orderby) && $sql .= ' ORDER BY 1'; + + return $sql.' OFFSET '.(int) $this->qb_offset.' ROWS FETCH NEXT '.$this->qb_limit.' ROWS ONLY'; + } + + $limit = $this->qb_offset + $this->qb_limit; + + // An ORDER BY clause is required for ROW_NUMBER() to work + if ($this->qb_offset && ! empty($this->qb_orderby)) + { + $orderby = $this->_compile_order_by(); + + // We have to strip the ORDER BY clause + $sql = trim(substr($sql, 0, strrpos($sql, $orderby))); + + // Get the fields to select from our subquery, so that we can avoid CI_rownum appearing in the actual results + if (count($this->qb_select) === 0 OR strpos(implode(',', $this->qb_select), '*') !== FALSE) + { + $select = '*'; // Inevitable + } + else + { + // Use only field names and their aliases, everything else is out of our scope. + $select = array(); + $field_regexp = ($this->_quoted_identifier) + ? '("[^\"]+")' : '(\[[^\]]+\])'; + for ($i = 0, $c = count($this->qb_select); $i < $c; $i++) + { + $select[] = preg_match('/(?:\s|\.)'.$field_regexp.'$/i', $this->qb_select[$i], $m) + ? $m[1] : $this->qb_select[$i]; + } + $select = implode(', ', $select); + } + + return 'SELECT '.$select." FROM (\n\n" + .preg_replace('/^(SELECT( DISTINCT)?)/i', '\\1 ROW_NUMBER() OVER('.trim($orderby).') AS '.$this->escape_identifiers('CI_rownum').', ', $sql) + ."\n\n) ".$this->escape_identifiers('CI_subquery') + ."\nWHERE ".$this->escape_identifiers('CI_rownum').' BETWEEN '.($this->qb_offset + 1).' AND '.$limit; + } + + return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$limit.' ', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Insert batch statement + * + * Generates a platform-specific insert string from the supplied data. + * + * @param string $table Table name + * @param array $keys INSERT keys + * @param array $values INSERT values + * @return string|bool + */ + protected function _insert_batch($table, $keys, $values) + { + // Multiple-value inserts are only supported as of SQL Server 2008 + if (version_compare($this->version(), '10', '>=')) + { + return parent::_insert_batch($table, $keys, $values); + } + + return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @return void + */ + protected function _close() + { + sqlsrv_close($this->conn_id); + } + +} diff --git a/system/database/drivers/sqlsrv/sqlsrv_forge.php b/system/database/drivers/sqlsrv/sqlsrv_forge.php new file mode 100644 index 00000000..aa8490ee --- /dev/null +++ b/system/database/drivers/sqlsrv/sqlsrv_forge.php @@ -0,0 +1,149 @@ + 'SMALLINT', + 'SMALLINT' => 'INT', + 'INT' => 'BIGINT', + 'REAL' => 'FLOAT' + ); + + // -------------------------------------------------------------------- + + /** + * ALTER TABLE + * + * @param string $alter_type ALTER type + * @param string $table Table name + * @param mixed $field Column definition + * @return string|string[] + */ + protected function _alter_table($alter_type, $table, $field) + { + if (in_array($alter_type, array('ADD', 'DROP'), TRUE)) + { + return parent::_alter_table($alter_type, $table, $field); + } + + $sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' ALTER COLUMN '; + $sqls = array(); + for ($i = 0, $c = count($field); $i < $c; $i++) + { + $sqls[] = $sql.$this->_process_column($field[$i]); + } + + return $sqls; + } + + // -------------------------------------------------------------------- + + /** + * Field attribute TYPE + * + * Performs a data type mapping between different databases. + * + * @param array &$attributes + * @return void + */ + protected function _attr_type(&$attributes) + { + if (isset($attributes['CONSTRAINT']) && strpos($attributes['TYPE'], 'INT') !== FALSE) + { + unset($attributes['CONSTRAINT']); + } + + switch (strtoupper($attributes['TYPE'])) + { + case 'MEDIUMINT': + $attributes['TYPE'] = 'INTEGER'; + $attributes['UNSIGNED'] = FALSE; + return; + case 'INTEGER': + $attributes['TYPE'] = 'INT'; + return; + default: return; + } + } + + // -------------------------------------------------------------------- + + /** + * Field attribute AUTO_INCREMENT + * + * @param array &$attributes + * @param array &$field + * @return void + */ + protected function _attr_auto_increment(&$attributes, &$field) + { + if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE) + { + $field['auto_increment'] = ' IDENTITY(1,1)'; + } + } + +} diff --git a/system/database/drivers/sqlsrv/sqlsrv_result.php b/system/database/drivers/sqlsrv/sqlsrv_result.php new file mode 100644 index 00000000..f784ebea --- /dev/null +++ b/system/database/drivers/sqlsrv/sqlsrv_result.php @@ -0,0 +1,193 @@ +scrollable = $driver_object->scrollable; + } + + // -------------------------------------------------------------------- + + /** + * Number of rows in the result set + * + * @return int + */ + public function num_rows() + { + // sqlsrv_num_rows() doesn't work with the FORWARD and DYNAMIC cursors (FALSE is the same as FORWARD) + if ( ! in_array($this->scrollable, array(FALSE, SQLSRV_CURSOR_FORWARD, SQLSRV_CURSOR_DYNAMIC), TRUE)) + { + return parent::num_rows(); + } + + return is_int($this->num_rows) + ? $this->num_rows + : $this->num_rows = sqlsrv_num_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @return int + */ + public function num_fields() + { + return @sqlsrv_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @return array + */ + public function list_fields() + { + $field_names = array(); + foreach (sqlsrv_field_metadata($this->result_id) as $offset => $field) + { + $field_names[] = $field['Name']; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @return array + */ + public function field_data() + { + $retval = array(); + foreach (sqlsrv_field_metadata($this->result_id) as $i => $field) + { + $retval[$i] = new stdClass(); + $retval[$i]->name = $field['Name']; + $retval[$i]->type = $field['Type']; + $retval[$i]->max_length = $field['Size']; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return void + */ + public function free_result() + { + if (is_resource($this->result_id)) + { + sqlsrv_free_stmt($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @return array + */ + protected function _fetch_assoc() + { + return sqlsrv_fetch_array($this->result_id, SQLSRV_FETCH_ASSOC); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @param string $class_name + * @return object + */ + protected function _fetch_object($class_name = 'stdClass') + { + return sqlsrv_fetch_object($this->result_id, $class_name); + } + +} diff --git a/system/Database/MySQLi/Utils.php b/system/database/drivers/sqlsrv/sqlsrv_utility.php similarity index 54% rename from system/Database/MySQLi/Utils.php rename to system/database/drivers/sqlsrv/sqlsrv_utility.php index e5056d12..19c93d0c 100644 --- a/system/Database/MySQLi/Utils.php +++ b/system/database/drivers/sqlsrv/sqlsrv_utility.php @@ -1,5 +1,4 @@ db->display_error('db_unsupported_feature'); } - //-------------------------------------------------------------------- } diff --git a/system/database/index.html b/system/database/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/database/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/fonts/index.html b/system/fonts/index.html new file mode 100644 index 00000000..b702fbc3 --- /dev/null +++ b/system/fonts/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/system/fonts/texb.ttf b/system/fonts/texb.ttf new file mode 100644 index 0000000000000000000000000000000000000000..383c88b86b7c17e2e284732af48b2bfc359647ae GIT binary patch literal 143830 zcmcG%34ml(c{W_il{&<709mpO2M~UwQR4 z@7=v(myaoCd_MIlA7KsVlRh5jzKO4)RfWbY`wrhFjOp_+jKK07&#-9ijjuk9OX5eO ze>NVvX3m%KWq!-?e=`3kq$b|LTsPq(3kwT$FMb#w?FXMPgnqy~62q^6U+>GM*XGB@ z3wGjGydX-lqH6v?P&Z5~WIN$VG!{=JQ|XMG&E*TlQn}LBUhU}Y>h9^S_4N-7t{55~ zSvfj3KCx+&v)TP zzQf17eYakA`7M{6zRl;m$>+P~6u!FR_|dsTH{;F4mwE@BxccO^*In=PUFm)D`EI}C z#v{$Q%U`Zq_JL#QNWR~9+9&ureW!en`QGJwFQns1-^YAU`#$aayze`{v%Y`!y-0e< zc9vx&*3TMjiS1=qu#d5yW}jid!VzvWw>1;WBr|TNH}h>*cP-a(BW}X&cOP{><$lKf zTlZU8UzW}CSt+Y#^{kbRWmDNgwmrKtJCU8r&SW=c4`vT#Z^_<~eRcM}?4#NDWS`A` zKKu7MHP@EU7Cv0~MB!6~&lUc<@Ppz-#VcQ2_$}v+Y^K@XKSO(;YPR>=UVHxw?cK)u zSe{jy?Hy$AXWxbPeg^H;(OxT)$Yg$}z4yDHbf0m*=CzkWdquCkW;UEnqP-=ry_3!M zUYxx#dwcdSwD*DRJH7UPCnx19=d}0v;=$sv7hn3V52EDiY)_xy#= z?|pvv^Z)q#`19iP{PXPd%-MyrKR)}~vzMK{^z7cVd(L+Id}lk(R?oJbEuJmV@jV;C zuW*(<%bX==esd;$CUNE~XTEgi3uiui=9x1eKl7$DkDj^v%$_r&-(UURr@s5-ci;cr z_kH)B-@Wg<`gcVM;|>eLmN4jRO7K;FT*{9qo6gOU07fg{&8OqZ66UtY++|{3y0|2nlm`?yIZMP%8HhEhV2~|b_RQw zABF>pBH1-uY7-feA*>*<{+M5I2rDa5O^@<~5H2XFNtI^>o+XSxhLhX2As;t6B3q`+p@$gn0+Kw)oFObhmkO%P8E!c= ze9g&W(Yl~AM8+$7BZ@mYy>RnZRSzyy2!Fy)J3>i}%`tzNm$3Ev zFAC@E9vEzVr2SdTjxcVmhCVL!(QeD-ypE&?c)P$!;@eVSwStCstmVsmtUJu2OlJ@OEM=Ov)&5V<)>W@cry!`ubyDD!j-ZlWy z)`VQIq)MVF5l9T~TmMd^GfwX-d-qjwUs;d@ClSi5mxPG?6NME zH@{)Fy}~dq!;%e;Y_FUWgUR4_kqK%U&O2c6ierNpvm%6(h=k$w@({GdD_#8PcdlEx zc=0Y)2^G!DACDDdPSjzT1RAmajpw(Y5(9DX@@i6G6IRTg-7|5Ko^f@0NbBlGR+o(I zrgG2>n1onp8F_`Ts5ZTQ;XW<`r|Q+dxB5PenPOvNEZ-Vxv*d&g$Zg4K2<@WSHV1PW6@~26CI$ z9V|pmea?<_3>MsM;toQp#i_~dm1Njb{lUcQ{^4vQ7B|x*Q5c`i*^FSWp1Lp=kHsaG zk$Gq|X3ifB#x`^hK-WvWBq@WZ6m>3OIBqqUx5I=P*TYscm9h-McPS@1ek&A>WYYO< zyEaT;vTi1lk1=GvPPok7m@BNBN>#=xZB(I)9LMqDT)Zup&1TLU8E_<)x%5&_v;!eK zcGKrB-?w>WBoz>OhI|o16-eh+sEVDd_2jBU*@37#w{9jW2|Tq0466%dk4S+W!!r(cA(ol_1b%O(z4+qd=n#yh2ajmfqV`!n{7WXt|16TL1-PBax(S-qT zXGjcD?M*lOb$=h-yn}ghuwk+rd+p`M%oDQ4C0n+Yw7W1X~$K=y@^;P95Mods=x~H()Ie!t{CIEBq4m# z$yIv$%LUyGs;O)jdpRL*TjA&V;jW&{N(m#XT}N+Z!xCpRwjBzE%qN1p%1NS{9vRyl zR0FE^d#=UTI4vxfUToc!H4mrzKBK<$CwsDhT=9 zvxihgkrhegMF#GTymNkbQ!1HEY^)7H5tG?Jc1h|Bvc3x!&I(WRPxyX76f)TK1Qw-^ zIx@ezEtA0BniDSKh~)>hcK7Ez3)~P#Pq>!3Rjq^YN?nHDTE8fkY^nn3rJBA(LtdMI zvpJ~OB^kv#C_l`DT4OHIw~cM-nAZ8rTNfV0zbT5!!XCZ z1`PJ03FH%sp|NT>YcNBv4ZyI&!DaUkt-J};m8}_oJdDAu+kzO9)?vTTAai) zao3L8(RGv091g0gBy-$cI?>VDvwv448jkQnL{@?_W15Ds?QY)4*b1St>sY1osA_I} z zLs40XPlPabygF1H-#)#%7=ui)iWC4wAQN2qW2`K3iYW0sVY{mnZmbw0gr3IvRnv(_ zQmP|!MDj~-5H(XSS30_4z!D@`k_p_HHN&f?WnnUxbj(1E#8lmIh{-cg^18~(Rw~GJ zUUSF_=_Y;*+cfo%sRs-+m1VSHMb|8-dH5oj^Z_wI0*D4AQQ!@RKdu{=Wjl`3Rmz7# zoLCFsTvl{=A_f%(swK4lvr?oh6(kk}ie=IIIgSzL&;tythbH-BAw_Z@+Y*gNybgoc zAqWvIV#*svW@m8auo~nMY*UFyp|{*}F%eBBB8lD_$F@hynyMMyz3XaYz0+O2ojuWT zG|UQNYVEF&XpCvTH=$3YAydoy{6v)zFczIds=PhogwQTGf-5|ax4tNksL+}gi+M&MkTAhRc z6TU5$O6RnI7Gxwp+Q2%3%m!7RCwfp1P7DoneM({zW-8s@H$Ju5&<#W8Vqt!Pk8_;h zMIyM`1?M06JiuTo_l9ST)l+$=`L^Q%Va-5Oobccf#i2B3b8J!oq3>Gs=)OZFll@Od=5e;e- z@(92~;n_cUk6PdVFZbYXQi?pMMe?R%NsPkjta)WADvJy+39M`yGAk+~{x#kU63>Wo zv~;D(>YTzzmSW~38pjuvK*EsnYtuo=>5GoDq!L{b6!gq_?UIoQ{NKL=)qS_u|4n!g zZ_>F%8UcMnv4tJL3Wg2emkwYHz+-l4|z%;hOo;UxkO_rgU ze#GpWW-Erdf$4-EHciJ024O0h&JCua*c#pMHx71>Qp6){ocVhq#uyZh(A+0Y&Dt)GCs9`^zBEHwS5W;>e?)sW+clv6x|;%`mt zjeL~x@9{Lc0*&4-OSx8 zDWuv?+;5r1R6dwG;7WquM>8q(evM8N1$LQgZOH-cGHc0xAQ}?cua!~^ z!>#HmZESM}jvX7&UCdO?k(E%$t+?>#J31m4JoUy+M%Gq273iFKzTgu#i=6t-6Z=1T zr2o$Pi}e@pEN$Lg(h|M#bSz4kT_Qht&IgCaRwVDi}Jx7~S0fsGDv<4QM-w&*;e^IkhEhjcZGw)Pf!faix?x5)p@#8={S$`taebY}@ zZfeh&#&FMjPju$Xalfj{ensX*o+wE*;McDv+|c%PDxKD~?_OKXGrG(9ecG1L6ZQSlVy`j#|8m(>$u_IOIq%*~c&| zMz3DK1AeprNB)#@d2gh%D$Ct*PCqG|Pqn@o9pKs!eYfk&sRUH8_3R_o>N%D7JKRn5@ zu}CapnU?WHkqRjznu(sFO>QQiycoW*Qpopo6iXrCJm}{=3qR&YFxDSx^mD5V8dkj3 zH9%0jexj&6wh?Bq1+sac?PZF#MB_`kHG))%Q8)a8h7aRi0MYJXp5AHMP!wM_RM@+G zu$nEQ)`^NjV=Cv!TEF49{6T-P)_qwI9DW)O4naKUw* zERY1+C-Q1pmX%mK=CbTX8&zAE6HY`=l2zr}#!fi3tX#@ZBH(NrTThsoRfM^;kK^~I zD)|m8glLID{0S$-A5itaN=HnSWfqZJS7mbNDJwMCJ~ina z6j>H|o(nSUM0!XwbMA?CDa+#ERl^b{06U9xxLComQq@^mw!@)FU+Rt(A{=Oq103S= znnL5lpi>^$)fOXU5C+?sT|HT`^`IK$STXsYZ3phTFcS-#k{}>*MaaiMQAqJ(r8^Rh z#vDrzP7U<9ZL}A7KA4_ZyPr(AS4pD0Zcjn=(qD{k0&{N{KjrK7jX(pqcFrz@!~MDb zT7Rx-{M(tLHzG>{(lj7+DiXsTXRN`&Rm_%uA|3O$Klj{ojG=^y6AJ`FL6%JBCQiS3 zePSS_xP*rbN0`HPE>!-LuT8mR?E7<60BESPb0Ap?D^#?aZOxyoi zGU~SN%m*0ph+FPoVTUYpIG2GoK-PeW0Tp<3B%LW9e$`)GbJCBD3vX74fvAa59&(&W zRNa{Q%4LUZRkz z1{^D7TqN?nx)HK5ZjA3BZ2Jo6pdG$@FpRlHgNs<4>Y1j7rk&bS84bBZ=!@^L^`g(4 zgSJe;(@|<}Fd&U18-GJ^uJ8-JwWzsTqYIxGW9(gw+=zz^N?O3V@Dm8L`7PC$ zHaGD{eHTF!h^)BS&jU4Tlp*S^wB}-8dm%()N_hTLYh=!Og*OKGflepd@%Z&7SAXuW z&2nH47G;ntzTzdb<7(7sd1y$bUOBFgR>R!Vs14w(51K?!KGn zw{IitaC}oa;yUfBJ>_1|{e!!@cW7cqPqjB1irS23YQaK~3P02*P6w#rx6n_lZ*JjV zxM9ff7Rd0k=s0`Hv1r5?O;Lpiw^U0*o#3zcO(Ujie7D$_Edh7J)_?~Pd-B`ZjkHMi zWk@c%lWxs?MI&fuduy#*d#|kzOZR9wyiKuhj*~c0BS#U_03HgoySZ?sWBoIlKc0@d z{k{KiVzpRLJ2G z%6?`ezQ?2uok+V^olnySehv*G0vtR>wh+UILa@+C#QZ&FxWRaE6b3^SEAZUM4ny1BJ09Vkd(%!;E?R~Y(n4s&n_vCnZZntY^2 z^HcV+Fl}l48j`dmVU00vj<{zL8~YH>E&5)|<)9@SaI%_misRXV#@Dv9m=|kW!V>1U z7bG=Brg?ETjYrll^alf!6NiMKWhR}tBL)2;2LK$2C>mbxqcJOD8Ff}!E}b6)EJ(VbJxxsIPXw3Tgh#hoN7bnlT#-qE-ZJpcg5vgw6ju5DnP*hetbp0 ztsxUnYSC=D(*SxI&;sfO7#K`c$qB{cZXk(#{PAQY9wqgEJ>W;D%QW9ZM-vzx3*ZLA zL?l%WrV5wDX*fbB7ZN+-H#yzGD__1rw52^E~f2wDym{9z!0z3&z1 zKg*GX`6vGv(m>_+J@u=|e|XQd>woY}R%j87pt4DY@8!=;pS=-&dV3p@{vUhPBQjCL zP6m;v#qc&^a;hu?;)eU9?^St&kn|R$gaVQj)S+{-om(U+gjC8O?Sq%@b=rjfS}y_v z!(uo~&+v>O(kq9W?oaW}ekOxx36}|V+U6VssU)ncyOK(uk_r#K%=YlhY_+BnAzTI}dGE5f&sH~&z%bxH`dN4rTf+LH@xez+J}{pRgk zw{F{-g}&9oezIW1OexYm<|YPuV(xH6nHeMh?sy!c- zNop{rj(qkQKbB%8hgWM^GvMe#agC|E>ni19si3DgP;tO3_TAz8zVJAk_a%J8@IE}G zZiIDRxO<-bi(<}ob4?;0g?xZudON*tYwi4aUq#XNnV+*6Bx%}BfG#~|ruwOup0CgE z2nA%)M@U(N`!n-zY>qJHc1vfvt#rpHU;4-TOFQg<%(`-aHNXIq+C8;^gRt-JvqjoSCZ#aDUVDn-DqslP`S(V!QMCg8y3g% z#L>Q~n``Hc<*mx^8_W8kAF8MR@K`dw|GQ(ku)zKu{}$gt-))|>F9Q&k!v~FCqu+QK z9;BMunC1ON-?#b+M^jh6;nd@A!)jsgAE#Cp_S_SVnfiF#57YoGEui;WGOAXRX#`n7 zW)wLlgwoL1yyg$3+RL?IVm8*ruvf0WNH=z^`N9>`ls+K=RW*=ZF6VO^NMpOc^GEoX z{s|iEt9d;ks&2ZFv2-(_r=r1u;n8u!8rsKcMZmYrfW!*^?noh*%k;FDbBa-Qhu7b+ zx*gmrg%K_qI{>>TcPGHf*V0yW=lOSW#-L{hI}+;Q_C)hpbZQ(+eTl+P?7^A+&UB&YWXWIrojMhG508f-GP14 zq#I5}-9*f4xBSEkl`A8kt3NR?INUeXw|abX#qNpGWEB1=pjpQZhZ7LD*tf`~*S~K6 z-o3j+VKWlcdH5M2S$Fc$pkk_g6d2#(D=xd@*xn<%2fBO8A3FR5x$V`ru3I%daHzKf zP7Fgd8|aJ}b&DY$4k@$?2ws998ObsUs7Q|q=)h1U9P3-TV*G+_yT)>{F!G5{UGc!q zjj>oXJk+6!^`FO*+gH&r61RsAf;JUIw^VL710iE&S0!Re1mwX&DCM@3NS<6Q8B!aN zRya1YKNilcz5?XH4HxX*wRzk4H$osGh+@D5Eo{}n{l_ji0215a%Kr9JITsCw?I#)A z@7O7@9b`0HRA}Hu4H_eJi~{G}wJe_30tF|NDSwE>zV27T%IP&tC?51SGn_XKM;6WHjs!TI0-){U7~lxh)otvQ!R`Geo=+wU99cQ5OEE zn7NAFr6sm~mJHT!yB{-xWdu&**+dryit>OC`YW%}p->g89IC+Ww#p@I)%sPNEXy)6 zpddQKMHNy!U)#xiNk!sXPp5;bgOrSH^7TshW&M^s*FfSS7my)N=7JHHO^tSjdB;yQ zj7(}tg?|t`Z^pPt{3)P~n|v3-(%UtJZ*K3o zi14C+gTXp?&tl~4xGu0q#5t{gM%U+D!*DYN+U3}&R>);@?&dRR*x-i~U%$SPa3jD( zLFR=JvQp~&4aZ8+XvmLL4Qd@G4Szs!nC+SNQukG#db0kp`6==Osj=KW{ncbl5eR#F z?c4eKJXuS2*Z*Z(*P2om-`zU%sLa(r&)+il+nG6bBIHDqkys*;Nx5l7PQ>OWhvN!J zmjZ^Ef!_lhv1jnQ-Pw55tRhsrgGrENq+01qrJvZ?K0n9oB*byoP3%T`5YCG1TUE;h+TAmF#lgc{eoFrGIdUu%DwQ6-_Of+b z<4E7Dl0obkU>E@2Mj=k&5Vq9-Dp7@vf}8KB&Vre*=pg?wyj+O1)WV0s0(s5 zssPZ2&I4en$VL#j7ytz)qVbvtQV!U$0)8AQ&%Ku$=1|xU@DD+~aI)3bG4)*i{q^sC z_G@vfyTqZsjXN*x%z|6U#xUaoGPs8l;Ih&FTKO2qSVr3Iy6IIm;nXWB~bW@HgcG)ztrCbi;%zW(H^M}??t{vMx zIn&u04MQtv_3y6TvE}^H{nyUVl3$%2>PT%ETQks|bDb!_L&6!a8JeBgn(7>Sz9Fh` zXhg$El}1)>+^~1&fs9LD_o4Q9R7TJL=11Jqpvu_ca<103a^~`ICArd&CwpEzT8-ME zQ_^`%=sf1X$e-}7TYRc>l5(`Y1G${xfx4co+1^ZFd=k2EX(yhvR$}Q?n zDt;}PYA<$fxbCtaJT*O{ovQHQ)$z7}54{rl{BIm&xnG3c5R^(62 z{dUV7S@(iJ^7Iy62LxlA8qEw%5`G<^0Ijf*WyaZ!1q8;*I_LpEBkuy+TA#eiDZPbk zUwpR1c($R|vo(^TOU=dXg4$X(F5Z*oT64;7KFfo|B^TCzGCCGGSrmDW6X)i@z~;r` z$-vm?6OV|WIZp$uRCH*|OO2LOvK><<{50h#Wmlt?Wt`<#XDNAT8m%n}`zX}1_I;$) z*4q|-EIi9U45q!W0NlGZqiKu?LI)_Ke8F}-_}dd9B+4_n z%=Z3XGeAg13+N$<38;;ECHy0Qi!a}jy#kMP9BR{YUP>Ob#v9TazVY5+%8-5%e(((Q z(3uC3P3}K)=E3?4^}jwde|h6gW4_Zw8?$cyW8M=YF;C@e{^yKA-*_@V4dc85_tnq6 zZ>^s%l%`*J0Tp!VH@xsd{WJ9+ykY5zxDYPvonHbbK7{kvLpj(UxoDYFPKBZ+C~&}_ z@){Th{eDqUmO_k0*%b?9AIT7Sjc`W=Nm6B1>zawB4N!YaaSi&wum>3_b3<2gRuZ~q z?oPR-sy{H${ro1sM6+Cv-}qAfQM7ly=ZtJ^Eg=L8QbY`#VKL5v(~1lGWpFVFZ+2{s zMvk&1(sl8={ta=k$e}c(!s}4ti)@V{{RJy7_7(ME{ua;r@VR|O?d9OWI7=U|r3#k6 zHW>}@QyMwems`?S4`EIX_BAfkm^}@uAEkR2T6AxO)OIKc>}hFxnLJP%CJDvETp*+g zhRW)$UyKc0*b_(~42DBOMbTseg>?)W`KJ@P?v$AbDyS2%iiVt9ebZ>D+-}2(SHL3{ z`1CCud#AH&ST^d{V`?FpkCiq&R{upZo`}l|pjBk8vpM|CzWzwf&K~T1x#*GVE>;eS zD9+35j5$zA4Mo!ou(0%PuNK8bTi1icuD`8*_Q9q-ee}^-Y;q-- z%5l>O>e~P@GR@gRXvL^>Den2+#ywG6;YF;77T}@2EHvpGWsGz3m(G$dr7+2I)VC=e z-gNTbQ(v0eDyk)1_`WZ5-j)eVlepoz9gA}3eZpxucN+>PrD)r9zMAO2;;TRDPgL{M zZBbfF!GO9e$%0Dj@hV$Sjz(fmj4)AGgk>ux;iiRZkyt-Qc4j84rx1V$sEguI8g=Gg zB9ro&Gxdk|F?>!BMUXB+fKuJLvmGKCfHww4k_3JP<}LjYh$jN=J9k!t;5spEB&6qf zW^er=boWd5|7e6^102%TG$8VZ9!?+S-*W+$89vKiAn6iogaYBhhV_L#AFco9_TJ%c z)FG~fCpp2fcE=S%BUhKr4UassAv-;l4I_%?BwhaPw0A9xo9rJE`RvSe_P}3#>Og92 zG$k9R%t}E3#$bzp14_R;@TtE#ke!~%^5TeJZu&&f-KTu7`hP#po)&DWLX2{=tdp8v z*k0!!tz@c6 zXiO%h`Z3I$9PXZ7Hu|&OVVSL-Uvh@8dCR6q&qPMj!N_I(vSK)w)Tv4ML!$z!_24(z zK1q{U#JuwOP4SaI{pyjz#*!T9wp1%sGWE|r{X~G%0>$#gr^)&8 z`1MCl?7n1jEQSCSnvrbB9XKW9))KjNY4erYN;RKLuOF!Y`dU5UM+p~=THwuyif-A_ z3;x2ihEB+Q0tHe%B_f~nYnoz#mqziGE%5&l_9CtsZE4b`r?RM`S`u04&C$4K5e23= z?y`=}ZE3kMBw!o$d-BOlcnY-Mh?^ZQ)ak+Fd4S32^*U8PcE5owvzctWy|NSySvqKP6o)unze+g4 zzY+PEH~T(K&iWHtS5vf5T&RV@sH z`=BL(Jz-)KK9=aWBay_X>t8&0@Rp+|wshySPMP7J_&Aw%oJ72{O-;puD?ty61(R;R z=;q&RLw2}79Rf~W@v*#jlVku@OHfMIEv zpCMN`;iCsG+3qIOv5#qNAk@ENcmJyKHK$)wfButy9mYN3e87z(56V{F$T$%N?)<%` zt?H|P5{Zpm$3|0jZf3=QUW=ey0pCds66R>OTIreDHF}8d>uvw5YbxCw-xGxWf%;>l zOBA^uZjcDU$>3qU82+Dxvyk=cDGJj-tQxXjTjEC2@mfB9^nF8=7885R#J*7t*S{R+ zf@GZwbl5em~LSW}h)K|f}7v}wEKGa)`bd<}9q>9+1hsM#C0}vAK z*>v{aRZ*RCS{%QTP$?Bbl>)Sm_$cb9QiYFDuTvHmZ%Y1VcFX!On*>;3l8JJ z24+`X{9t`SzF_`d@~azn4+qqnXEgX_Sh<1`s+!F*Yi`kkL%XhDHZg~w(;^@%b?1k5 z_kAlPK!rI?S7FbsnbiG_4S36f&>gDiV3!;huo(I^B(Q}Pn5 zJOr(0bqG2VAy|km#dC1uWMw5Yf0#kK6+Um9gc`iAy^%uJxuC}%AWR1g6|flM+rIEa z?k$+}KZJ!?^n6;gtMS?#!gEJ*i8;0u#AOW{599#sILOno%}a!#42nkS{e7dHXVN@X2eTl;5hRQ`fg?2MEv zI=DBSlp^GkU0E<1;8`;QFC`L;*v+Br5_NtIqlQ7QmE);II+;nht0#YT0=1TMh2<`` z!;#qL59++Ut|-RaBR$0md?;K4AQ>-?zA;-Qq&rK4_nF?V2;dRyV}#7uCSprSDS$s> z>Wq@(bVuP)b7`W8T;>%{y%QyjG~FJ_=kmE@d(ZEP*aqrMkXuWYz{Lq>@~VmeQTL-t zZ5PrnxSt?l-KK1-RvD~yfswpNLbQ$uf`D*}cqX8Mw+E88 z%!rRzxaFRU-g{FNLN`!A;1mSbC&@-O*BK5=5_TIP0I3(k5b?-Wh_X9AvQY;Dz$rn| zMvt+~(f=AC4s~n-^qGQo0P?sKaiq>);;TZd1exWYeGT!wO?3>S{6)Ko;jeWu?roZ_ z&Jn;9Ja3Oqy(->!RsA_~njHK{{kcm<5)Vw*EG$)l=xz>0HNSZ)f5{!cyum64#cJ}# zL6mv_cApntaqlM5>i)~q-D0q4-SEph8n~B-CEen~T2WNXEs8OfyCrdjKI{9#ZYh#- z4EUZe0{{@~2rUVx=|A|ge1ZC?J^6`|&HXD^jBQ!>s|Qft5?C9ckN0vHv>AYaGHqwI zKtPWqJLj(rwVk)U#R!3&-lPctLbKczl@ z|H99NPkXijeTL;&&{xZ*X=}%aZ-MYLQ4y%lYzzGW4EMND*74c{4&%JmH z6g;wTiUK#h+E*EP_Ki=!bH%FKj9G-Tjmbfn<#hr#{hH3mA#%?%>G6p)mViLE8*vs$ zub2j&e-FI_eE?wveOL?_QgwGm-}bI|ZHx8RVnW={2&&k&hp6PWw~RJ`CgST|_^G@F z{rx>pMqB;+3a?87yX@WaeakncVjHf2YDD z9sVGay)>3UW*Q+{NXf762=j6}$Vy09hl(d}YPX-Qf9V(3-jO2UsbP$Uxx@RBhQcRD&8L36EV>tFmi^$AcP&(a4eZQ5A+)Z>5or>T`I zQ=-}fmKG6}0hX<7%^BtGKfB(`90uD%nKiM%+NrfuwIh@6=fr@m64sVbq{oSqA~$wp zn>~Dz?D>Fod|I^wa6y7-4a^kh2^R?NRJibqJgOK7N|{x)*xrv_JEFxlmqjz9_gzf7 z$msC_Pa%R~ElWWgxQ1)6sv#kvgPQoDwC^u3AJC#}@}im2(<7OHU46~!;cKoQHr+jy zmQ1dO9{(U@^53XTjxYnw$?FN&xe^DR*qp$^(i^5($2q z2}dyD$sx+d@g9GW_2*@}+*QVCKW{_PF8NtSmo@NNW6@~Toqcp`Qxf51(RIh1_O#x2 z;>7_QT4Eg;sDe!a|idDs+{p=Dt{ zKG6+k%d=XAQu+RpuEqBgd0SW}XI@7v(*1o*RsuByrV}4bg_Nm@sR=Eb)v2#ZQ~~%z z&aEUn_I%)HZY&e8L`-<6lt>Xs*or$j=^ChmV+CCdue~OGYRtb3w#+E;8FA?e7eQ@mPY?AE)3V~jz*`@`XX!y z?gne%iVU_EfoUEDKz3=~4lHT}cws#>Ll30ylY%PEalBvA{00Im?Z6j9cRZvQZO}El zBcnIIeOqCDG5`^vPNSNSe}%nJwWK+o_hY#g9k{mt(jQ6pKB^-epeL+(?VqgSFRB6V z^p4NPzWCC|_*;(u^P{n3dnFwMa}MFe0f{90l3H%f>fG)R|McX*l@*6oElo0DUWg@I zx;$9pxulx_BJRIbOwlj^ zM+3zMuW9Sw{ayV7g6~D&O`?J&DT(jo{Litzm`LlH&s{UZ0?G&XtFffmk`iR8_FAOz zh##NQiD+SABeP;3_}l|)^Xn2-H`Nmfz;Iy+45y>ZS#i8KlAXL_C=*X71SZ}k_|!>; z3Aaa-P}{||pVr&!@BF~-56)b+d5ywbRs^-s+~Bd}D_%qN>xQ?!iv;f4IJsfkU?%~U zp}l=|A9+>dxte?z!|nUKzav}eW8L)PuWzE|H$E0OA7dZj@AGAlohahOAZvSC8rH!c zXT@=*zdy*1v#dBMii6CC(US*yGb1rM(oT|B{pJmO){Z%(Ywy3`(|2Ae@M#(f6aGFc zpA3Fg4y&w_Ar8r`Zi~LpQG%s61`@MvGgtT7^#wZTnmPSv=kF0Nu8Y1T?NMjkGirY;!&=hf?Uo!Mzb$WBdC5ZYdV_tN**DSb+UZEc}AI zo_)LTey?h_u?pRCh6cdQM$=xQ>C2)f5EYk`S4SA9p%4Hbw9tc=ydpNDp?~Wmg8Ic9 zG(8GRef4&eW+qASKAlURZA2R6kYXCraOU_5FyP^RLBEoL{=@sTvGay9kwj<+>~{_I zDJyr&%0TtToo*r-;t5q0aEP=>DDJk!YO8cwSp(~=s40%o{SiwRu_6G*m9dbOm3Mxv ze;i&h^yvORAZAr8fh31xWM!!&GF%`^ZXingJK9Twg)+y4q@ZTHW0JIHD@rQjX@gyZ zfCH@>#Ih;=XoeRG>q81FTB6{jOd}MY*gDpOG7_x_w@+sHc0C+Uip2Iy7D^7ekm1k( zj~ZJ>5M_bpE@CPI4ayC)6GMr>ycRp!16Dxb<|w$6EEg!ZubU`=Pl(8#?Wm3fgB7j* z$YX*!p1KtjHh-})z%Zq%W$8u+?6??MKR6BZlkv?i{3rJn$nOm0HKSU-<=}yCWgCrY z(%%?XC~3s)#nu7zwKd*!s61IVFs!*nGON?d3VL$17%6+W&L9PNUdD``ErkJ4@Rn>a zWQ`y7=?+PO1cN~WCd0^J1nN>OmC6*`iya~BpRPM};?zIvK#F@~$LI|=j560mV%r8n zK|kVviz)pjS7O-7l`Few4JT@=@XV|XKQ3J;l!Ivy=3qwY4;GZ`)A%zlmEg?)OwL&# z9wH&jh&q-x5JOmj7P)1Nh4aA8A9(uIy$Tl+wL4bMeZQyb()zUhgzAi`DYFQ6kWqwd5nf$N;JV#UdSteQ8@5HvQ|KjZ* zV91@)=)C?*V!$e;(fsL`8n-5xI zdsfLt*hzP6AX|d4!n-*>SY?Lc4&L@3e|_6YgJU^Gbt3szN3>8(X6n|jQFaODX9WpuPt)5^*>KbAhf=J>K=_Y1#pye#d z;$r{Ug$5^<9z?Z{Cy|X3FuF?661UpxJcw)KdbH#EnZ>Ix-_E;XfepzDN-}bVQnlQ{ zarK|wx(P^o0Ufq?cR1YJ+1+j=QSo=(GO?wCcsickJ8f|`6cgrbNH6ptwBV~b131ue zEYWreUEVmH3}qpKh!A8o%uAcnt8$!~8Pha!MM{a4$WXu$#j`jP)vhC*&0Ux73 zkk)<;i)8<}A%6aGle2=5EmD5)8{;ep#X(0eN8>2&6tTLyH2l$GAF9>Ztyr1@i>PoQ zwov{5@9eLk|JVC=L-ObXIjwTnR%du!j9E)NxRqjTbPo1p&rKgSq>!G`UvQhgAwAC~ zYsi*gt^mDXrL+}LhI$5eRcl@SZsyrjZy{v;4J5c~mFs3QE4yoHnV_VponI&#O^2d@4E zoG8Rms+}*_0&Ky~Ky!!!yguk}DH+A`tc1O3`gpoJRmog5c9>z-jGt`7Vms&v-}!J@ z?%*HA8ZAC6=TZ9x2Pshr>jpqNAWlo0S32yeHP6Szyj|+LMu#MspFi@*eTP2x>ks|g zizJ7&5fm9zJtqN%3ZPzH#=?B*+=!c;rq;)?;@OULtz7)!YKOgVZobd+>6tIj-7On; zkI>~Ep;-hJ2?A&eYA8I%a$%)FZf7nP31MXtx>AdfeOvEg?s1w2TvflAyNi9?_io>p zeZK-z9PM0gs2j7U^(@p>pS$I9jalIx(VAlPL-R1aco7o5p~chCFv1#iR*96% zhf{7UJJ9{`u4@7us;gB^z*@LLfh)(2pv16Fv|5X(tpBtV85u^ZPeXJL^u~`|1PG>1 zc;n{7=W*=D>K2AXDYu5k#|X->5(KD6K!H2eNGwm(Xl#EvM7TjX7D@z3zp%5rGXcRL zpsx6%Z?zGL=GXx&4>{F7C-W)&P+35kGZuGc2eOk^PS9T8;e8>z^a!}gV8Vhp zs3@7Xj#7V^Ed;!=L&7eOPU7IfFtQ4LrQDpT6`|BQQTt3$M*r%B4(KG6~KnJc_g^ zwe8Y`dIL)#UzCDRtl4B?oy!Z1kQF|DiJ>xoC42D`E9HXQp}JwQ3a%x4PbpMC)0nG=4Tl!0%^47rr|GeJglqG;YAF0+$!GOpZ?#6Om1Y z;xN|5(gUiC)mRBv!pbE9%p7CuXR-#n*AoEZn}xi881jz)o#OY%dy7nk#Vnxty#8C( zL7sv{pFy44gOCLzbfKMJrtzDav(?L<0`-Kd@eZkiCP6DqIUI``no6T5TC+>j=Aw`P z?R`)v!2rPTZWE*|qS$ccftgc4lGYm_kkL%WJoC0~A9*+(q6_K!O^z`O5}%$JNy?TD zWA2D%RTk~GcAFE^SZ~ObgJEE0aVPPSZ!4fxKve**2}iZsMHx+wRqWq8{XS8{8n_&4 zz6GhQVrg1N!;%Jx!4(O*I40J-qNy9=$t{w&Smu*;Iu)U`d2K-p$NUVFfrn?(W6dC4TSNdA&CmWhzaj zbLdmwx$pNr3g6MZ?mnMSyoG(2@2=K$J#*Na@J$uB%w1`T!?`-}j~>vn_eF2O@n=bF znj%2IqwApL_GOqH(%ndMlRv09f3HGqPxf`Jj7FY388VC@s;2>*i%RW2Rh!$sXUaBA zKZT#u-x}*=@1_bz4HN_@9Ql8!VgINK{y(zy&Y8|c1k#|+fd^zuh8jX;{eBzpSvWdw zfxRXg$`AbTpPM#_eG}!tHs<92s{fnayM%-^`*QF9urEpXiaTXFn{F>)L0%9<$|}i! zX|nr&)j?m7^!KgV3hjpshnh}x%2HQ>J}l!KUHA`fANv@%`;fZj>lRX>TCzYb-wQS< zJV19X=5v6doV!fXIob!l9X3zRFg;3JSf3f4sJ)eA?|t?6CZ`E=&jsz-Y;*<79vGe5 zb+qJ9*@|h~F^+R%0jyoN3hWOew8gvI`>jwCMDJ2s_Xjj!v!XiW_Laxjw^Qgqi^bbc z|L|{5-6*4;$y}8z6gv)|e*A__o$Zu;$jl-{KxQ#O*-@h(X7hzYo|hjTt3(~FkBYTn z@O7-@R#)8_6j|Y!HDx>4w9T{i6WmwXH~Usler8h==yQAKtL1DodtynaHoD52LEhZq zDUk+eHMZq0@KUEz_WZec2}KHKsp4QrQidJ#rky~tc0c}mt_>?!kMvdA6QhJ2y6wlC z*W01(eN?S5*C68(SU1#zq9_1OV(K9sd6dzS;VOb7B)J=fxJp7)(r&hZsJ@3v6aHtC znl66xrT=Qowo`mmOZc%IY|zLgE0x-@yFPfsn*_!}`D(`@S(=0`J}{X+=1nj0g52L!}4e2fAeq!i}`U@SdhX&oi0R7W7Cc3)30N0wfinW_0OWq zmJ4!Co7Gf3%_KMNH1vcQK6qb=LK15cE~9DW7UKfA2TSk>yT|LX(Wo4%#R}zWt<+xX z%x3@c$jxM3B44NuOb)G%M&EI?zOZ9<(glS85hkMfFt3z)`$yoNn6K$YlfAMXF>{9< zvEqm7S9m?deV+JJo3N};Aq3V9(i8DxcYN-F6Zj7*qG=<5FQg;P50tTios1Zi{Yk&D z|F!LOq4rQ((0Wr@5N?tm<^69ryz5YtT0|KK)%suc7ysx{G0u>B zf+|8^K_SDUEf%t5bLckmJ}nahe71jNA4^Ps#7=H_JeS*5#bO~U*q7nlcHK-wuUSip zfFNlhP(XMYc7h^eBsP}p#Nzb;6_LB=MEH1t;LP@*9&>JAf5~)tcwjs^wW}kj?LcfL zBLx`3|ASIY9PGCP$Q6TUrOS$d|CuJJN0`0et3MF zO)Z-^jL2F6fb5pGrcg!sCo8bV6}&lRTYg+ruOc6tBk-uGeFy&dGxkxshAVPgP|giw zMzx9;mZ0q|?qXBa@Ep{L)hPN1(eYFc{r`D9|88lj(lGTL<yofmzFI^pg_Ev&`bmgs2MpKh)bqBMd=XaGM=s#J+Sa=?%nKt z&HOvqp7{UJT9fYF*JTW{)&%v$!t2^b=t2A6LvOwK_y1wvqk`PEjS_MD?qXZI2fJe0>62<7xO&7TF-V*cZKeAzVn?gyx;pZWyE>z^knG4 z#gRi)$0CRUNd$sM(vqi!v?!|l8Cs8!=n0|ViT6|jy@S-Q*dI0NyYf5l+mARMbp+tM(Oz0XOiyg~Z?BJ! z0Wu`?Qyy_*dLnB0;@Yt*j$VOIND(_AB9(!epsoX$5U}4;Xd2Q<0#KK}kuyo3U0p85 z7HqBW$dNuhv_9EL!DBoJ&;Ofn4aW1cj!Zh^>43H{mM!*ZXMo#FYSpWjJ=V~!%{f?g zP;>kn&uzbtmI1H!`{+!#xCe}R0Az}|pw)R38p#W+nyPG#b!KRApP>P71yK>WKr%Hu zo01GeB)*VoXMBnVtOUq{RXeC?P&urO*ewSz<;F*8bw8U6f>Xjdv!!)0KywC z^mPMSi>c6MRIjQa8;yMUiBKRI&#S%u^=GS)fb{gS3)n*dKb zM>31!^J}zdMB^l%yyL@9ZEed>6>)?oAU}WHAwNwSXgxRGdw1HJrI_?D*P32)c-+k(*-847q9uU|(7I2cWba=0?u zJz-mh{R)T=V!^2~nfHJ%UX2)nmYGS=tGcQJWU@p?_l@}EWZVD(k^|feNHa{fsG~MB z?8z@Dke$H$h@(OhXgxDkLO_6tf*Me`*jUgbc*CG{MGjgHYi4C@Z&MmrRY9GiPcCj6 z2y2m|6$X$U;4BJ?4f<^>HVM7v51~Gxb!j*~2wS7A4d7RrkeyL^&GPu-KEYd9Dm4U$ z>FTW?cl7ulptl*_4V{HP0F~1cnx;Z&Z{Du>U~g;a5jy*b+I6a@mKd~N&|?8iMJ}op zZK87Z99pO7su6!MK$ZWY^saybX5#z#vhVb-AEAxP;Jl;K9L6L&I< zsbEK7*zG=ZR}#Vg!b3jq?#=55BL&723aian-c za3Rz+$_F4G*%1Mm=Cqy|ed5aRy?6iFw8EpNlkN#6_lP4T%1%h?-G^ z$0e`IXpw*-nUm4imQd~QF~ac!5de|bhZ3RijnIAEKy6cT7Z({Eh-`Z3!A<-FbDod~ z#GoK)0+7|&Ip{Z_I|pUY@@3QB_1EcfyE2!Vc@epm&f7C{0elBq(uRFw2tLC{u{%3-MtKQ0_UoZC?J$42g5!Zv0S z^ccx#4>C7K)fJYJd{|A&)H}Q@$Bcw3z9_wL<5VabOhjODs!8Mib8lwvIr8D1ww=o% zJ8Glj_f6YUxkNq_2AjO|8{d4c z&i)GC<2&(#S8ZXiAsx<_<}YZJpi+bxN`m28(9~G-0p$m1M#}<4z?6nf@u2%F&TNG= z5NPYPVd+AkMxuKYTHSnS_I4Bg_n+`U`+5{ zUv%9a(L~9zO|cyJ!>orT0ze>;E{ctcqZ`ZUW{5bP*9ca&a1hCW%ydyQABIWvhU3V6 zOuos>rED zgFmCY`mZwO`V+EQ4Hhz)$XpDn2!R&3D>N0#n=D)PB%#<$ld~RkB0w6MN_z!OI$+4Onj$1#O25Ohf;0Gf}1m8r;VxOEBx?pNB zzB!Jm|Lrq{f77C)(TIo2(&!C+0?ah0(!~?UATetF) zbdp`Ah6;&Q+ZtRMAEclubfb;zIwS#;kJH*fXo%+pvOxvMy(3kZtE8^wdo&fU9c2D& zwIGR!SD_@NB}jfjQ9#psNca3F#R#Er_@@hZ#?mDdRQ%oG{B4U7+GqN8?WSKVMpKqj z|Ar$*$BL94jEYgr0c(K;sVzk$^ukhfB^2)##Sb>YbULyS1K+~4rHD;CQdIx^v!#g6 z>F2rkvwwjaxisCuf^N3Dv0jIZt@Ym+_|K0JuWA^3p15xEqAMf%2nYyyTD-jOw!7A? zKW^*X56FO5)}-FC0?XYLGspmk`YSJ708gdYqg@x$p_9;CyM7V+ERn7hWo>Ipue)cq zqo!0us78RT_iS7-zG1_=bd&~F90dod?if`Wk?ecnESHQX+bpQ_frd5Vmt*G=8SPb|J5|Ei6*&_3G&`fR@n!P9JE z$X`HxYjh?_+j94=%W{&_n46Bp&F6p0znOm@`q+OFV?oiDEp)J>JVysvtc%t{bL6|V zdPcCeUwDHGC303Rst-nT%xyHyHi{?@M_ikHrz~ zASkj^dml>BuykbufV|9S*Ly&*Jx9ozNa98lstb%(R_g5chKIIKFXj;d0kCXH#AH`z zB}vm#f>e-|LbcM*{G14Kn&RkyI)OFIk@`)DTM=)xJUgDH92n5-36Oz$ppogvoFaHM zp@8auU~OO_hHx)f5rAkEgCh1Gj~esCkitS##}sbhdZ>Sxzrc6l8wn-sH=~?%`zS(T zY6U^%_u!Ipdi!$5V3q4Y+HVh3tHp;kRCA=Rd6;<^2@{UsY;r*Sd&c0ux>WSUAegeni8-{Xa0$qMDC zLP;$?0;=Myrm(`&z>eOUp=NZB^O@yZqPUpybHx6NZd59-zx)n~@oSbDP8RY-TuP3H z!oQ76-3h=92!(vw5s-}-;aJ{_Ru9kh9y z9_`58)k-;$F%T}m8hiG8j(pvF{+H|;_CDnDkYR5`qg!+5%x$~<0Or0u^X+M+uiC1m zEl*A`nevS~vWkD{i?)O~;zEyJeI@s=3$KSvlz~{X9+TqZJIfy1i@t=gX-LwS8HpCQ zfJHDKMQ0DRreY9Gk-%bYqe2)VCS+RxL-hz&A*R#%B7lF0rkUu|j)XSWcw}e@eF_Lt z-F^+^H7Tzzn>EF7$PfVn0zE3)r=aF83_=4~Rn#zpUxZ?Ge;-Ql!~ymmHh_S5M#-)_ zKByzg##_2(7XszEboGc|A$mcSz}~5aG{Kk4`iiyekYt#EJfosmml*{l3qAX0Q=)6Dwv2S0R}XrbK)D~y$?`#Y>I5$;UZ@lG4jGywYs(>%2s zXH_-LW@!19r1|Fl$GH;^=OV_qLImCLdqY{~_3RzYP4#d1(hHdxf$+YW3382~ErSvQ zdn+9*4P;KH2O()%r+@qT4+!t#|FY{Me3xhUElj&+9~Cf^%M3Popb>Wg|L5~}Fmz28 zx=lS#2gCY;bjkYOF%m|f;P0`Q{K6gst1dSgE{?MQQUB)i^fYX=F?5{Wc2C2{=^C0$ z`2f)(2~D4(-UqXKbnfepe|CHQYW^U9FW6Br53c#{$UXLG z-yq&_SA~l~r7jy-6tU2#GRD4}O;dZJ`B=4l>_O%{1i7kvvg|wYZ5Y2923{Mc&dGqS z<^2ANLEc?|dU-6jJijzO(o;)shPkf=%+OWe$Yh7p(IEN!xx;%{F{+gjjP!3rNpO`r z_sgfh=LrvnLq0>({R&w0$RKYM!Pgx@cO2}wmX%EuyZf%bYxkx^A`-oESVn7DnxA_Y zIYfTKycIUzvn;;OLU_8ue{By$<}K6~d!ZhP4qpx8NB08@_ZE6b$bn-ztsbMc$I=`_ zR}EpfT~#&1jNlc%R4dGe?+1+rddCa(RpaujE=ea3zA+Y7>)}i;jrX~_3`VO+ZqK8+ zC=yNRh@vMDphO~?Dks_w3{6v`RzgIam%+Zkc))bvXOQ04CU4BLDT8wq9lD@Mxk9es zFZS3ZXV;%GWb{12`78$(Qww%1)lE=Puu|xLl@6&&EJv#+J!pvy_GKYDH0)|RqA*ck zHe(velp)$d_8y@K*q5ntTD0KL%&$qvUZ^9O#o*B+0AVXb)75!z8bKk!kO86(vDhHJ zOAnQ~qMxJs4s0PxZ?&fys*Qk|wTHbJHj*Jzw1ARDNPhx}60o8}M}h4a{MZQpZXAkO zlhEfx;xx(Yld_BJTxBO~Y&KY}1_RyQ0XYdTnA$*h)Q_|O%kd@dd$we?MjhktN|w7= zoJG@!Lm(5?c1IiYu!bm8E7+KV#cZ!9((4}&$cAnX?e+Rb5gVxG&MZg# zA>W`R7ISMR@@e9gJRSp?Nr2jajoaT|s>%gZYBTC;3r(`bx^CNCFfjjfeA(`?C4(2z{?3v>wEYp{vsU-_0pfz%yma zTpgN&UIdFqlbv-n5AA^S8O@iq9}ayh?@Nz@wwoPfZho_9sa&u}DQ??Z(xN2`TRO5Q zs1Of{>2xXHd*~xS$%8%N_;w@;X{!t-w_ZizG6L9eW;_eTc#OLhq_!-d9fhr>p8TKW z_-p3&ksHg1zi{fxic0bOP@ ze_jDMt`Ysxb`%827X!q}&tpNVrJa;$c4rAM<$0c2g1e*mtf-F4u=S7fEXZb8&V8b9 zKZ#tEF+iV1`LoX7DLlsiqU*A*R|7fUv2;qoz2bfc z{&BlIh`bOm+91^sKpUm1`Fx>p@?`z9fA(z;YpSLh0WzvOWRmgud6Wc$JW8`f)3Xjc z#lZOZIC<+Ql0g6-kT*~>`RQ;pmY{VBf{0)<)&q|&4?zormR||hbU8XU7MpnSQx{|G zXs@E8#O%F=*tc8}MstCQO=vy`8wq?5`{``J>Iq+V^OZ*uu{9Nm2T|*UC?^2(z&l}c3e87}&lJS^ z_egYIKr3z8TH5t^{pT-dHDEkVYvt9wGaT7^&sWHR$ERB}N8VeT8mRPk=fZz~9R=A_ z&bhvV;z2Y8>^}_hoYLAr0wp&Ca368zTld^^&tE>o_$qe}*OH;IfjT$BoGuQCQZ%S|u<0U=Zt#B7G^eZOunlcO z&0yXL_6<&X1A>gSlnF*)RA!@(g4iqa*~M2(E~JyGD0)C@qahr!X67`Q7En74F3NDs zJ}xmTfV)7hnD*&6murG>cz&{HFrGt}1r;)ge~*y=e%kMu%pVdMLp7~vqED1P>LU{Y zY$-&PW2mmAC7#eCycizoUzj?k!1zGB0&!PqGFyNzgOI~iDFz+^go7c+I54wzsJKaB zOj*-SRB!5Qwr$vR`{`@eY7jHJ@S*kn`(K&{U$58j!$e$5_Y~f?;+g9B&D=+*9$7yB zFTyckCZFp1Gp9?5TVdOpO-vP12(6)Y2e>iQ_^drWh*Kf*RcL?I_|Vzto$zyWdfaE% zfE!LbWt-UFQ3%nT&j$3XF`G^}%Wi%~pF1z)%2vZKC7mT*j+C`&1?itnk)s#rykN(# zaO-uev2HN87zQ?cWeYdh{|7gE)GO8oeU=ttn5r*iN0v_c1AVNh0O;^hU|3-oO0fryJQRwdF0MY;C^!|q+?slk zRflJl<7I*`phI5NfA7u7(fWD(Ioau{Eau}X0)ISQ=ayeZ} z^mzSR?50bvoLNRquN4l*AQ99e0JEY<$xYCxMM14Fm}eAjW6S|kpgPkhr;@2uwUPS#%9xKW4E^RctbO z*b&~S7f?x@enYR5;KJ%aZUiBF6u|w-RS&%JT68|4=LtBC5rv*Jf))n2vi|8n>9+b; z9#p}hJh3-ek&I7nyM-e@5!LF$Q`h9zD)vXWUMI3ZfOzcUE6Cs_Gz8_=asgKurFp35 zFVs5u9EDge;P$!eth(NP{zpjmJP5lLh}!4y6KHn2`EZ&%w1o$x;55nD{*>h*bcUY&6v~@7VNl#Mufy;mrSoIwHCU@5p`zGgo zFRDU?qQN*>Spl&Ul$TI_k#Bx--;?)nAA)(WDtX6&IQPT@rxvOQu0)XNiw`YN&Gewl zlWsA>o2wJ!v#HYN z;_T#_>Toe<$sk5lMe9RW$PVXgsZlr;dgL?PydFb^eX&G@8CscHnlLP8#xf>KlvV(N zKgJYyp((Pt?op2V6bKM8l8S%z?cJke>qe&6%pSU={x2WHCX-kMogezf(DXRJk(x)I z>HLK5>lrRh)XxUGPYzas3)PezHoVxV047Q$Yop7H+j99_;pAb`{{UKlcueRVYGbTD z|F6Q2*|(w>)VsR=Xmy{AP7}gWA`vc4t-R63|%1jv@~jv#qmm-m~lp_AiOx_0WblgOj6E>!#-?YWaMGXTj8; z59wHz08I;0q+IIjt~{|Nk2;{gf3Xp9$bcC(xc~Sc&dg_1nS`OOPlHyQ@fe!-$~P%W zcj+g$UQU)W0|S$D%j-66Uf4LLt7U(EMbSlbeq=n6psm}n8~S$BZnxLh;Q;i36*{URTgEpR^ zGd0iB-nqpX_D;gwHG4E&LJMF;)T|=<8$GlG5OR;8sD>yOdjv$;A=c_f9LehU-~6%r z&Wx1H;W#>ov6fYoqMceH&OC@a#0qOxF`>%M!rUvl5u!*8y*hN$!AlDf~LXhR`zNzB}rf0Bp2ne)nn-C4Mfi_`+DCQ~y*|G^W zO}iQr4rwide zUjUGI?%`)nFnczl+{5`y9_aW?9{7(xb3bE9lKBkxa?}@&P?R<42r6KnF!De+bp)N7 zljx2+rox@Q^lx?=IZauMBGCe3wH6~G6w{48SLb_j`6&7&16jxhbu$ny*7o&A3417& zFK1=J!p8cWo#(I}O^%MD(L5M*c|-3;TWu~|D%U3FW)?%inSo?5;tdgIq1bn2MJFc5 z0WI9?`Olt$HNtc)GoNKYgt}#STrY$mLR?4M@tY14i>?NYu506_f3wrb(cf%*e$#Q~ z&i)32^c$Sw=$9vOu-B6^{cQb+a3EbUXGFsF;Q` zfvY*j2))Xx9Zei^IU$`j(Ma1jRS?YO0Qsk0^jepL$0kgu{sdXjjloBN5$B0d5Im?e zg*JuO0NCGYd5(q3kBVdAQsX^tfU4i?r+EFay` zm)5|aEA^`&^Wl=?M%*eL9*Fw{>8n6BIF$JhrkN5{}% z6*}d4XQ^dVH1!G;j&tzyOoF45oEdJd7)*k5GB|zcnfSA@)8H`t-?~Fs|u>;hGE&wUH}eS*(F#~h|n4@%f>0cQotb>F3at%jM=(2wuACKLP4^PLdLsb}-a z=n{!~Y3tMd5k*D3n*%74-T>7EtsC?itnMW^UWx1AS)L?NC9^=+}t(Phw)IU4wCXc8xLML%?axcx4#3_Y>=Iem6cYTN)8OPerc zkc3M&qckf0#0{B{twl45VqbN%clx?ZPA-BSlHoPo&aa(Z>R;108;=p?Vo5wY>f3$(NWA;+q#23z;7ynHll<$*gi*y}2gBJ(}XIQ$N=%ew} z_|t(%j|N@kOhLrTEj{ zQ@0(wf8x4{xa=!hoF^dvHTlP%3TTVI;4d$gNnR5}lS!D-;K)^l`vxxg;*r9HJyA5 zjR!sF6&>M6GkW(z7dYe3P8XpNz2iD~jSE|C3lioe{RXXX%)J;vB%UO5xl(2G!96S0 zQg3O?!a`pFjClYBK|YgSz_4k@gd1M>>33z4$rxi;n55t2q+3nomdHdAi1$4^FAw;G z*4sadyrY%$@&HpJ{e;3AWFBUhHhKNR)@LH&c)9N-uMtE~D5|?hs4^`J*}CiSrGz|j z!)c!Fr@T6-{l8V1por|TDnWA_@(yuYeXMm^THu5RfK8Qv;S|PIp&rNI&Sq5!~*5 zT#)ow(%U@5qXyumZmkV_tTV@7b9hq(9US6b&8_#iwZ5OvLZ_ZYjLES?-GYRUJ=A%( zHH*$#ZU5z>99`^rW4EP}xXRP(kV{9jis$`?sc&Rrg}Fj<7V%NS#4oeszR>ACyL$ow zf$NTDECqdV;KpJP%A1C{A^5hMH zsGc12Me@ws>tO-R-FB}N?L~B#*L?@c-UA@c1yE`tKfX<2rwH=-%9$?%3RJcSe?2@i#}fCL)C zlYLowDaT&^o}IOz*lbYcD$^_CxB znqPP4+Nt&98yL?F$Bp{gsq4mqFC}mIzH;llpjX0uBo5fIzV*REXx$rjZr{FRduE2h zKD5^jp#YuIBCq)t^SA$)b!m~kvEsYVWkHLqOU&Q-A|@ENr_-^K{z!TvB=W$XnwdeB zwGS=?&ebLNV_J z3>+Llzv85kvcX}_!+j1rDD6G{d5rgo)_7x3p8aUCLR_$VoN;spH0O?K0YlmhZnY-E zcIToaFZHbP<{xT}_qCS|&EGs|sQJFuc;Bi#-+0%LeP6w0p7)kR{m(bv&s_TJ2K)#A z2M3&e)__CCN!MD`4u2gOd@uktF$$wj17EkVw*~mA3u4Opc*L)qxL?zdhp*O{B09n_ zwjsBa^#H-cRhtS0v3`pZW`Y5WRJWiFhmSaa)L&cwW@ydhgF_)qjE~p(avb3^Mma4C z_i5tt`qMn;vy5&{`@k*zd1yRT$07LC!J$b6EzOEIpZlj3T2RZbRpdt*{z&f?LDa&c zMU;rTHKCv5LXm5M7YM$JWsj_zgO3dW!I&LOm5`kZS!F{4K!f_n?pQp6*wFq9N24_e z_+hmE8NbqfbpBGnUjy#O(h=T(a}sa{uAPZ%jl~nrC|Jo+#@2vi3^1XX#}i2fD(U3C z$A|NkfW_Pipdsf2cdUS7S5#auq`r=*eP5{7yqTbU`>zA$S?s$uSm$Y&icB{yW@q*ERUV zK`@~vyJNB)4}Fw4O3*cXL2~KrosI3R#t>(K9AXw6*fKaUa=1|AY6Oe5d08yjpmUKR zJ0&Ms=A!z)4*-@%6Z-+0>MjqNOqeJap&ze=^t^|=2p!*uHC%?$M!y4=vBvCB{ogNQ z*re>7Pe3U!4iY+$Az_m!4_kzOOi!=hxj%U~%@#3Dhz-=m8(myXip%TL`wYL!PB zaQ<51IWd;&+>ZE=-bZ-X96H62XarR z{RH9+f2{#%2l+BhH2~HlT8wfdDy-l?()VRK!tmD^2L0M#iU$#q>Ph8q0#PJd+yH7W zDf!xsahQjwg%efUq%WB}i@&kWK%L5Jw)ch<{j`f=?%8aIH-giLIt zKP?#Q?M00cHV*v7f#XjeRwRdXim84_a;cPHb3AEEhyM(%pvkGP$~N?zb-w=2d|%ikrj;n1?gC)Vufe%=op zo#y58?A`o$R~g?{6kDqa%FU6T=2v%~i$#O2v1Co$&<6xQGCUMf0+s?D%83STTNW7{ zjPSyMZp7#A7!HO8@0jDq#}i@_tTD9Q0Cfm50Mg(H7HFq%mP?9>@yKvMlC9wgZr^o# z*A-+f`vCawI{bH-OO%|97Q|4AhY8UrqoIH*w8~`aNR^5?;*&Lx&gwm**bj-vml{Bm z=|7<ZcxnUj3gLN(zk7nnkZu=Bm`2{FMT3}bUu|J z^n30Wl^qXoY%y0YSCV_tryxc};+jU9A%2Tjy>xTu(}>3>qxJ-ltGF6|t5rYAzT*7TT{Xlx z-Od-CKR25NMyEq|+X^*1oF(5%hu7wdU1q?-S04*4((ng|jEEq97hBuKPDP%wa1Sm-hQ%o^rF zcB~;|5bKtNBWK(>1R%}_)UT1InO2Q-e%k0ee7KM2uh&2o*X>QGy+bFC56Qv77&M_n zB@Qe&e&8B}NWGjE4r>59vxii4{p0j#4DAnTi*;&rvYN!}DIb-&k@`OVC(sv|hqla7 zyjA;wUB&&9tHa77|46!*VZuY>u`9pxw^s#vdIF*m1y75Adp_--%nX*V`tEnHG7EV> zZ_qMlZ3q9Tu$5!WyARbqQGcL*-zRfROF1>v9TbEuWHP%lwtMlDSh?n~V@p!NzNVXLQqgT#v2gChF$b?lm1rk9U zB{couyUClPknzJ?>NCRlto}MMeqfDau3g*L3%OHc~T{;5^7(L-^$;B?#!6av>1{%mi6>Q=UE>-qCY<==vwH!bJF6z{AhXSP^2`yTYNn5jT`c)74drwnqz{RloES3T~Q2&EiDm5 zi1Vg7pQbA|volpG_FePT8|z;ixO;2=XnxxiX8}?`O>+Z$OuWC=)OgHZt5}pZxl@6SCEfI77??Eugh2vypgr^#2MBL}(-e`nvMY zUETbAS^$w8A{9LUI$=yDfomskum7t4?FS0WyUH?Ja{xpLx)6{M6D?%$)q|S~A0wB4 z`BGnYeHIn(;Ll*{-(GWDy>Q=dBjOc;y}iK=_us!kx_;af1jh?wa*g@;GUfyG(wvXr zYRE9%t45p>!lnSPE-!>Mqd>a_{=`9pMSzAI^T+%J^I;%+89p^0*C7g1?=hnzjq~6^>5U>lFEqi zcc^2{HD!f%Z_oN@H7Z@jv@sIeokN47qr2Pq{5xcr1RwYg^IELrAQ{Gju0LJ>Z{In0 zd8>;#ln$n5h1qcK(z(`45E0`G?R${ut^bU=v=r5sxeFT_pUJhl@-LM`PagiM$pfy_HS4`wD-hC`|2P3 z!sA{+^LAG^e2MI;f9ksRv%tFoL5W4M5s5m%lgW-`d&;%>?bG`XY^{I&HUssqI{L~2 zLP($iOn=}k;g^q&^!?;)Et3Khv|JynzjWO?a>u%LR5veRuu*>71r|M57r66_Ze{u6 z!qZQa8IpYH>8H^!_q@&w~|AF&S<=lBbwQC#YD5H%XuQ?aabJIM9 zgOv|LpfVkbxT%nxXIy5;Em>)3Ux7YD)I_JZGYxk_4F#+wQK@5PixEk zN^B)GD57<|k&}hx@fc`E&{&Z2h!Wx~CZtkfIN*PzWC2}{$ER=FUGXJ$W|(^$YmCs| z6+#mB>Dd>sPMdoleO^70&OA2FRchC+nz!a=>NqfBd+{P5w)#Qs)l7EB?#F*zNafSD zh=m_T9eqv%>v?=~A}$#=`etfa7nnu?)MKDtsUFNqXzTlVGWl;exvksrL$S>paZ|1y zJXi&5MhLZjJOS`KA1FnE9S=vt!?vG`lqS>iR!Cu{Sj{n-&ca5P-)M_vfgdbLK$04C@C~J9PatyJccj zFfJFk3<&c0+9s1T{!oI=2W;2Q$-3}0wQ-voo1z%nG5Xc>(Eu7X=Wo?BPRpiud)w9-R49UC2qv5c?LAkBBTixsh9bj| z^u@)D7Y(~rL`s3=V#s%1h4g&sJKw3l_5j0Yy%yl{)N$z9y}N=Xsyh|yNIszO5fTos z5K#oZvU_)rkxYVbHDr0SJacjVwNOyMy6*>*D5BsLhgZa13NTec1gmg5%S?QiJuCq! z;6rpYziBzY|D*L^-aatVw}xTYz%E|Pv4P$z$0x5XnVVk!`c0XI`3!1`d?3h_pILC0 z6*Ql$O^SSGaUpZ))1Nw&n4UuYmnoyEw1odz*+ktk-aGWEPan!GEM|CdQUi&Zt0(^s zJ_k^a|JiwVCb(mk9WF_P^ucS2fFRw$S~{`OqKTrQopxxeX0N$EX=m-N&pU}|*Tkrx zCLO*kcwog+C-a+&vfhVgm_|+Kzs7v`kE(?A zz`3J*R;^h@%0lK4-YmWI+)MgS_C*%%`ozWYiRC;k9tR#3o;sFT7kmB&_#dC)k9YNU zO*ojSRsGAkJl4%1d^Omx7`7&z1_p4j1}@xH7D19p&oCWb%-vN={p~dEsnr}{nr^wB zQ}`8{F+<&~9<3iBUu4+16=r!P*WXP*agLy&LUC{`v%)LfFaPcfE6mqn1k_f3h(Gz! z#@TSdRYcMJUWAt`(sKW~x8A=v*_{Z3V;a|{=N{ks{bSK^A&n#kGN67Zs6o}fUz3D~QuWV0 z`5v9~=!MeS&yYRQ=!;LD*>`+yIs%uN8euze2Tn<)2V>b}aqCr??jBGXE|1jz<3*GM zB8V^=f)VI5sd)W?@ZtBF{_!(1AB)Fh{Y4^Q516*%N6C0wKb&!Tlsgvav+ZoYn1+i5 z5BWj^yMFf8`mObUyt#gh>mNHN+6P*WGFTD>Y&H&86c48#HuchKYmG)K++lCdVjk^< zosGE}%xF7%;4SDNAjxL8HNOzi1HSs*xp*o#PsmItohsZ@{|9B)z#ZHBCkp!)#f9!D z`S)K{V<)F|Ra2@MIj`#Xg{M!(YQJpTmMHPs8i+(v7oWLee>NVow-YzeFvlEZgaVRh z>iEMZNMzO&!{{SiKpGnV5#&s|gfxEJja^-o z@#ldP-m<616YUR@?y-|oqv;#w&SW_jZtpXH^VKoM0D&fh5SJEBdG~GGx5ETS6}>57 z05EV=K0T$3pE)y5KPHk5tF~Mi{Uw(syFMEYe`@=%jz|r;jUaVJBCGIsyMAc!KVGFnjsp8C=^>))@h=a1j`qf5JfR+@r9~4>XK5#lcu`>&X9k}xcLneGITmSK6WP!%A;MMV=p>I`LG}tfI!+BwPi@H+qp_Qh?iodjSp>-d(ERuxCC5X%j=UI7Qf|xC zbQlz`3}2y%7F+RPTZZ8)M{8Uu70gEad%Dv*ZL0WI9D9Y-J;CjzT=tJx*?56W6t|Ay@TWrNkEHE#K%TP zhK^3JgA*r7s_ysOr$3%Z2K&Prrf46TczgZF!Dw*A4%wknfn;SO6zjjt=JBUJf)7Zb z{&@Y1Z)Z}fu10*`m1-|Ciin&_#1rnnQqv=Nzy9wYU5kmrnQ{UP7H&+Y=ST|uc%k3E zg-w}PeZF9I`J$s7kKzwMxLa-8I#>p`08;GVawPk&;G!cmCMf!4-=ePDXAXe84yzv) z&0o<2ekC&3BPEJN!}!Qa#S=pp9*!N$E+nyFVIiM6cRwz`Fu6@*+jAwqeo_Ba3PfCv zj)cQ6d;oLvPgMI)G9#FQ)+BUJ3p8Cv^xCFU+Q=g(EXO4Cym zFhR{ZTJ`+wVg!0AI)82Z*75l}Sol|cH!5ST>38peFh;R>>|T^+zz@c#@@R_W^YtHD zmo>pMgcK9rMh6;bSjo)g&FIy03T#Kv4oJSFP_{$E>rQ=*7<21Tv%{eO4C-W+%2z{7|RR-E>!j0ipraHOiX4JQ?> z8gb9N5uP~<2?MVIj12*d&8VcGd)Xy@;kccmDRD~K0hw1sHPqJ^%00Nt6T!ZKBoNJ( zz^->x1%%nn10XX*`&E0wDPQHHO@%;FV-@s64tV%TI2=xIe0Y1q^99%io$Cd=lJpLp zeBdPD0o<+<=Py=6xpnJvz}0xe>~r1>RU4jA(34phkNMDt5LrR=H1nZ> zOVSv)Bre-|o8HXX4PpuOuT0dn}WL1B(7P%DT|5YrosXP}fHJ(Hm#Ck09VZ3+yPoozk>L}ArFhz_MtNw3ump1PisH#G zro7mf^O{#P?Pxe!>gn$FdZ*Wfp*d%A zN!b(g4}uuo;|Gm0n8xG~!)+p)t8ut~AP!X&Eyc%r=66?a{RV2p#Nd&=xAl$ok1cM8 zrpkWz4QpzHIUP;_*a0{#9v;o_xUKgaScROfxPyGRy--p z`04G(_stBBR{&Pi40JC;BoM-Y#=9PG&&Ju^XI^>m^~GYTI5V|&#`LL5SoM%|ZAJCx@i2eM?v4jb^-jr zUN44#QJbYPLpYjvG_B;(RjY?isn`i+0Eq3`2Y?R~(Ws6{^P3#{(0LUJy;uajb1nb} zGQ}7E{M^~qk!mqW$v{^V=c0#$S{k@BNqxQ-{#jR+hC4njF(nWIJ;f*II0TW+RTOw z4z&SY?l$K9>%xtwu54~)Z8@g;vh`?Q7wf#KF`fOhLshrSsyjX7#`UrTjnaoz?ibTj z(&2^l9_9pNSS`Jyn8*bX)b%1Fi?lbHo*!y+goNunC>nc>hm5M`#20Q7J)LV%!XAi)Rd zDHu&fld0^$*n5r!O`pf4E~o!K)1uhsU}$V?WVqa2$Y_8|){pPlG+R?}LEKA(ov6Ws znwkt^C-8VfgFfTvXpgBg+C)Eg|0AE?fAY&8_*c|!!{6e`FG8}OGX8x3fmV1coK%kj}*G_+;Y*3E(kt#(vP zRY5gDH)(L-qL-89mjm51N!dzyks4R}vz1iTLX{<}-kHp2N@I(vr?2{hQ(!Uzl_CZ~ zl0s-PlGhWqLVh9lSGM?cpFt2+KvkQlhdc~(tY$hPUPc-yEt1i(7tQrh?t0vl#*g-$ z|9kdJkl9+-Pa&~X9-0v44zXxB(`^B2yrTTJ%{N=BmfV^MSFox8?L!pZ& zq7~Em3>b@)D0Yh2zHBt)^+*7)LHs~L$0!y}v`L3J8B~G~i zb~xcwHl1dCDDD?!FE}DRNK1l^n$`y)COxKm<_l31eX{8kz*M{HHM)kl9Gwpc2*(#! zVm;LOFkl6MjvP&h>5*WtHKW0-qLm}LSUBOi!Cxu?fMqLG;nAvfR?%cT*qhFvt$KKV zX|nvteu#*Iay>(kWltDH(Cm36!U(<~{&RjTa&s9@u(d*us%(}xLyrWKv>8JpnMevo z%6IOEAU=^n59se7xO$VOdgOv1?X}p7Y!Y^M0(_QW^FmGs$?TYpum#La1@%f4Zja!W zhq_@zj9KY;9;FDtAgcT_Zq1a61C)D`GJ#GYw*;UPEr<~$P$f__DVm6zsc=k315bQe z#Ikud4j>LKPtui?#92i|!Q>20#zX#{XfLbI&=}&>!9oQE)V_So!^62?x?=Td=zA=^%$n6}{1S5!bQ5HSSZ?O?yV7B2j#DLr`Zj1`THc5vX)zDCZ2YTCvHVA8q; z3rO*RIn5Qzj*B~5x*3k5XXCpuM??Vcp`I9^z%k8X59$+bhS_4r59eYQtXSDk@qB2! z!HG=$&UiRNV@EU*386tA1xPD+fJPEoQ-N}$deKG|HNSM|#Vi`AGX3K$+cWJ8gDpZn zTc8zo&_r+n6;EQ&!+Lzt9hGGFpcRQ`cbwY0A(x7SpPNFCveVVcErXVZD1;Trn}Llo zqzm*Qm=185;;Tl~=wuoDz^0kq0DfvAe=N6TtBSQgi}sva{eN|jGIMaZ=CKKgj^9BiFmwdd{nNKE2CFEwZi)j zl^4R9!}Qaavj1{*C6kZN5YijWBubu;Df9Auy=gKWh)0rzR1(WYo`ihd0_^Wv2m5;y zEMP~Kv}NPD5cwh2ktKXj^MXjf4fLpV6VH@o&Om(*1%q$?)oOy=zn4k zem(Y@+E0#0gB__E&~9V1u_9JkLGFrm|Lu?hccpew#-z?8oN!uWZ8x_V`s|+BL6CA_&?x=(HEp86p9qhxd)^teM7fbs<-;#eEK ze6r=fGndn18NW%Zs0I^~vlQ8Bsy`6al7ZQdBHm^7;^#aYvz;t){0m{W1+>G4NbXV#7~^XLAe#PDlT@(WG`5Z9}l4sra{?BLwm>R90b_yxgVZlQigKl0V_Sg{Ze zDfX-LXy`yURvLq1T)Ulp6Yx%7LX@MSyQ#KzrRMk4FlSHv-kaWk_4{pG`|7jYByh{y zyS@fAmLpe9&C;PW8a4=h2UwhjPJw>uq}^@W#Et3!9E!}k>#TLy5Kh>v6^M5~fZf@u zDrw%l@l4ZOO{(9{oJ-@oIqGbP!ci{J%8k>%n4VO$dmo*hnH^hGzKUaan20j*Y}j{_ z=XaW+KxFBt6(HohuUbJ%F}kc(QB@6w3xv{3$4p*B!Vny*68Q5(@>DRq5(Vl*^9Dlb zcI#E~87nI2ucK77ttr?8EXcQL0+UZI`%8cZE3lC%8!Ncb;V&|;VYJXp(69 zj(mQ{ru8FH(*n(rU85Xga4gUgo|#O(`%z336=#?rfH>Q8ci zg#HBgU?+u$tbQ~l3u58eqHZxCjjcAtqFvcQk(@2d)saXyVnD5BDuPWhY@XS16&S_z zz8z9Y&u3mIB4t4xVO80F1!#E@aq=1K1}fmxg&KzWnnc$h5xhx2JED83Ai}3jq>-SU zt70!hW(=}oI&%p@VrT5|Rp7t}zp&FLfCdea@c~Hz%;e2`BGE+R1pI|HKnV6+G|+#; zK~3XP@(xyAhWx;rH5Ci>RuTWZE3W^*dZ$J<`)$9Ccq;(aoPf+JvLHO#b3-&`HDagt zoVA0JUuOJ4Gj#DGJK)Wvy_#}q3Jm%u<7>Rqoo7(92!3f!wcvG2jH&t1MfCNHmag*_ zM+(bT^wZ(PYd#u|EB>g)D1H_D&L!u6#{PnT8?vge$BeBe&ImZ|sj11~a^kf-;^wT< zvG24C$d^+M9#FM)6=>6oiClnC~5KZ+(a)I;}Pl<*dv0}Z3Bv?B7erX!uUJ@*4 zAbW}%*Kb-1*-I0C-&IjqK?oQd->Z~!x6L{}wIL(mkK1=zVbKCvm19Gsn;92^2Cm%I+WRe^4Z zMpMV`z3k{*33Sq|lDbqB$7cifhRMb8Vls_P8c#WYop=iSXxC?GK34d>j*fib_c+)= ze(-x9yEs(e#QutZ9NkOb1l`cE3g}90uUqhyP0in||=Sj2%c zlebJUE@9THi{Nm2H^+i%_g28QV8G+E4nw}Vuo1JO>(u#PPUwN&xcvxl57+?#eT5Xk zkJbb_S`|c5#DJz*wb!lObZVP{HjTOh(h71cKiD&t$R!E}NESp9CMzd~QHN5}Rl^7* zBz2_F?T;{-wGZk#7HPOY0&aY)qG+56fo>1032mD+-`XHe&k7)}&xJw!aagXh+O zUdAvjE70BZ>QjYuEUaq^II)~l7~C&v=5prZ*fkd!+H$upsjyZMO^L+%X6|DCMmBF4 zI*R5<*uahCR#`6hM`9wIM=_?Sq;i?iK*sMeIOCv=oTEpWxpgMh8-MfG%|P(s%A(d? zn0S!z!)tFRrKz6DnPtGn0(SwY6W^tHhSwRs1ILpnfQ6vAu|)O_PW|O?IXd{rZ!zNc z@NYMY$9Anb|M%P**e`ayzw3itXp%;-sWiQV=JIF?WD8u0V^;ebG*0JkUmaeGvz@_E zU9~+?3)gX9+>6p3i$0vyi2GqFI4kFQeAebSYCZRhqd{z7Kc`Y>%*>qHHipJ>K*b1P zMSy9EmS&=q1&cf+6j=%Zm?=QOd%-G9YeQvqdc2Nt&oIP5oHNQgvkbE3oMiU447!J z2_nO_v4Q)*Tp_^E2|pX#7|gXo@BL1N?w;9QX@zC(^?OW9)3e=G)z#q!l1C*|!$BAjIcT&A0 z!=!F|U3SJ7BKl=KvK)lvDk^PT;ko(Ea5jXH+7B)&Eu#x6q6+;@mf3j~CY@geaqJCm zVwpk#>@mn$XM(0>>Dh83BLm7x~(?vUmyRO_1}m(>XnjOLZ5Pi!NX47)g{f68E&?>Z~W`m6=3UHld zEV+N<-qpky;FQsyPGX(=TNktc#C!p}+vgFJ@)K3<067*@*9OvFvCa}hal%QpSMH?w z%aA;ic#&%*lC_LHi4&FbSDZh|Zqxx(GT!t$@3#Y0L_WIDbLEBXdj9$D^XO<{_y?4j zpdcSfxvi%C0X4ge0M^69>jq+LuVhR+@1*tg}O#@NIR&)ab`wQ&LVYBG`{!(e1} zzL3nP8!HvoydfRLDJTf282+y`u>o$JEdPh<|syt}jOMIhYc$ zT6DC4WN$#8P>r4OFq|d}02t9&xGz@+E^3CusQ~6kRDhxcxVF zn#<;%7*Ja;L~X(T{&J&OizHF(2wU--fHr;2YHl_#o&-|VuFQAz-sG+eBzOd~ej!fv@Hlu%}1Bu6Sf^_QVzaj$r`X5&UcZgM2q{ zaUenBC2f8ACeP%}_E6wp??DOU-^ix&#iKX>!HuuyXe*dV)$aJp<2O~a+3*m&4Arue z0v(H_D%Ua8WJnmx_r4D5iU}TY6_ds%zsNF! zK*4LlWV|;E{xzxGXdy>!G7*rj@@gi0z{XrGX@n_yVd~m+|J>Hb*z90xg-R3j7&FPF`ZAW;sI~s= zwha`0O{P+5Y<~xktF&ZoGHIf7N~qjm81pq9$eb8<6iipFXgpIJIB$9+%!9BAabiM) zgicEUI6%UX1CZuEd-09$xj6?YBjS|NJr|$&8T%~rnw}L0ZDcG`k~ zZlS^Y-xA-^&zQNA;RzG)%bmsL%NYVijwrR?UaMZ2Pjgbsq@EEFA&-sq15n?P6e=ib zR2XeQQ=k0X@u|}0#g#eGXT**jyXlAZ#?Zh&T{aI*2doI%XwEdV zW+a-t>G$4$)4d3=QEcSR=U@BU%k-e8q6G}hv51HX0Yz7|pnld>tv^d+D=eAuXlBD+ zq)+6&a5j@koQL&{t9$*K6DNMk{CAA+LF|8Rr_5P@-fmd%cQJqcxr2q~3y-I=;toIQ zUiZsaeG&5)Cdd=0?*Rq~@q(e}BMBTV^qEku0HEBitD;Utk%le2`zp)O*HI40 zD`#ICj7y^+r2%F+%sHeni5S8r*x}T)ywmAPZ!Z^LW;)OQw}Y;7$Lc>)Ve+M4QRT;{ zf7NvvtqoYeAL+TJ=TUU~6F61WCYXXSNu8G7ox^PVqyPK*K9aE&nXerFEW8bX+* zjweF)(qR()>qO*;3)=0S;1lSp(fX+(xg83|4;@JUXLDsGJ*}e%`HJOj47*$^k&qT? z+SEdJ?2138YRRa54O!%HSG3yLd7GM}NNwuLRI@f-E`XIPR3pa7?gi0UEupgioXoT( z6+t)4YXB<)mV8hP>mfTjym{lcQgvudmfyB-n;9^(1MJ?Z??eXAucoim_I@F8sZ z+^_6fsiHcE4*)qSbDU%Lv+RzG4qjn}6Iqt+s}?i4#4E}o!#p^3-E~uj6-wlyMFPYx1bh{n3vD1c#PF zJR1YPZ8Dz8Hz)R0iFZc^8hHj%2^$3WrW&#tMTvwGAOV^Mo<543AWa0)5yh1Z6)G#7 zS$}ZF$fJ5))?qh_f&9oSmyV)!k0Qv$Krl`qM}f*vq_JPB&t$Fo0~^omGq=e=iVQb` z!uY^QUnQ9jXLxZ+Ks{e#^1pyw1|; zNkd4?|LGO+VOyeuwhH5z#NKcQn*LziFCjfJ84INso_LOV8fEmXCCHQmuUKD`_G>6;<%2H;)x{D zQ{+XwMgGUbeZzOWoy)pg4SqvHJ3hIG^+8+CCp*~&T#P*23n3ryBVuA9ks!$EY9^zP zj@f8_Y+pjb1PW+lRs_O>iU06Rw)jvnnNO{Zk7qQ{RAP$ZIY)Dnr3;au&L-ZOiW)%~ z~^3QPpA;IMHZw3!sF6XiIFniXw2u z@XW|W^E*^b#)kf_ud1r7PN7_!_=f~1L|U3ZQr;T7FFv}MyZ^}7-d@@9ipkg@3Kpak zVm1{J*KAJDY5d#)J9*XdtBxz-n`X;ffl&isY6Mznd>Qm>0GoXYJ^Hm|e5?-WiV$+* ztZIg$?@(wUU8oVTGnFp9_y?~GTOlJCiJ)p7E16*l^et0~FwBl&wAv@C$t1a)6i*hD zqq;b<1(><`K?x+ueW13-j^y4z^&LE?SS;kJ*R<}5A+#(^3h+Ep(J1%VW6@i0IesA5 z8zlPk$`k+0eT;c`&zD{O=}QNBUavJFb8W-clN4`myXMys7vD_;kgcn?y0n*nRbkLO z6oS#&B0It|<_ZjHTI#;3O1VixwmfNaFM-p$4q@~gKX&8!Q9EQt3_~U&LqcF<^(~29 zvcPCItUp=gNKRLY!M{Yy0By>#P}oSDU<5{^7{UqxLRp;6M65(K5{d>DQW2z}QgfKNHKSL9vPm?LR~*d2v<7n)>aJpbmsbxyk4uuO{%Sm@_rsS%jC zNngZigoCjH5P{(N+y2KinWO-4Q6nM9ot?d&NGQ$&8S0#`u-|e^z z2uTAy3l-ETOWZLvh4<0Dibzp;V6IP7WTaF;?tbe_o1Q})#rH?ZeEz=Q=XRI{$=5K{}A%r*+PA<;J<`5M}Of(w$*O? zuWtRl=-%3A@B9CTy-4bvxUcd*hrPJa^AIH7u^0USx?exw_q)P$=(aD2E_21b>i`!= zWDVY*vrb+-bUj^(0t#bpPDMmJgz`}nCg8@60c^kMkOL1`#0)u>1M2>7L_-4kFSxou z$jo3_$j@H*)Kj3ztsFi>$ooGyunzM68G-*9L8@r(+TBE-Hn81@N!Wj2f4_+0P$%Al z?r;ei$wK|EEGa1>4SRj(?dg|z6r2-N-~orr;bg4*&8NZ2H`ik26McmI&#(DP{*U7; zp&bl<0k~Jw4&SJYPv4;@>6qHidLjz|sd>;djG?T+^S7~j2tfnj^ZYGieNkN@Pe6g6 zVyw6Hw(cpWGvPUEAl>Ypy!P#r8!jG9C*Yz+c9l8qBU@+SSbljgd{D7!vV^bU8HxI_ znXF1Bpr%^dk;Pgz4+r8BlR7JsOyw_p#U=Yj>Xq~qz}Fmq8&4|Q z#1Ti4&xXSjT)93%$Qz#iD|#0vI8`J+FWw&A?ufBp7u8O~u;&XlQz(LS8~^BZ3TH_IP?sP*yZmR>9)%Zp`V zd0`S3pM&LA;LUhrbs7$q(-N>ebD2AfKmr5){~GcY=#CRlx2_eYA*17DW}uh5TMXKA z*#L&AA7ljNvWK+{$s{xqInG$aw&Km#XpZ`w?^Eeeu{NJBl^QYvcOZpAXi+TOT(=Jk zDCXb#ka`vUvAgIu>^ub0!NYd_XHPx-N6hlGuLEf*L;C(Qsd%hEpAHp}9p>>hIR0P$ z+k@BLbH&KOKm*Yrgnv-v)%w7@r{ka4ILcA%#PUZH^Y5m1vwv{-@H0Emj>eL*y=s4B z;QV73UH!!OCnlXZuCt%vJ8$vF^rhH|FaiI;t;Abx|ADOlaYL*r`C;x>3gm2-%Zuj$ zr;?30!>mDwY|pQ=`64h)fa}2x;>D-ioo4>xbDrJHIDu$~I@%!Jl>;= zfC_;hRjE*jK#~j|B$eE$gCTi$C0D zLE!gAGgT-_m#HGZ@s+dTzOscoA{pj0W2$)QGoQJg7mJ$5(xMeb{c0dlvxwjU((s*%?grK7N&EIU%)hijo9*@5pu zSRB>M*wNkhocFzaj{AvSp9A7hC#f`4$d(Y~$7imK$*)+u_8OKNjuR1a$3t(;n0wIAc0(!q7 zBdSh-Y8gg0&G;o>R)Z|JZ?2Ti*aOtkfj{E;tHPFq25h#l^+JBvRB1TdSKQI;Y^%CSh?roWGvH*aN|<6D9{YBhB?n1q;ti>z@Rpq>CV2M^Oi0o@gDrM72;#ze2}Si6Y#d*>u6xtB3Hp zA{dWR0EGf@QOj>!-j9;Sh841q)l${Nj(RZX)Aibb4L)<4O(45q2*^93%Ea0&@Ju^L5xL%(lR^I-OvNCUhbi~+q^;{HaBFx@!|N|?#7V_<-w{Q=6HG!f z63ow<9Hn$JfQ_(PB<^sGz^DD`E?;yk0^Jio9 zQ}-H1+&1;^`EZkGG@RZ%|C)2@zb5C>%!$8q)+l^!VkP@qL#IfDBt$E2k&^4aba3$e z1>%QFh|ab~fVJPjQq56s{xSAsh70Ck)QUoL54r+abj+eoQVY+3?zGuA&T*E7RI#{$ zqXn%|pBWr^)mdW&zy~3FNkIPn#sBn&u+*=ajX$BZ-u@1jD!wwokNq{@(f?2Qj>ukA zT(cKByn#OMud@xE%p3S-U;I4Yz?ZEjP;+<#J$PQS-*oW?(!b`d`QN}>L*_Yp`gtaC zC6BVEJ-7c3&NF}8V?WicB497;qp-`pr#_O-xvO57}6Gb#AJ1&t@B;F_$hVTE%jvXu0^Ua$rl%+Dl z?8~V_KxyWCOP8FryBP%R5OxGaSEN`BsJkLT=Y{=>z6MD#1B@Jw1~{Plz;*_gA$~wm z5I^rq!z8Rtgmnp|VphFx>C3I(Z$0_MpP_P`riICo?fYKVpGWweiG!gUY`P%l6JxR2 z(c$VbmbQ#cu6fH(a^=lqAHDuNAftwrE=89YFHEM=X_g6r(p(o%287}X(e4HB-aH^h zqv!||Kqf9(VGwJ9KMZa%I_8KS-iw>VC9p>kej5Yw*9+-8bAFrWA-B0^BysQ3EHL532tokaSO}mwsDFBV-q0I`aL@{*YkixR`bH&b+C)KLtyv#D zYwOmTS6mvfhU(WDwfd-u+mnx-IrLbK`2_!U1+_1$>M@t4iaP0uTNgQi31qyah@acb}p z2!$Y02=cjYHEZU^8)x+FhO7diqCvPZdn@(s-}B=I4B;aZDww~ip0j(dCw5=X?pmVW z7>9@3v=r?iy<2BPR&1O9#*3+u*V>cj%rYi!4LeTPR5{aEprVb@N}C>!xR?mrp7A7EsPdZ-Tz?GA8Q{Xf|`r-mzrpstuQA zIKfGSoNPkxxEx^$fC4OkCNbq^IEXrXW(QIoBv|9D9Y2nQXOdTI$0o6Hc-fmSkJG)0 zHN3SQ)zeM^jEwq}%oH7JKCA|pcQ2n!z5n*~P)1m5??ZWW%Uf8m&?V!k#NyV4odw`T z=2Jb-Qcz-JYS6)RF$WuE(NcMz&|?Ug9ng~F!OS)!>?ODCYg zAK^7Pzp2^RC_Htc`;94LZ_4|jpY!dpKAG1XPv5|-?*x4TJUh1b2DDvRG<2O zs01)dW>J-+`njGutGS5iaJ%6IP%Tx+aFW;XSy#3UP z=OY81#PiFaJ-|%8P@37Zsha8Q$L0hIZp91aoDV;5mf6cQi*Ltx^uiZ8zdc`_Jo9PC z0P7;>L@RyLWzM0m^EYijqEB{zvR=+K|NhjgTR&}mo4fA&-+wI?p+>=({Pot4U;FIw z7aAF-I^_8i@Qz`FF(V4WWq5zy(dpDB^!99hkt6d0@&SkO1q%_}fp|$O56Cxu-meOK z;?5I4<_pOAe2w^YZ6lkQVeNgS%)sW?F?Vl}qK0h9sa5>%24a zW+aqi;0}_0Lf^sjC5K$K^B{Q~oZw&3zZw7E&b3^7zbjGXU6TDPN~ZNvZSK`S+`YZG z+9-`x8YVzik(~kVg&vH_#9sqr*#Rn7s`QWaj;B-9TR)x(+rc=+w0`R%dhX+P4 zyp+1~%MXR&yr2aGpunJR!P`jmAWwzll*C9uxNMXrnjF3K^Uc^fNMZ_UEb!=6LSuvd z`3n?AHFAZaxqaIYM*7j8DF7=J4HtL-b5`JUVKI+B4x)T1Drl&o0)Tx0Zh-8PBXub7=$G(mx!t)>#F9l~a zO=={ZSpKCBVigA4d2|LAf92g$2n1l9yf2}%^w)9cd7A06r*e59=KI%jp2@6{s1Y7W z3-bOFC(q;U#w%zFhEGpN)%fUvUTP@=8WhCkIi`0jzwP>;P)mv4T!02AEg*+M%b3-R zo3@rY87#s8`huJk?s$qCq^#FG_0)5R&TX`we6J`j7VV&cSdNqN<(m}RP=`S+K>fe> zUNjdqAJ`F;0@4u9rGguFyxK}G9C?7EAI)q^YU!CH!_I9%Ku%9?#P)a`eZL3Re!)28kD2$LXU z=bdTV)t@9K?uOTVtCqOnc&W=v@4{vFF5m!1V5TY*!h6n6@5~>v@$JtW^RPCkOHg(y zPGzs20Bw*ML=u>%#zv1G%*XdnW~0f_Bu(W5x^B*#BgtdEH}A_OQ)m@Kt0RUMB${ZX zuE&QL^Z+_%k%5<$G>eRM)RKg>le4ES9^B6R{%mv}WdwF3eQ*ScpkAmwDH5k;Q1s*cn0w&?y80iADAo3DZhZaYZ2-myzw{WHR_% zAb$BEjN0HUW56&$XJoapWkUr3SuEN{`+BD}trlqg<~w+0K7G3ZKCg0ZjHWBSz*#f0 zQHF_=razis!q7b%fah_Ld!*;$p0~j^akk#hfO}p{`&GBtq0kQ0y3rYb8IsZfY{+Cn zIZqVGrJQ*zV}-km)kXYh7hGb9LwQ@2Q67z#!z$FOP3A|y*wgJ)NAgr(o5B6x83v%_>UHE!Yy#I@q zt=N-5fVyTpz5)B;r4I-^p5lJp~8rnjONe98yp461_RUVhnZrjROF<$%++FH z0Hg>SL{W)Xa=i=pXizJk-Bh(Tms5Hb1Tb5fN02)_M(V~z^*Qb zIxtpQaXJ-Z4IY?quylBX4W*_H*QvEebpvj|`IRv&lc5hWc z;kL-AkJHTl*HhQDhFSyE4PZA?taM`nNNv^ff}+$n9QeN)#mIFM6U2g1hVKvto4F9e zZ79xS9$Cfw1M*B_ZfKo%i~)!rNzJbI1vK4K^`MzRNIV1#$}1K*&II@=c!#m{azm(~ zQQ`^e)-eDTweJ7!82DUK!a{cPT6KP|TEen~(X&Kx(Kij&4NX_)@D^4*Z?g0zitxWL z!!i04=40~<&Bge5#G#3Hf|f*AI&4-LW>U};@zAIv!yt!WKJ_>r{mRpo3DvR~U?k%% zfZ89FsZg$&wRa3`H#q7rg00W~&gq5%X8kHTOA?|Ya~1XO8yPWyz%co$Y@+whLhqgr zA0oO!YJG$=@qNyBdaJsm%USupD0l)eR`6QbX08S1SymPwccMS4d$PwOL@>pXgj8c89G@UX4!s*;Rs?t&y@%-#;yf%AHLOBee zT;0me-(}ROFJ;5WCSwq@0BT(iD~ZxTda{f*;x*#=?EZgba#G>*Srtq{Xp1Fp0*6qo z44SD->kIW1Alrx-pg>3vfGS~ZF?ny0Ss+RTf`Da+?5ihZKe$U2SEB$-YkmI}+3@NJ zMNOwCaf^I2jEL>fk`;LcRRG8kk^l*jxsiHjM@}!Wh;jj?VnXF_XubMAMotsTdz_5B zp;0Xf=4?^S7K-J^pW2S7grn05p5SBfHqRmUF~-q#WV#kOM$X^YyLGjrt@CaD?rLo3 zHyP{EQqHrZ$V}SQCTiEePEd4IArIrlu#n4Tvoiz3 z8Hutf8gx6(wGF_YYqCia!J%E55N}7pucTretTKD+Qn^(4+-D6^j^Uin(R^>P+uaEqn3Y zQJUT~f4n|`VZnMtLA-Dm^9VKOtj8{C^eh{shakkB{C2*(^TH4@P_ash6F~mQ;#~6( zkPnKKGj!O=F$s=aO3WBf+m1)bxscgma_-11;~F-dYq;mHzb9OP?6Jf;CKn(luXBQ( z7od_mSL*zQ{FIZP!WGs&NCK361FSYThlP75AC23l$w#bt;2>P*d_y0tWhW)xZj2_3 zd_+NEIjVJuBg-?9a2P;nW5WS0pz(1lT&DW>yyJ%kV*wx(e9oXCL6g6fTWm&nHLga% z6-Tq8QDM@m=#Xi%{(kV?Kfc6QaBzreV6;k>CZbAJj%rxUoD92NnBujbfFMPu&a$9@kIhfaPLjGwA%)ucRY%PNvjD)e;3@|+L22t~ zTnMJLBp|xEK#~fRT3kZ^Ubu6G=5zq$W1m8n$JxN}Z+hb`c~l8IaGPL$MEx>v$}}e@ zwNy}uk8Ul2uoC>~ssx*ZqntA-MNR=OO%G1aPRx^AVg(?!5@kfRl*J zxM4)csh+_TKV!bayuIfW_{W-sLd4S-ux_!egdIqW0#QC#hmI`?y0DHkcPIAUy@pte zxCF5{iH5^o;Ucz>%laSDc}C=r9Nx(RuV6Ip6A-m&=m}EXP1_>yZK=2|Mo=^c&myQ>8;(``igpG@ciyTbhi{8c zQ7Ic3e>8_^J2O;_$l}=pdnwB3do(u;+|{VSPnRqe8DRjt@Q9*>q9{@a#Y!kWa*i6D z*i;?aT$vqE0~Zc}5FNNF#OqWa^dk){W&&K)w)GKE-D6c_r-Cs%)hsOo(-Re#pqs%nC8kEN z>aAQ%v@t#g8D`*%h9Z0b{USh@N%PfWG2V-^chEp!#|koRc0>oFE+DL7J}b&i8yH%H zWlQ7(wh{Xs*b={eX0{P#n#|-p?aESHDu<wd0PC_VsL+CFNNb0u0q5SX7Q(feKbf z0^4F(SZ9ae=+hZopZk6#YZ?*{@>Y~s1Y${b`W1b^n+(#5PE0UPFgVA=J^H!t`znpR zj($YX_WjWxA3eiM;K=7U-JmF;iQ`70Z0&x>oNSjZCKw8|wp>jUYZo8tEnAquu<(vi z@4Nx9Ij$K@)Qh8O+ZTBIyng}eQErXE@U@jj*tn`9;>cX~%W*-V`dowhs5!(qRo~ znKUzMhGVJv!1iX5VlIxSSylrcj;#lS-#fLh*BfIPO-L81s>R$8BwRz6s{o=B!&b6M?q?lmeIzEzyOVg zyFj=xpHXaGw1F5(EE$s}mQ14@v9gGVgMhrSvQnU`5t@#O`ZPeTqWf!7uxicj<@vP+ z%oKjq>{!w_V4nQLOP)_@kUg9Q4s+wpHPn>BDiEnAOcQ{q@HC*0)Y#z0B4PQBni_Cm zI_89gvJ|5b4ODjQs8Ibe^a-GXzn5iXV=l?dX(dMtfNmqAR;$;fa4FnvL^#TX>M0`* zN%nyIp-DOl!G;mqRhtNJ57UXs@!S$ezjzK!N5jAZcG60CWpHeoCboj-GdjUU-wJ<$ z-62Pn>Cjl(W(_!nP}L!h5BEn)ike0wLe-F+08Y+MkxdR<76_Emh1AvpMH@(#qfv*b zc1{nNk;jVhAW*3gsd=Ft;MtwNvxw+yNj|SHG5WP5QEPh)%Qx3|9s%VBCi_Jr)kR(q zwAu|kzu`c#c+N~;E!@`^W|a&=($GGDNtT$8w(bXan@y-Ho=4leeh|Dw?!RH&pE%X} za)Ynf5}lB|=kbuW;lw3QURBqAxqYBhx%okcrF3KK(~;sD@q_{h;!xf zUfB*KNUI_p;BV1~Kl}~<;%oQr6FqYjodXUjaymg<$;{MkNk_a2XM@ZGtc*a3wCgii z+Cdmxx~b)8YO(dNYZm0Smou=J@jfMaz5%Q*QB^V$dpGqjT2hCr)v$A$zj0-x&je6g zN{KOG@r)$K%GP~*Z@f6t?2qtTJowxX9zlKwU0=joAetJ_C-3v3Tm)!Wwi#J^)xjoV z_u+$aWb=YN`MY`WRZEd(R%f`POhSoW_Sq{>B_m{UwLM#`DNhGu367%r19MK^Ct(`T zXMTQrtjqb#k@#ZAGd-o7UGj_#QS=KT5K5iOGH2x2$+53+uI5b=&@1WPIc z9p-v8&JsK0Ksh}q*CYDM?1tgrVws2TdvbA^q93@hkv1HzVUqnG2~>x$o#5@49J6e*?)y49+hVw(gR(8_z`6pdq{{N|$v% zj6jByw~x8Ue9O6$I%Ob*{lZHAnPY2KeOCm!d#xhs zdIO2N5?w_CdlH8|p!R6%wu@*X{K86|?pbYJ%YFmc{u4dN{ZVvKEu3A@U55q3gKF<6 zX;+OpqBsi0Ti}3&;Yb^Xkql%frt2Q*{zm+Yb(g8D^@)?d8l!7*no6O6lzId!@e!WN z+oMy{Guvi1PLI?Y$ytiJRlh8se5kt{NTV??{H(FT!}~q$7f&tn8b!e z1m7416mDCOy>eH~)MP}aFkFCG-5xLGikc-f@^U`PEav9M@)aZ_;ro}j43$U292=n7 zLwEl4>vtYEP<|mR;b^hkG;+Evi9lMlLzccsQ+wj2Y%Q6ORwDSxMBchF8bksb*LTKc z8oqlP_QSc5v~_j=NLfVOAWSFWtiL>{$E@gig(Epv6+>$B~!X6ir8CH$y?P zBh4L!ojemC9*XaH^wAyp<>frfEd@b2PP`DLWD)lYN|s6?vX*F`e|}R-_eE11(OMCD z-35BSV8Y3gV7)_=vm{>n%%Y9OA_~L?VtTf>uI2v%v5xIMw}Od}_$X~5g@_Rl41Xg0 z*PSUuk;*tRiVSD^{aN*u08TN8s%41Olk*UCXI+bF%)Oj{BzgAE&W-t>;6AU_%T5-p zt&^Qo=r>g&0Th;mB!ynMEMHLMzrW!ciu&x>;_SwJa`&_yHo}ju~nj8LJRtovc7Kn--SJl1K5@G5=I8URLcs5_wjl(OcFfb{Q4ih-*ZK0T%q<1J< zz}Pf4oRmpK600!zHr+6ck^a7XfI{G&ctfg~EERfD_Dhy2%DR*=CvI+iW`f`iQ1;!o ze)O3;ieXsh$S1)F)?2^nYWT}^MHQo%YS9iC?|9~;x87|-4Kd0DJtc|HeU)OD<)BQG zZKZpk-NuN95U?mUV}%Hw#!9MEsz;;I*v5sw-9*CPRi(pOBIke-15`cR8jZDLT(V?C8fc_v#X$sc)Q;XU!5 z8SKuhFAwc!qAuGHM^iX*fRiG``xX90Udc92-rjmuuxfJg%bh2~~^8egtSO9aeHn35p&zsteKT>Vuz> z#H58-Ffm%tHysena@pimTcYF`FemKsBxt@I4n>Jp2u=NW-+i|KISSgS;eaWr$;o8Q zh?oHMbv}n+_J@p+86U9&3|9-6XQDNHk|?A?&>(QScp)fp86#nHfe-=^w#o&Qbz2Ak zf=Gb+1`ZKo&iEiG7~+?Mb4fA`X|Q*&Ps^l%xsL4#Vo zm7EVjoSX-VUBn89k|;Z4xdDJ*cRmL7M~J$Jy3FN6=_m)ZmtZ8w18FNJXh<%gj|ZQE zMM1O^k;P>%2Y;_`<(;;^W5@#{BEm&V}apE&fR z=|U$yzScpezxVAUuUSq(zZ#&hI9+~yoyYe4=CyA|lL&U}yiNq0qG#iyG&8(4T0CtM zeT}KzI_FfTHg(q;Q`;G9FGq1V8SA!}3PZ$?a(j!^^cNRJ29kon1GSYtjtvsn~syPYvQ{|JnI`Dq;sniCH`K z>iffRVTs!tOx-`W04@~+;S@oanAT60;RJW*08bHQXgk5kgEc-d05wWVe0l5@DH5p) zS*b|IDqgs$JGtrlf5H;<>&ISDrn_?JUEW`3l)A*2?9g4|Cns3sRhM;F*qrj*u4*Zi zt+_#|(=US4Mk)9c-Ol5hDRJK53;`v5yg}*X`;N;tQV1fYdKRu9g2J?PUj$1;g=RJt zTRy&Te4P*KPvI%5olYGT^5#qAQCN0S>$XR0P<$l!M_dWdIHukWiau0Xs{i+vU zMUKYube3=%=J&HNIKOCIclW{R^74JP?`SV!LjqgKzck)F_FJQ z&t%s9V^J{YxizPsbsT#-)ySlVek--%1+*eI(=(g?UqXq}z~b!T#xVDLdtQ#&KLc;k zi`bkDVc_US1bqDxMC@3@<7lBmIL}>Sm%NkY7HluzZj)x4Sg5XYHNj4Yooh% zjE#}02JsvzA50Pd1G!fI5XNp3G9-_`;M!@kdi$G5_kfYj#I5$JRB}!RoJ1b5^>n%E z*uL7Ps+WB2)|9~c!-JTK&oktwiKEe{A7g(5BZ>|MRJtBOtkp9nbQX2onex#mo;>v% zPd;(0CjuOc4)4r~xkwr`Ep!t(`xp%+5y z4yTYZpYbBZ5=XcX-^mhqhY-izteqSpX$u=C#gARC5o}>tT;zAh)AFv<4%p$WPOTBv z4gCZy7PtTY_+T-ewuv!A!c3AG0!=1@C!}JS@E>Q!Mi#c5uj{C{u&-aDju(fUW9MAB zdkf&QZ3e|#oU9L1EU0K<5rdspvH_mQ8Yasa@mP9!+Z(p#L1Yeb!hae7ImAlMD&&p+ z!HH3WkE=nrJwOa3`Nw$gP-fS|C4>4xEqiq7)eL28(O3?}$_VT^Sqem1SP?xW;9XZI z>lGUq0Opsje(=+GRx>Fp%}^F9$IvH$co#3D_ZMv~JrV}@T%%Auf|4!6?9qoAw zX4g^J9sP50jHwMMBrG)7?BW3AZ@4BxI)j z?E~}r#_##cr)$4GsdU3PyuX#nZ>$avOqA;7db#wSyJre{Y$PAL;SWTqTyC}Q07zlL zBJum5lGKW67&`FtlpPS3>d3XoL)xi$I25vuYRqVEv^GzNyYx=?jKM@0fz$#Q z=2=pLb>;~_v~78TP=8LH=Q39k+Ee7uGI=Jo%XpBz3TYkcf7Evm#?fH`fD_cnA?VFO z(#unlvhSULo#lZO3;ag~$@`V#BhlEbKfMTabsN#0y}wo7pZ&ng7psHBBtSNY1LvQj zF2CXPM6Dm()Zc3^`|1rzs`Wn?(7y5l-V?=Eqvhr-%0q#&69{PdHJvOCOhLaeaw4~-P~_MG zV*Tg>LO_j2(K9vu512Oe@SxtCyUpPXcs1$cap%vcUG$46JEe_6t}7Ug9E6wF=sJM< z&#M}*Ma{6Wfm%e7iDui97|vHXS8{cI1q`Vo89m|OSMwb}XUWPv(Cvw35o!7-Wn`3y+_ z;P#!MY%m#TWnD2)N+^D(7i#?W+9r5Mg=Yr z0C23VYbqj;XfuSdmj&Jyq1px#I*_s8EJH9@uD)bLe_nIqU-?V8xAxphq1m9LKZ$bl zdQ!ur--nZL*Z~F z6|;@AINf1J(e+nmy$Vf z(b3BT!EiN%h&BB=C4vt!`pdaUI&20tbm5czl}kiQ$(fyb@S_SkBWwvLqnQ|`BKgY4 z;Y!-oZRZU1H-?(o!MQ7J6D+J~9iTyPXbz4SW`dzNZcipt$;{wJCGwkF%f(_21=fZt z!`{M1LEEod35fGH=`>_inzm9#QVM4xXH^3TEkoUiay+RE8pw!)(W$EnjWQcExwjx- z$B3F{-}(PE8{e3MO-7S?Z7G&US`3!mbUc+S4o!aQ;sAO8unkg7!mfsD7Zz5L>f=Iz za5Se#wo|PkBH00z#`6j)l(3OPA24wLl8Jb1Q*#h7UT6`ZsONr8JRIz@LCC$O8D<_QB~1%y7C0wEAv+0VRje#|?^2%U3Kh)?hFP{z;JLa6&I{7ys(@siL-iI) zZdobEWRi*S7?v#7EYUOciEo|w2j&R(7H}+n8om}pt@H2}lcy0oi92T%K-7J)Z9ik3 zu9I+xGu}m9maJfZ^^j-VSt#CTVad2TAWu_~1ISzBymL9g(2`0;Z)uR1obzy2_Z9K? zYk&rio^x3l*|cMyZZwC-Mh5#rS&kyvkGLfSz}$+&NpE#*iAdZ+r|MCVT~}U1_EDrpg4Zt5^b9Fa||Mc;4 zk)}T$!dd|@=jeM_?yWztLgnm^`CKNKVHp!W3`pwXAxoT*0spK7;D{K{1>(5tJRGDw zR_UYX@qx#7q)mYT$^lw97DqBl6XLln{;U4OF9eU!w z)$`MypF@jxG;~`mF!|&G1xY|_T)USS9DjtA7P~^=3l20l2}5}y%`Rzl4s(xntXpSe zz>!{e-MCW_K&&$N(_GPj<7&VW@E_!K_k%h&C!l7`xhJpHmzeChTXL8u&e)lVQXe0N zednA$>Ik&JH)t#hN*HIpNwzgC{-B`7b!ljLaD)|l!?0e1vSA%;z5gl7lFd*uOj(V? zi@gIZJGyw$SpQV5WD4j#fg}ZZ2Gprqp^~eDFgvDYGg_nY zX#?y`Rt<)D9z3sTnWDh}%LKJ(>zf%W4r|~dYV~p>tdMq=bgVMY{QU89Tz}>d@%d-* z3ifRwp~i-D#-XE!j!MC^t1Mqe0m8*)L3{&<>peO zudlhXI=m<_YT>Q2yl`(S*m@K75v27Xjp5Z--n@C1*qfG}+j#8Q=Coxw9XqT148Ww( z4y0$Akq`+1WD^r1DK-RDf8Ao9`vPAt0lWe|ql&1qOpPSc@%>tV-^O`poy+ZF-r4gf zJwE}fvD4p8G?y!QkRAw_BN|@cw=Y>;&yKKnmn?N84pvNC7CYC(waMj)Qgof~ZnI;( z(a`ZXJP|%w=aP##o;?hhuhJ zg@~hMT*fB3;rt`V#~SBPpM`uGt0>V}sZ>2@LJ|bF)y(bD6h77;G$?clMAPL|+)SgX zjHurC>HR3Y5$w5WY^B*$;Eafc(%dV4_ov6>Kq$aYABj{em{vM@$N7W# zvgueR1k_wmBoOf~-Vlx&#(@o50+bKQWDxwo5m^QAyu`$#vFO!1_NIaiU!Q(`Zkm;v zQEGp^kuQd9Mp%N;5I7XuiX^@bnyB7#Hl-W5Z@V;oFwtj(RdjCJs6?iF4xRX0{;k}* zs3q$5E{*KVg74xw66cCYTN`>iwOfkkR#^EO6H<&lxP7D}s64tK z{JU-2&E)$z>(@K|r0+w{C}3AwvrrxHppfhS`ktxd`y062kQ)FU?D`hYu+X2Ul7Klm z>w<^&!4;PcmJ+T*I|#keF*Q}1jpo3w4VwaDil`z@O*Qfy5{iLzu1{8i!9ykV>k{h$ z1rM4Xo>0*4T8AI1-xrI7v@G@yoEQNfazKqLkt)#>OWj2FMC!HWCWkfoQ>? z<1i~27EL*@PBcjqnP`oQqjUt8CKUuKfRsd&J^Vv=f$x2FF+ieD6k{=@!aIn%!Q|vj z244ePng;J86yMIVD^tIH6}XeZbq`zU!z-?i4CeY|V?G)u zwl{h^ftAakXi@GZSE0sa15{Qh5zeIHf(*+T=1N`-zKy3$EjE00g_Ju9uW4<~ zEj4VKy>ggkELh|e7s%y@(flb&8GI{Vm!qQLj5r#wZJF#)lBf`312JRALumA*VTq$L zAz6PTb$`uTzVAS<8kE)yF*htnvM)wJ21*29vHV!%$o$RLYDdAN>w$VtA zW@Avyky>0X6pQgf9Lv{Q&B<02yDe8oO&6*_b#V8PvMcmjD`>Xnv%!!a6%_cj#Hqv+ zUL%dsXmm->+iHF9-nx8jM2z*>DGP{lxFHS&=wX`^EwT=1C2^cmp+F=V*Q5X@5vbcK zhS`jUeK7zjq}e3LMGBI|1{49LL!6MHOM|&=A|2}kgA;0uSr(8^j2*GV+4;F_ zFj2FJ#PWe6%T}e}$aW)y?a`{GgNV4ng5}C7K#4Gra1Dww7}OF4yUx%D8i>yYNDz`{ z1aui8w_v2Fr_+K_4uwZeCBL#<5YMR#p?o-1Ej1L|mg5LN7bT-Kt=S^CTsh|m23C~- z^~dr-g@U&o+BCjp!`53BK551yz)}!H2r4`1Cls3v$U1EXov?ERZ@4X2p4jHx^gh8HayHYULT){$;b?*0MF0Q= z;PCWs-FgAbEcf*-GwcOhxAqf|T9Bzww;+EGyhJfpEcROn+j85eS(#ph%L%Za4NS20 z#M2+;rKZ(iEXGhWhz?Bd7UqN+ljuY|9zVQu=P*r|WJ)g4^zhD|hw)m1mSU=G3Z&fJ zUYeU54}&?DszH9SIf+7rm-@rwb8}007iNqpV=$hyne0G%WM+B;bV4KrXgM4o!+D{DJ9bSNL5&1A1@4hRNTQ>$ zNc7x|%XPq_IXF1C(0CT4XfEG~;;PTw@+H|GjD%GzQeBUPd&A1-*}HN1Xd|BkUjRAj z7KkXGMX55sa8@i9j|*Dd9iwh}aaC03>*lcS5H$v=bnLXD;aqou0`Ks4mv!Qfylj$q-;d0@mwL^yKq%Ti~01Z3HnYJHe0*W);h=KbWA_2BRYp0w4i_h9S zjuexOP#VIBFIKAdoMztZ%Nx&)Mq*J~3I)zUrr3MFyjG@cF{7rIhxUP+`7gYvgnn>Q=UV%#2(zHi$qZR5TQ_YF zRbpy>E~oV#IMDd+r@r;srL7xw(0UUg4YV_G9M>F=MTQ>S{C;ZZw=Zw(-`}fdhSRKm z7JMTWzOWET0__YKP%7C(Lx!#v;8ZG6hCr@B7hcmkB7OjKgPMQ%C%%<1+zE-1;Ugvr zp4)SU*>ESSNVVq!2efr3xeSsL{(Ea23+F{gaXORX&0d7$J)D{1-X-Y4uo(`Wd-$Rw z;4NaUQZhJv$)&@8d!pxut*7_z+`lV4kK1>Cxbj4@dEw2o@W6s^9C_JgBSvj03rma+ z1Y*bo$Vi|w;+B0}T1U(P_8jIqz?%UTK{B6*S zH172P2ZL!ZH={9%HxyRO#sZDA5A=TV$hhKqbEFT$PqG`dIU28>b@}M`sjuGE zcka3UT5ck%L`LFUS5_Bo{HQA8dvjaZmMR7qgb>1AMFh`FP4jZoHlJNpr6i$VOoB#3l6lV^dVfDu!&wjWcQxPdUQ|Syg zBm#$fbI?5>-n*D50y`J(a$SW-o=?P!`O;-C-@HOZ{Pe4A|LTidW!dQup7#WGFBaLw zN1R3W*JmQ%r(a;J^Dl0JO~i)ZyzBj~4|Ud;yLRqwrNmEhzteLEsYC9n8zcjX6uLi# z?Nvo)#(B}1DQBL@6yi}Kbu!L$mD`JjK$AE#NA-ArbSB8VHr3;QhCuCHFZQeZe<`u= zT7C8Nt-$7oCm*LaQkxzhKX%o4Y6gh{=pCrP>Rfo~zPXKH zB=qyEzl6|t)?I$LuFTyy_%PtkV-GhkxUd-+sFOes{%2AXq3PqBix0N`q4kdsl2xZ> zhEUoJopu-XIq^gAA5kCPsg}Sqs*?)Zcab9kQ`pcyhyc=|v!*^s(6ero>u9Z!bF*{;W zy3?%%JGhrBk_>Y^gs=pnU~+$Cbar|XzDXDeB8qeG@O?i-&yjn#;0Thqjr*S`Dfowj z)Y!ddbELnD$cUFg7IL|}p%EoXOVSx+yOt*>0E3y9Zy^o|ZczfdLVu_!^W4FIWJk-< zxQ=#P#+c2w9{TrB)3d$AY)5YmVl8O!jZJP^*%f3bizM=n!i3P`^z3M)pK#5g>LrA_ zby+NuVjS=@VBA0GjeF;I-M@0AN|Hz`Ng|RgVJ-*%oWzyg|2p3XzLw)Sp}Nq&&!-<> zd!N*C%)+U@AaeqDNryw>Q{UxjzL|6H821mlQkFJpt z_?+;{lVsskLiF#SZauVCh`58)6YJ&SOk{}E^51*ni{d}B)8N~BpW6rH3O7Mgb`*bM zs6ppY7qDiVaCAypC={G&Sz{%UX#!-pGjYz}RF z$TU5QEOuKPc3lum(yrV(_d>QPlKZ}wy{D2eYXgNrpgizcEixrdJ@d@}tpv}%KUAxQ z&bfHs(Qu=VlAU3MVWmnY96-Otm>mtpEEP-p3RYVQ%yhG+Rh9G;{}dA?H5)J8{} z!_J`;0(&x>P3N+fVVS)a!kyGDQf${KFj9+9A7P1?03J_rB@a?etjGdgD;%+lnH>5= zNb;Oz--7@O!=V-r`X`K_9O%liW)HWn=4QE9_q+-JaHo0gZ!%p7?b`lad*LNV+koxT z=z!`tljt0_79R~7%c-vgQ@v|Il8Ht^0_+a*R>X@eKn_+p;a&ie*cdWyh&*$>J>OaUcnSgcQ;%fm9%EfrOAk3CR)? zSO|m#mav;{YxMu!_hv>??7&AB_Vf7Zwfk;4=iGDeJ@*t2@kcn7NzK{pc4!&cwXmrG z+ytN5UJE~I)KeX5YD&#%0$d;<)k3eYC=d-U>z_9#7kz&W5f@%#V@4#8KMWo~-i+>+dm%@=fiNgl zcOpMf1Ya{SSzr+PTxXnPC9zmUY>3GEeA4uey*y|ss?~K7idvk=T+s1nGLl^Xmro6m z!u}-6YLNF3nz_hfF6)376Kox`Z8Ugd*Q&MQXgJz7x1}FD4~`xLz_f=enb~!fDAhPS zTRYk|4sP1$Y3Pgs(o)xQcnqyBYG~|i?h(|wdZ$?f)dmiFzm|r|x(cJoVB#c=_d5OQtYk)M; zxYTA;Grepbb_DA-c{cAF+^apUMx_lIK7OaA%x5q*4Io&h9UBh{QxnSg$k}e6-w)6J z5SHm=9TyD6EFgr%VUc%z;c0|zQ7lC48p@kgcBlaQ+-`>mC&g?NQPr{!5hSW&m9@3y z)e2kDsIal6)yHGSaaai$P-Rg4S?K+OmHDN|xXE_lux*uvgKfc4qSD*66|Q(t=VB%o z*zyN^Vmo#km0*u+H~FvB<`@Z0bCVnrEp{v4Y_{h=XSc#$Ol>F}7u) zchBhMJeI_6qr=jY$|O4*(^UrS#WHVgOyfR|kx+xZI|9ckm#aTTW zy%-h*I!&acq_U;Adl8noHs*Xy7to5(Z*VT^?rlLJiHHV?Fb>S-G5lMzcue+z$^HM| zc?@@uE}F$-j{Ddeh9iTMe-P(D&UQYz6O4gm`HNB3lYN#tJ+#WV1#;Ca?mi6NQw z=>levo#MCz-+da}kA*~_&EYT!v1$RsL_-72K)4q?DM83|cJ)_QR9BgyWe5XvU`LW% z3;fP)ZEf3}{sk@x`T=kdtVfV1OI3A6Wq(&^Mi5dSZsx~$XZ&j)Lx0gc>tn8}GY;(? zbG)-^<|RCZ_lRO&Yily-_SxZ00m`D-8j(0e*ia!Xb8YRh@!DFQJ_e?-nv-ly>jm3H zlHKPHCRBN&^H(zS{baY4`_eRLm%CprGAQRGwcNKfpEgk97a zV4x137u=IQ<8(iiH&_?ZX$4=<3!zV0HNW3hW>q6xu~Totudd*l7lPI%QY+Te6o#T75i_~%}B>D0FKkjxK3%)I#9Xs+V~scDiNO7#!2tJ% z5l_g=o|#KlBg`Zv2d1Wk>##So05^zOmfs_17+_kHcqFeUa_Es2Ddka8o-Qe?B{o4m zA(arAT(;HYFgOs%2L=mPoz1(QyJIr7-DB4?*%Plvj0uNtjN5WBU~*vU1hWcrz<lUZO=^cglL=mZ){6jtxgzdKwdWa7i_rOZBCmJzIG5?#ld`}y~G{+4_?)VV9t06 z6>H@s_z6$ePVE&KKiNa>BfmjAfpwW`Ks5Q^Otn2G`jCe?yq&QYNTnG}W=;`gt*Vo$ zIw1U(!eeIWJg`!y_wWEY>;xUR_b^ayKNy z{-AeGRl-}!G#k`fhsEg$vk@G_IL2FqIM4(mR#(8TfhGbc8My4Ith2zpTS2#vss4z8 z)`x6Xi^*bCLo1bO+`|R1)1?n}bcD2a79R?(N1sCkC@c^pbLX3IH?Ip@;k1aUA?ch> z9ZRT#5|W_8$j_#m7s6i+WYW-UG8)X0WJTk_@1*bN=sKU#s=a$t*tR_LyJlFn=`8{j4`9-ujv!bFOCN$REmMc$ z;ru`u|Hh_%Bc)*9)=XA1-srN+nskglQ1hGm_5pk&LlXSdoDA&&Q3ZDA|)%@HBJGg`XvPiK@agY^NT=t4eh z7v^POJbrohcdH$+=>3KO%`$7;BsCsvw?w0s5T_A~`?DXeuH>i0b45&35WS-8qV9XM z*S|6n>unHJ^?I0ms4_b0*xfw$2)*G4y;s7!pGj@Pgbf|`1C!6J3b%U=o8R2U6g?W? zl1=D3Kwr2Hp@u1WdTNolUbv5(j+;nsd9E;d39LuyYfAH>T^`A4-O7pwImI(*uzfI+>+| zld`X<&uhJ4$Icd`7Aj+E`V=O@BKVu#Y-TEWwx~Mf5Bl~kTN1$FB4C0HGi+4_N)cVx zT=!~#{WO10QnAws$6~HR<*Bo$)0aS&BDr%-ssFKBfIq+hRE4*?1 z)lb5XFP;s%>?@xQcC>63>^L~u{3pQ<#Hac-V*I+<8nzB@?jk3~e?~}J)zL!K=aE7r zYJ{R>!E#~Gj0n5Rg^Z79=##3=TpNK@Sef8Ts=N z8kECKmu2)TSd|rVnB^L zW`+vy(+d7alea=9V#0F6s^TVJUcgH(okK3bVAXjfei2u}d$zf z3I%B&ga}X_{i|iv)&E1v;5xO%@W$#cvT7lw(h6qYI$Gj^giu7VB3MOhpzsXUE=jq@ z$O_|fPsym2H)F(9!w9DchPq<0*66pWi{^$*YG=Ktji;raj7enUH^?erC@p=`A!wFB`BMjcOAoEGbUc&M7WA zwB%Hgb7{>MXQ(Vuh25zx{yCVI2~asMiB(o4SFU^E>`|D^X?=mpvtF1#x2m+fC{+|= z28QTRl&QAqHhDsUNb{VFRwUdG>_Tf6uDEJ`cNhZ4uoKGR&?T4q-84M@K4|=Xt^B)c zk9u+B5d3o7%s))dA-4igaxYbSmTYXy0M2~;q35$X!Yo`dxy=lOz!8xAA!b)ad8|n@ zzL+u1=W-=X_i5xa+gArtV2GSK^fGG)URezY;eaFH?_WQ-xy)V+CyiD$^T?#qTA|w= ziClRpB*``}CI!r;KX$ngJlbOGT(WAd9nwO{riVdccJe27ixtWR&;sYn!liY|#?|Y> zq16ivP$u`ducX||9=Fe%ZV!f z95mFO^Q-HayJ5C0SjTfkKe5{!4o+jziehWDA{KL(=%AbonV-dVA;*pka$Wza$+#j-S+1~1e1Q0=oD>~QM~+|#njNq$Tv zkYaeV%~2)BJ`Xo*{KFayy9LUYUvbV!#H>^b$5v7)%w3`zpkN_H;YiSCbKpuWLc5#} zFMSrz#VEE~tv2ifX(aX>6ElYgB1x=~ES&5H=sg}i+!#nMuF+j;782!&im^>Q zH%GeHR4y2@K<3pd2y;ZiUA-|m^0QY)5XL?sm`mLm>e2>O0{c4F*BdKcc6zFPL28A= z?eGX%i=w-GaOy3<^m`1ZkRN~YH~oOkmUDof!CcsrS+L5n0u1fB$=Jytj%U2(v%)mQ zQ5!s8&xUEpqGl>SGEC#PPr~$$zXnp8`Bad$3VeLty!dR8y0!isNPGKE22wUJ1)bg~ ze4lKPdt)>wzk@p?#4eEc;Ody`1%L`GFSda<4Z%Ewv8O$)N1mHX$w_A-gbA>?KO&T- zXwb(a)s@-jyJ4MC1+fG+9MtLxf%M9e_r9McC!Pk{Oe4b2i&yi*F zYTv0uF3vYQ2MFc^tRA9gg;_;0;((YijIeEpX?n_o0_J|x+R+a;36P%If~}ePS3kC7 ziO1=7mK4#dE;CokHXq?Nf~%eZmqg<9O>XDasSu`zyx_2Vgzss0Sfy<9^_@kjik?he zv=`c80y{I$E3#xW(7n z9Iye!s+_m?%^x~tb?-9Az-!kQ$26Khc46Dv#60I)osg(A-Ec?$!fow6O|7YoyE`f? zYin#;i=L0bSCYQsw3Rz39ZqZ1K}kY19cNX*xTSxQP6LAxOV6XQZG#FQEwNZAx3(Ig zZ6$SxY1wss!xgu(`W2+$yNtXf9u1Z(KjT7vG&UAX*UN`(v>-3ed zvx6Fu4>o#GRScn#CLQeApx3Eg@6kqVPN3b|A1o`Wbm^@|;SNjz;5}O-Syh78;IO&d z7Maa;>Dv0@g|}^pL`){H=bN2+HFWE+3nEzkkR8J1D(g^MsH{3YE?;F;D7f|hN?S*! zv$eAN(4vsThD9Xc!+~dfq`FnmVwOEVgF*^$nr>^}lJyhP+1!BlX;cEGLpFJ5LR~D4 zW&IRJSZvKJ%d_eG^RZxA)!O2QEfR#3G7)ib&7$(opSyDPhIyx%(*JY44gXg3b(hMH zP9VvIqdBV+#D);<>TrMGs@9&Sw)B>LT{RU+7{(j5*{2Z=IiYu{xSl`pG0G*%ZDy{< z7OH&w_^-3ampj041TEN0(SmvFs*B3P8VNprV8>-IE3yt`8Z?^XK)bf&F3g6k>GWbq z^Wi_D1mx&dNr>8IhwJXe^)(um-4YAUT^VsBG#8tq9p9yh3v3p59ip8w`s2uXQxB=` z6#5WD1-8bJGfod;LOeHUO~Y7OnJTcHrY$@L3{N_)&FsR3tl2~P>zP?V`WBTQZi0_J zt=GndqTwQ1Lz^6qtFAh7ffJJiM8r_5IH@UEW)v!_s%kFy{8g8YO>8+m5c0#HU%8Ka z9P(*(C=?Fv*s*1!AF&T$8_9yWr9u@t0XnUf|MIz`m+m=p`;I`+7toZ3YI&;Bc&s5; z&^s}D?%5`bJ?YZInOdi&89@Q-nN^*uN-J zWHTkp=h|FOSklFX$qGOewttehzNW_x)eeZA;f*k@SH*RFG#K_Sjuo2>$;y71_JF`1wn$K@^DG;1ShjJx96=u%W6u8bL zd0b<-odNHtWRV{!i9RJ`JpSAHs-~w$5`A}>o1W6z;Wr8BEWF0XIsp^Sz;sC6c8$%p za#QzKgO$dv!#MOi4N*#c-s}59_QA%|WMy3qY#7Z#Qm6Jcwk)eCOQ4GdSm)tQ z0Rvq38w^{(rqnT4qolowZCkkK&Og1#TZGL$FFb?IPNwN_H_!9IYa3%(ldpezo?Crj zd}qMAPswr~%QEg01$0~RSaZ;TiJIQ99_rtwM?*H3QI-SCetwuf%}1aKHSv=svWoRo zHXbzdIepQYEDMO8#m`u0EAX=!^2QUH-NW^zTC=(5&wL0hsltY#u*Mp$c>MUA*~#UY z1TkskY@UUY4hg<>{Fh1s`Zu|nsA;HxY1%Xg%4YIB$yKlLr0FLGF2&{vk4!C6ZH4@w zjRK$KOF7MoJa>}yivWaKKgOQm;8%WD3-~~gInC;3T(Lf-sH^6BON`m?@b~LoR&~f1 z^c~rcQXx!)teLj1w)^^9TtH&l{&<4XiLaj&4c#j<`ou=-dd2Q!G+1mV@ z@?xuxrah&NeD-Bp8+8cx>M(b&C~vLKG`5{}VfJ_5U!BQVR9Z{4)C}3Gt9<9KFO-&- zl|w5#S`sgcLXPXK4u_3;PH%}cvRM}Rz0Av>0W3Cym&=+1Y_E^G97WR^$CU@b0y#qs zK-St}iLe6V75L2H?lXr%wmDqR6-yu0)3C|wI-8Dj{F8m(z2JxjlXjae;4A9gaN4%| zfuZaJ`vP`-JuT9Ed9Lk`S+#jj^U%8W3!zWqj(EIgALSb}8y0UE9PYe8ugXrn+H29P zg?lxrm{mA7=HI4Bb6Hsj=5!~cNCro?J8!eVqgert({jG6mG$;NTGB@gdKvPpmPLupDaGQR zVS#DwvG5@ZM%Ww;bG6tEKMIhs{%^&FobO4lA_O5H{Jz0&hCNu$KgnjK7K_Vmv$Bcm z6MT8d?qUXB7PH45s^Hjr0V*sop803U8YkaD{!GHl%B1v3t+T>`OH9}-ZbyYv%Zf)$ zJvJ=FDScY&sB}O?$%$ROkbN&l|94ivzAQ0WhzQ}06YK4~=3u{=&R%=pyk9+eqQIoMj+$I_zLug^k_>W%9^FXFqqriZY zi>E#muN0n@eUmda8f96O??-a84#rW(-+Sqep-|lNtJ} zkj>jIq4=Yd3%?&Rxnci-ArBS}1{;$uweEJe`2Y{ifP>zt;*jogbDO2&xE0oRRK!8*-Rqv~_V?;|2P zko}YD7STp(5D{n{w0AE;W3X4xs-ygPRGmJ^I<*%XIH3QGTS z4oW^Qv0zLvGoMJLP-4DhoGlT4Tw^s!K~KOtKDcfEzp3D5sW!FXW!l%@KfG@9V))5} zL*k;6_C>o!4kLy}d85;5GEE+0t8)?a!t%AJ9f+5}>7O^IFjYiIS4|fz#HO zLu3vqEk`FKCwt1B$Gv&dT+S0M*yDhzth+8X@Z;>G`zA)#ZtQy+hB3x?$(*0iOBx$@ zZQj0oOLuz!u7sIs54Umhpw8ja#WA%!ym51_39hCfTc(o-x&0K;D z%Bwn?=FeR^HbHy7SyvQ=mtQ8GRY}%pQQbGQk4=m%ojbp&v#Q*|UWljt{Q#c~8GP;G z^-E4^%ajz`{hazo%?tXLgxh_FLH1%v--6~JsX4#BxFpkd%98c$#jL)tlAMM3%S^}Z z@9hf(gJN>{$GTdC};+FD%BTmNS^OA*aXM!qHynEpU^+ zr)W(Gtufi4chi$Ra!b5;S^turWDnHh5o^wjfNR-D=*t|PSNr9M9=&enbJ_=W8`hlM z_h`Xb-}86PG8I;WieHKip3|3b| z2g3hN3~ueM3WqFiUb<`H=+K$-`m=w&Go47d5}bH%*VoIYIeiK}Qz?XHZXRIB* zHQ*-^vt(vRbzJnrW*tUVw!DpkGJj(8Tg3oWUL+{f!n_uC2{RAP@`>|94ujo@J$g)l zjIPlBQ#fA*;ZO?KAxMPGBS{L!IhO@uAUa*hU2ds2*Eg2wtz6$ z4bIT{e1gHS*=B;& zR5izB2;h5zHPpf~0=y1SWl^t7S-s*Bd7Z;-92l%}0R)sK^Yk>D-RGv!{K{+(({pd4 z9&2&wulSA7bB9e*PR~926O_pIjj+~Y=wk}Dd`rj*q|<=GB&)IWZ{4Cn_2k_iP=c-0 zqQ3Pw7y?IpQ$G~;3rUi|Diqw8ZEdoxESEFH;}08nDMnKUu4~jl>p|b+V?Js|uGbbX>fY?tn^Js~{BfNR}OW&d9(g?jV`@%w-T5VgHeIeTQ zQonpjlR_1|PRlt25MNKu!BP%?H@O^w&Rh<7IQb*WvQVjP3u!XOvS63l7ZiG|o%(NK zSP;lPtQFH7M^dHhq5U;m_dX@1Agm}>*jN59c8rn^XPzU;=K`N%^dpOoW;%*g!Nvv2 zWP2cH9;JjNl0Ejz+gs2pLq%p;jk4Is!0BuciS$Nm!~j1IF*B6vs4B(WlGv z;Z@fPFV0Y%R^eo|X=1%$giV5IlzE&?p(7wxNSRx&(t3@)S|0++cSWcLu;sjJ9cNb~ zazkREEo5Rkds-H#9qJAS2t+l}sD?t7KtfD)@B^(uZ9$^8frJiG?ChLQ?S+6Di(QtV z4jI#{!+k-sJ<(ev8l3vH388l6I%zC6pW_;>!N+u>K&sHhghyit5HKG`*a~WkOG3PVeGRYb>=OB!_5E={ zirb*Qiq}XFOIRonF}((SuJJ)V1}6S2SC!eXW3<4L!6`HRMEn_RJH)SHvqxnrX$$^Lkc zog$@2>oADwmO!|Db>+yn9cMkw*^0deK@T0a7yps@N4r**FIu`_+3*^k^dBU41`q$Yqq?0lf)RNOdiE~O%|prBRinW6PQA2dG6zqMFIcV>}O4Y#aJHC zw`M+#j%e}YC(u#${n!3ZI{MrB53io4)05|a5<22Y9@}ez|13KC-{yQ$I-*m*n>^0H zui})sl57LVXd@;?!ttEYiHUd%HU!EnS)Q#}IEhBZ_NoBl+Nf-84cRYYvG!ggxFnmN za8YcLB0h?P&1c06@IYuY=%O5rF_QtkPp2Bm-hb>^_Igp@2UjSNuo;YQa}h*k{KXtX z*?>8c@Z^WwMW|a9Zs2=FmMhAE<>Z;0hs#?r$n{lpU6jcZbFD7u(-5|)i{#2s-r5|> zeyP6AhR9TN0#)rIs(!(w_4vdUlBvj&!k(L8ormxTgMx-G9#QGMhzG+g8@Q;>(547P z8LTD&D_)tueNv{#3@!4Oh7flb&Cpa*#Ug+eri<7V1yBS)0r0@6(U{e7E;`hpR4a&T zW#7!6#r=uD^3qhN5qZm(~H^b0j&E`GoM^DC{a$=Oo7!TU?s`0%FW@>$Kc+r zu<-#+Y7dvQ`-s)Dv7SxK;XOM0Ca@S(uvkxrLd`6eBCDb7BQMQ@d1TL;MqpG%pjW5b zK^FsB8$|6qm~c=jWdZiCI6g6HMSZ9+ImLTni?Rhb3O}03nr15Z7T8SkM4i3@tHK2a zx|u5S`LR+tWA?{AR}8JPqPYfNYHpFi&m>hQBcy;>5-N)jW-A#XaGUgLj=0 z?STI&UDRgs8w5vr(A2(vfBU*M>(}u7S^y6-25g1%La;@}tvq$*siUv8+2X}Egz~`T z7@>C{>Vy)M6vw}1U%O=)Gv$!r3?t}r3Nr2Qoy>BV0-x|7K1)k=7UN_VRRv~0`%3Pp zGb{=eFrCbCgYSip!*fGU&m$Xbr9?QQ z2qmJ_T@$s;0yYPq02*I9<+mp?SYsq=R7BSf$8VW{Av9-M+0t9~Hk7g>W_SD{$r{ z+e6zwm6dK5?<93(X`vSYUCK_qEOAJea`F<3)mQ%E52su<6ie_}X>+;cS=_AYevb47 zV>rrlj`DK*71>{&YA?wIq!O>ap_JD0ms9^L1WrxD2twmFh_QBV-qF`byoiv8sEe9M zXvy6To{#5g-6qlJ^ZHiLU$w}eM#Kw~6?%RKm3WKTEb@`A&dBex?H7jHR#j+QVm`E$ zH`MDi_NZM-Z5DRFMOWTay0pQo#$5lt>>Jr+_Akp4jv|M;thB7`lD!w6RSrkVdN-m& z2~H+Y;}8%2PGPmM0=n1TjH(&I&e%T$l9(;bCx3tj`=1lw0IgWtIpA;z1~ch1YzP*~ zxHGnAY))$EaF(|OSKW92DqpI>M}->9*>!&1U}b0anTO(Yeb|L6a`g^ehCm;oo7Pid zDX)h(M9D<+}p|QMHy;;h5i@(0ZSqevXl8e8s zYFYMYH2a5jY3{UplP=b_gV|H0dj$@-ZvSMDWnmg1x_3^u%%-%GtzBbM&T)kVhaY?l z2Xs`P?nFJ*a42C32hD3Aeq^m}UOZ6}3JbiWtkkjf*)J?`BvO99JZMc;XP-U(`RtqP zTqdom+S71%_O(aoBiYx0U-2PZ{$CVQhKhvcRrp+Ai=7Dk0L@5&1H0 z{nOrX`-(ELGY;VfJv*^1`xjvH4H~5{P}8zR4sUnJcxxhEGwB%kV<=?50uN{GN&YE~ zogrWW<|Io=32nfdU9dS~RN^1Ze-4U|tZT=`s;js6W!d}o8Js@B76idod!{boEf*4TL?wlEE7>r$~+BVo3Y!|z`1 z#|Kn;hF>Fp+wnWo>p(%&u`Vs+ZMFJ-@mAP1pUT>XI9$0VNeHi@EVOcXBfPnUi|4%1 zV3$p{YgSr|4H}C%4+}-wXtU-g+!)o8X<=0Fuw&KQRCmpxi%!q}1p{pC^H1FVVpUaN z-_ZmAI!Xt)$KTHOA)=f=T-IXtStYa6SYPJ#x)9pt(D!bsbY2Gi2QWQx1xte01lTKM;oS1%t<_tt=`p{_5plJiD>3t`Y_Y zb__potS*SbkfgD5b?vQv$LYee_uqN+#`DUc5XSMvK{lI0D$X9q-gkX{)4?xadyC1` z)Eua3b$->)2RTSKkPWFBpqpSVp_0ghub;o9b#xju=IQr9QJhR8myV^GVDB zkO0Yo)fj*p>Z^u2+uhg^lqF?oI@wE(tG~{Bp_QKFU^4m3G%w_~WR=d1W)`|fPQ0)1 zuzHy5-I<$#aP|sAV{g|&I3zyj%zcmF{=h}GiOMJF&<{W7&r>c*c4}I%44aaPVtSR(7JQBZWB|E&L^Bc zGnvyY5`od9!WY=zG=y9^a;R_M-q|8Ycte~;gUBPot-;~x6!k0e(4jPD;2UHxyr{&4B{1%Hj z`%^@G6d-bJye$~_1%(wutKbk^)$0fo5Wk0KUoX#CRqcVID>N^MzmuHWPH zYSW&O&*MZ4>S%eG=RA>UBG>}GP{dwZGiO0XEfe8$h^=L@!Rw~Uvi+-DPAiVa0&4i{ zP#e^O&1QG_ngYi5ipHvenih*zw0xyJ83^??w->`pEL>l~u*PJzFq`v;NhKJaj(`ac zSbG;7n%B*IdH6i#8-5{46&KeCzm2&9j)ju6ZU1YBca4uN-|B?MhPuoL<;i@eodz0>J(E$KV;)WJ1+eOVkxEw3)NTFj<3B3}lTE!59tJ@$wi9*yBQ-0rD# z>FP>qs|Mz;UE4J0l{%xKi^MWUGnNcShsLbcVfx(c(uVy$7u;&8!@RI)-hptmySJ_N z!uv#3bQgvehVOH;FR5-9ze!e*iy0R!Kv%gcAU=t+agd&0SHF8TA&7arP($;|W6clwLi4gqz z+Pyaa>fOT!La|7Zny(Rsa%yv0T+0_M?Copmgg0aprZdrmCeRj`zhuR!@g-54ExIIr z>WU@v@rcfRT+|)z?dfQbMI&KevS}SE@jkIi;)~+3qR*Xk)-J!_=cA>?ZXZt_)m-Blx7w^Xy z2rXN=n@R>cKe*oi>?r*S8q|gocVMxXq z&)oC%-RsN3$c2W$-7Tk>%Cv?p7i?SgIHU$*Ds$SB^%rb0XvZbQ8zCT3`cdIh*3p8`n^0sh&Uix z-F4u)uZ4r5033WnGt8)mvx5ebtAr@hJQrpQdv~o;_NFQ|1mt! zlgO?S;p2)uHHlmwd?)^ZJ*8*w5VY{2^2KcYya*&GY=q`So7Ps6bkd)n@QAhdP_~}8 zh|fc(?aSy%CN99CS$UuIE_;9jtxGC63l~?P>Kz)_DRdPl*1};a{8@`!=WW>j zv|t`#XJv!t# zI~V%(ljrhoZ)ozYZ0y`His6f6>he5716WD^|KB z!vr>@a`Ol*Y_T8v@ccN>57fg$S$D@)tJP}L@^(WBb(-S_$U^Nl7zFDP+EDaGLhYEI zLeC%#MSMQ4M<8E8goke$>F8Oub?HL5rUW&^?7kuh4JIa^L*LaJuo0*?rb9tb6o0S^}puAgmg{bM`l2T z%kliY0#(NFSg0iUu;RZ#fik4H7QBw#8Rts87L8tl{xKg#SaGj2+^|az_bpb)?Zc~6 zMR7!W)mzN=rX?CJ2D+6j>N1OF*&@)k^UiDIj|{>eluBo-HLG5n{DsXlG{Rq#V?VaS@7_T7k?=jVVvp5lSRR;M>1}EzQYSke3eBom7LbdgC%?Q1W;L8Z& zj8M(+t*VEf4k8Vg*o)@J!vUwm0DgpWRa#MvI04ufXC(-FjT$l5z&rJg{*sCmJgbPe z(7OalCq*iP9)x^@69WnT#4KHYo1j@3KgYv@aOLnMZ4j?T{H?n`6;DuENdcBj@|#DU zI1Nq(%221sb$p-=-F{jsUO=1tKK)m42eC46$NJ{Xy^LA7!%Re3X`$4aC}fzdUIf2U z7Am7Pdo=rF*PJ_RlU}FC@xvz#VlzC|s{Q_Yt93!lPQ`GrCfSzkYfHDLy&jJnQ54iJ zcr4)sTY!;3UAso(E3za4zN@y^7nM8g+^rlfwua3tMk_^_BaCa=9$WfmyVIky7(Ix# zg1~Dh#VUmml$Xw#{F97szFn)i4eGw-V@?*0O{FvRp}6$k*)7^zTe8mcP% zK`r7jNfO9Q19L36`voI1dDN(8ka?d0Iq`;+Hyp33Tr2W7)9WY#o~L3V7Pp&ig@DJ1 z<9G0?m5DKr>M#Y!F`6?8$SVZ%Y`Uaf-Q1+ml-I~v=Pe&7y@z}O7K z!nWNViB~9?y9?Y_idOm2NfDbF!3aOuN%ioWErnu1uSP;dWhAf^S=Be*D(bo;M?Bb0 zf#nCAUl4j8Jplb~_KzcG=y$Q}&G^ZJ5&3xq{^kyfah!v0ng~A-(gY#e3?YW!5MqQy zndy8&%=-wj{u1=@1R-|#6|&>r{x%^Fymvw3(pi*ouNrg1Lk&RueL?oRB4# z;dq#krTBg+u9qR*vN1xI7ZI|uhLBV4B4icHT#frR$ak$k$U4+-{Y!*wxQLKJoHyaT z={JN7Z6;*P03lmP2-)@oA;Yf|a{A4LjNtu_ZbEh*A!PJbLdMaK38dR=#(}!;d!CRp z+X*?_jst1VIZDWR$oF6kA&2!it|sJsJiFi=9DgL_b3Y;E!t)9FJnD1teS}nqU4 zD{mv@s_SsPOUM`BCgj>MAzykB2lDz7zWXxj@D;qj0cG8I7a=#}{+7!K!Dr-lJiBv@ zkh^|K$UVymxpxC0_l*#8|LcT2fa?d4$JYmNJc9#i9^8flZTSZB`6kMLs2;}?ggo3% z$RiavknYhU94P;>RfK%&2qE7I6Y>Pgd*V1DPvQD$Ga=6`z=5>i#W&v_A>{iBLY}>g zkRKc+Q2k zAFBv?tDcbG;r{KP5b}q$g#772Lf%1r{(}4eL4)6Whma3mBIF~q=wi{w1Nc*Abe;QGY&; z<4{l=!SMv4=>vo|w&OrP%}6^(AhhinLfi4IqXx$fgm$(N+O>etZsgswoY20937v=Q ze&oLp=@;SKfenN%LHeby61waiLQh#s=&9!rx~87c)2=3T{Q*KZApIskp_@_m&=Eqn zJWuGhFrmX4LQiiebOhHs6NHXENa#4OcO%Unlyk;rLigQ3=vg?QjXcj?Md*G#p$EQC z=pj5mj5Oz?exE}<{uR$J`X!;4-c0CGHKAW@A@u6GgkCd3=(YO@{nB-Wez~2{>yhq; z+X%f8-`(^ZLT^F7Uqd~<_Aa5f-bd(dNPh?3-?fd%*H-hp})ZS4IFQ_;P{Zx zUm}nHm>~4mj}!V^Jp0{Ug#Lal4%F*EQQtol;lR5;o=@n1q0Dz)CG>y7IPmP<1vuU& z^u2wAzW*?xAE2xc&mr_9eE0D-LXUM5dK_sd=MtJ7zD;Y^Pc&T^EE4TN~EUG&m}P3ui9?-6-|j^6tLhyIE4 z`_K74czN!#E$p`H++#8@Wr!&FD>U z;MkAnSK-+qJi8U&c-a}x&cU%3$GtcvaID7Bj$<6h1{^HEL3Xh8IBr26PvAI=;~8O< zd_JUlk1SVxo-9_~f^v;G>&Rm9IkH%4AqS;8vY0=YbPG?C5-Ek}M=$_9PL{Igs^62t zs(vzn^8wXw@y<_{skV?6k{$2fBMq9vB#Cn`j)ZtUt2^AST}$?$9`(YtRLkms>kEW4 zNjtvn7hGfk&I^PzY3E)dryy+y?$>aaqW&*UT_XIP^s{T}F0z(A$NM?*cRwc!`R7PK z|5Y*{u&R*X{hXxGo;rL}g`*OAqfGLZTphlQ>t`6;#a{u2E#yo1?ow5hoP|0aQtApg zA0-0}M(P!0Ii4SYuhD+wIUm;yu5GL?nltTGaLp}!q*FpY$aw_WP=N6LlaPDQ#aJHaLZGhcI z`TZ)gj-?Uj5R07d=cEPqt(ZcsM4Ama*5JF1I1d6(>yd6FXdr_$i^O$g5P1#ayb<^r zLHn*`&*k(uvuCV*`8G2;mfM}0`j|b}{+VnPub;YxwRgtRBDb5tfVG*O^KITr82mb< zJJ5dC=G=GMTgd=B)JC#GgGo@XzZ}%okO8FG$Y>b#Vn;v!0qI7aHH?k{{{-4pi+lDg ze-xwME7(2KGa6>kW%?IZlV-H7QYs+}aSr9bk&XaoIK%^_88~3ybtB(4^t*21by6bt zneUMvRtLP_#iyoztZtmT1GLQUH{g5_^vCG7<78(%+m$;G<9sN0uy5FL0lpu^`7k@n zhkxoA>UIG6twkHh(4MDpJe8xdXFwk^&%%3_<^ZER&}|vg9Lyd2aXt^v&j#%>e#iO+ zyJu&{pB}-%`bhr#ZCtZ_<#X;^c7HCeFJ=d>SvfO~4_-!H58z<=vpiY*eK=~-7P&ow zYwCA^V>o~2k7CMylPmW%=*YdfYZZ~mqq%FQgZ3oyf~pm=P86;wQPJP$ zo^wP^|D3z#iJN|qyA}ux8*|qpadM&DwTc+IhTOHBf7j^Fy+h*@Lz}}}#z%LAw~X$b z*c~3-67Cw^F}7!7Xgs`dbo0>o&hVDO9m6AMh7(<-;o8P@V`Xh)rXk!tx^r-3bGWA} zJb&k&iEZJ*otwj>6WfNycUOfM4owVBoH;fW-aWcy;*7!ZA^F>6O-*fh+0gjbq43JV z?R!Rsc5WXHx9lC<-o9ykbmy7-s>b)URxKY|)j2w{IiEul?(sj&o~=aQ!=pRHHC45_ zR8Song@A1@8G=i&3H;qm!cYz!$I~716?;2DcH?>!&%<*19WcAxBc~q6lZAM*S^j>f z{KX)?93~^=Oxz`qz7*$L(n!)cD&?yTX~45?x#U5lWM%e1MK(<4qcoQDHe3(ln!Op7 z?^*qJ%V`#(tO>lGKnY{G4&yni+XOZO2a$?B$(NfXHTc!y$uhZyTjjSak#0N68NuC7 zT#e#=3t+&Wwv$bA>vtmeeJF1n=~{7KjO6 z%%>LkX=o*F07?g%)CH9FAc}GyRzdTy4>+GJ03a4&muvv~M@s?X<=8`C34fuhptZG{ ztbsS-(_m4vo@@YUZz31Kdh~X3Gr5u+Ax|R~^Nr*(ayhw>+&~^CUnM_7M6~0C^bRLDBHeG<&ql*w;et<5aOX)JY zoUWiNDfW`+sdP16L)X&N=sLO{drpINBi%$d(;>QrZl&AkFg=}arz3O+-APC37?iul z>25kf_t3rc47!h=Nza01-Z}JK$Yu7^1N0z0L=V&R=>_y(=;!DWdLd#Nf1X}MFQ%8! zOX+3wa(V^5k{+d3(J#<1(yQq;^ji8Q$o0NVze2C4H_)%r8|h8-W_k<#8oia?MsLTK zA^I?Vgg#0iqmR>X(Qni5&?o4V^eOr@eTM!U z{Vx3;{XTt`K1Y8*pQk^BPU4GDWqXHpAo>3j5j`T_lrendZ} z$LMjfYUiGj5%rEeBNM}8BWG&1jt}k~+BCXjqh@ducr3e;_Us(4sjEq9CWc2g&wSF5 zdy~qY)46jdckalYJ9Fo*+__sh*VZcMWbV7Vq;g-Ezt32PM<)h14-btG?H=AeF}ibf zx7aZg!h!0DqdSJS4(eI9`D&RyQB8d=Pr17K+)MdJD}O9sY6iCq57*YzBmE96{P$hoeNb6uf+b%iqO z3T4z4%BU-pQCBFVu22SiaOc`vUnrx#P)2>BjQT?W(s9w3T0#p zWx$tt4nmni8JR*EnL-(vLK%&PG8zkIG#1KeER@k$D5J4ZMq{Cj#zGnCTGftW%mRm4 z4@uT^%M2!2TdNe4s!isKPSw^mBz0#Df#d9+7$4ldTfKD4_~7=5J>%$_Lu1=CgX80) zXN(MOnULhGJ!4w=JU+a2+l2CR^XM5nm8*@IZ7NrL#y0PiORjB{S!EKl)ZD$yDskVa z+;_?>GFjUxv&dv^SB>(#t5z=;w0YwQD_toSH+#km`R8&S3aMB%lux@GG-x#D(Ypsn zbVK{VM~8M!3=fW|hjxrjoVj~wLJgLW{=RcU8X6hefwOw|o=w{(z{unblC?D=1K#f3 zU7daqS&R?w-o9gSVq5N^(hRgiKQ=x(Hab3mdGO$f@-o?=9U0v^ylHR*Q*cf0a&%lj zyc5~%9@@mxim2k~PHFcrCh~*h%6Iij+mrS3u#ilmD{UIxxpjOGt181|vR;8wGA$1@ z$z)m{XmD1bm`r!e)j=tHHlm?MRyTIT{tQj%$A`9z4DHLk%ik#Pl>9S2%DGV8&L4r(9X@noAwkS z&{eN|-K9`XvOAYcw?Zv-HOhTmP5xeiLtRa$W^m`$5ulTi3cHetL(Z%|sTAGNsTAGN zseIg!Be{mII+fA_Ie9~mf`x`23?5^Ho0T4vN+}RYrINy?kv;MZA(=`k=t!j$u%%MH n`i '', + 'img_path' => '', + 'img_url' => '', + 'img_width' => '150', + 'img_height' => '30', + 'font_path' => '', + 'expiration' => 7200, + 'word_length' => 8, + 'font_size' => 16, + 'img_id' => '', + 'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'colors' => array( + 'background' => array(255,255,255), + 'border' => array(153,102,102), + 'text' => array(204,153,153), + 'grid' => array(255,182,182) + ) + ); + + foreach ($defaults as $key => $val) + { + if ( ! is_array($data) && empty($$key)) + { + $$key = $val; + } + else + { + $$key = isset($data[$key]) ? $data[$key] : $val; + } + } + + if ($img_path === '' OR $img_url === '' + OR ! is_dir($img_path) OR ! is_really_writable($img_path) + OR ! extension_loaded('gd')) + { + return FALSE; + } + + // ----------------------------------- + // Remove old images + // ----------------------------------- + + $now = microtime(TRUE); + + $current_dir = @opendir($img_path); + while ($filename = @readdir($current_dir)) + { + if (in_array(substr($filename, -4), array('.jpg', '.png')) + && (str_replace(array('.jpg', '.png'), '', $filename) + $expiration) < $now) + { + @unlink($img_path.$filename); + } + } + + @closedir($current_dir); + + // ----------------------------------- + // Do we have a "word" yet? + // ----------------------------------- + + if (empty($word)) + { + $word = ''; + $pool_length = strlen($pool); + $rand_max = $pool_length - 1; + + // PHP7 or a suitable polyfill + if (function_exists('random_int')) + { + try + { + for ($i = 0; $i < $word_length; $i++) + { + $word .= $pool[random_int(0, $rand_max)]; + } + } + catch (Exception $e) + { + // This means fallback to the next possible + // alternative to random_int() + $word = ''; + } + } + } + + if (empty($word)) + { + // Nobody will have a larger character pool than + // 256 characters, but let's handle it just in case ... + // + // No, I do not care that the fallback to mt_rand() can + // handle it; if you trigger this, you're very obviously + // trying to break it. -- Narf + if ($pool_length > 256) + { + return FALSE; + } + + // We'll try using the operating system's PRNG first, + // which we can access through CI_Security::get_random_bytes() + $security = get_instance()->security; + + // To avoid numerous get_random_bytes() calls, we'll + // just try fetching as much bytes as we need at once. + if (($bytes = $security->get_random_bytes($pool_length)) !== FALSE) + { + $byte_index = $word_index = 0; + while ($word_index < $word_length) + { + // Do we have more random data to use? + // It could be exhausted by previous iterations + // ignoring bytes higher than $rand_max. + if ($byte_index === $pool_length) + { + // No failures should be possible if the + // first get_random_bytes() call didn't + // return FALSE, but still ... + for ($i = 0; $i < 5; $i++) + { + if (($bytes = $security->get_random_bytes($pool_length)) === FALSE) + { + continue; + } + + $byte_index = 0; + break; + } + + if ($bytes === FALSE) + { + // Sadly, this means fallback to mt_rand() + $word = ''; + break; + } + } + + list(, $rand_index) = unpack('C', $bytes[$byte_index++]); + if ($rand_index > $rand_max) + { + continue; + } + + $word .= $pool[$rand_index]; + $word_index++; + } + } + } + + if (empty($word)) + { + for ($i = 0; $i < $word_length; $i++) + { + $word .= $pool[mt_rand(0, $rand_max)]; + } + } + elseif ( ! is_string($word)) + { + $word = (string) $word; + } + + // ----------------------------------- + // Determine angle and position + // ----------------------------------- + $length = strlen($word); + $angle = ($length >= 6) ? mt_rand(-($length-6), ($length-6)) : 0; + $x_axis = mt_rand(6, (360/$length)-16); + $y_axis = ($angle >= 0) ? mt_rand($img_height, $img_width) : mt_rand(6, $img_height); + + // Create image + // PHP.net recommends imagecreatetruecolor(), but it isn't always available + $im = function_exists('imagecreatetruecolor') + ? imagecreatetruecolor($img_width, $img_height) + : imagecreate($img_width, $img_height); + + // ----------------------------------- + // Assign colors + // ---------------------------------- + + is_array($colors) OR $colors = $defaults['colors']; + + foreach (array_keys($defaults['colors']) as $key) + { + // Check for a possible missing value + is_array($colors[$key]) OR $colors[$key] = $defaults['colors'][$key]; + $colors[$key] = imagecolorallocate($im, $colors[$key][0], $colors[$key][1], $colors[$key][2]); + } + + // Create the rectangle + ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $colors['background']); + + // ----------------------------------- + // Create the spiral pattern + // ----------------------------------- + $theta = 1; + $thetac = 7; + $radius = 16; + $circles = 20; + $points = 32; + + for ($i = 0, $cp = ($circles * $points) - 1; $i < $cp; $i++) + { + $theta += $thetac; + $rad = $radius * ($i / $points); + $x = ($rad * cos($theta)) + $x_axis; + $y = ($rad * sin($theta)) + $y_axis; + $theta += $thetac; + $rad1 = $radius * (($i + 1) / $points); + $x1 = ($rad1 * cos($theta)) + $x_axis; + $y1 = ($rad1 * sin($theta)) + $y_axis; + imageline($im, $x, $y, $x1, $y1, $colors['grid']); + $theta -= $thetac; + } + + // ----------------------------------- + // Write the text + // ----------------------------------- + + $use_font = ($font_path !== '' && file_exists($font_path) && function_exists('imagettftext')); + if ($use_font === FALSE) + { + ($font_size > 5) && $font_size = 5; + $x = mt_rand(0, $img_width / ($length / 3)); + $y = 0; + } + else + { + ($font_size > 30) && $font_size = 30; + $x = mt_rand(0, $img_width / ($length / 1.5)); + $y = $font_size + 2; + } + + for ($i = 0; $i < $length; $i++) + { + if ($use_font === FALSE) + { + $y = mt_rand(0 , $img_height / 2); + imagestring($im, $font_size, $x, $y, $word[$i], $colors['text']); + $x += ($font_size * 2); + } + else + { + $y = mt_rand($img_height / 2, $img_height - 3); + imagettftext($im, $font_size, $angle, $x, $y, $colors['text'], $font_path, $word[$i]); + $x += $font_size; + } + } + + // Create the border + imagerectangle($im, 0, 0, $img_width - 1, $img_height - 1, $colors['border']); + + // ----------------------------------- + // Generate the image + // ----------------------------------- + $img_url = rtrim($img_url, '/').'/'; + + if (function_exists('imagejpeg')) + { + $img_filename = $now.'.jpg'; + imagejpeg($im, $img_path.$img_filename); + } + elseif (function_exists('imagepng')) + { + $img_filename = $now.'.png'; + imagepng($im, $img_path.$img_filename); + } + else + { + return FALSE; + } + + $img = ' '; + ImageDestroy($im); + + return array('word' => $word, 'time' => $now, 'image' => $img, 'filename' => $img_filename); + } +} diff --git a/system/helpers/cookie_helper.php b/system/helpers/cookie_helper.php index 50ab3927..b943edba 100644 --- a/system/helpers/cookie_helper.php +++ b/system/helpers/cookie_helper.php @@ -6,8 +6,7 @@ * * This content is released under the MIT License (MIT) * - * Copyright (c) 2014-2019 British Columbia Institute of Technology - * Copyright (c) 2019-2020 CodeIgniter Foundation + * Copyright (c) 2014 - 2017, British Columbia Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -27,23 +26,30 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * - * @package CodeIgniter - * @author CodeIgniter Dev Team - * @copyright 2019-2020 CodeIgniter Foundation - * @license https://opensource.org/licenses/MIT MIT License - * @link https://codeigniter.com - * @since Version 4.0.0 + * @package CodeIgniter + * @author EllisLab Dev Team + * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/) + * @copyright Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/) + * @license http://opensource.org/licenses/MIT MIT License + * @link https://codeigniter.com + * @since Version 1.0.0 * @filesource */ - -// -------------------------------------------------------------------- +defined('BASEPATH') OR exit('No direct script access allowed'); /** * CodeIgniter Cookie Helpers * - * @package CodeIgniter + * @package CodeIgniter + * @subpackage Helpers + * @category Helpers + * @author EllisLab Dev Team + * @link https://codeigniter.com/user_guide/helpers/cookie_helper.html */ -if (! function_exists('set_cookie')) + +// ------------------------------------------------------------------------ + +if ( ! function_exists('set_cookie')) { /** * Set cookie @@ -51,73 +57,57 @@ * Accepts seven parameters, or you can submit an associative * array in the first parameter containing all the values. * - * @param string|array $name Cookie name or array containing binds - * @param string $value The value of the cookie - * @param string $expire The number of seconds until expiration - * @param string $domain For site-wide cookie. - * Usually: .yourdomain.com - * @param string $path The cookie path - * @param string $prefix The cookie prefix - * @param boolean $secure True makes the cookie secure - * @param boolean $httpOnly True makes the cookie accessible via - * http(s) only (no javascript) - * - * @see (\Config\Services::response())->setCookie() - * @see \CodeIgniter\HTTP\Response::setCookie() + * @param mixed + * @param string the value of the cookie + * @param string the number of seconds until expiration + * @param string the cookie domain. Usually: .yourdomain.com + * @param string the cookie path + * @param string the cookie prefix + * @param bool true makes the cookie secure + * @param bool true makes the cookie accessible via http(s) only (no javascript) + * @return void */ - function set_cookie($name, string $value = '', string $expire = '', string $domain = '', string $path = '/', string $prefix = '', bool $secure = false, bool $httpOnly = false) + function set_cookie($name, $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = NULL, $httponly = NULL) { - // The following line shows as a syntax error in NetBeans IDE - //(\Config\Services::response())->setcookie - $response = \Config\Services::response(); - $response->setcookie($name, $value, $expire, $domain, $path, $prefix, $secure, $httpOnly); + // Set the config file options + get_instance()->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure, $httponly); } } -//-------------------------------------------------------------------- +// -------------------------------------------------------------------- -if (! function_exists('get_cookie')) +if ( ! function_exists('get_cookie')) { /** * Fetch an item from the COOKIE array * - * @param string $index - * @param boolean $xssClean - * - * @see (\Config\Services::request())->getCookie() - * @see \CodeIgniter\HTTP\IncomingRequest::getCookie() - * @return mixed + * @param string + * @param bool + * @return mixed */ - function get_cookie($index, bool $xssClean = false) + function get_cookie($index, $xss_clean = NULL) { - $app = config(\Config\App::class); - $appCookiePrefix = $app->cookiePrefix; - $prefix = isset($_COOKIE[$index]) ? '' : $appCookiePrefix; - - $request = \Config\Services::request(); - $filter = true === $xssClean ? FILTER_SANITIZE_STRING : null; - - return $request->getCookie($prefix . $index, $filter); + is_bool($xss_clean) OR $xss_clean = (config_item('global_xss_filtering') === TRUE); + $prefix = isset($_COOKIE[$index]) ? '' : config_item('cookie_prefix'); + return get_instance()->input->cookie($prefix.$index, $xss_clean); } } -//-------------------------------------------------------------------- +// -------------------------------------------------------------------- -if (! function_exists('delete_cookie')) +if ( ! function_exists('delete_cookie')) { /** * Delete a COOKIE * - * @param mixed $name - * @param string $domain the cookie domain. Usually: .yourdomain.com - * @param string $path the cookie path - * @param string $prefix the cookie prefix - * @see (\Config\Services::response())->setCookie() - * @see \CodeIgniter\HTTP\Response::setcookie() - * @return void + * @param mixed + * @param string the cookie domain. Usually: .yourdomain.com + * @param string the cookie path + * @param string the cookie prefix + * @return void */ - function delete_cookie($name, string $domain = '', string $path = '/', string $prefix = '') + function delete_cookie($name, $domain = '', $path = '/', $prefix = '') { - \Config\Services::response()->deleteCookie($name, $domain, $path, $prefix); + set_cookie($name, '', '', $domain, $path, $prefix); } } diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php index 1951d253..bb150426 100644 --- a/system/helpers/date_helper.php +++ b/system/helpers/date_helper.php @@ -6,8 +6,7 @@ * * This content is released under the MIT License (MIT) * - * Copyright (c) 2014-2019 British Columbia Institute of Technology - * Copyright (c) 2019-2020 CodeIgniter Foundation + * Copyright (c) 2014 - 2017, British Columbia Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -27,39 +26,48 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * - * @package CodeIgniter - * @author CodeIgniter Dev Team - * @copyright 2019-2020 CodeIgniter Foundation - * @license https://opensource.org/licenses/MIT MIT License - * @link https://codeigniter.com - * @since Version 4.0.0 + * @package CodeIgniter + * @author EllisLab Dev Team + * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/) + * @copyright Copyright (c) 2014 - 2017, British Columbia Institute of Technology (http://bcit.ca/) + * @license http://opensource.org/licenses/MIT MIT License + * @link https://codeigniter.com + * @since Version 1.0.0 * @filesource */ +defined('BASEPATH') OR exit('No direct script access allowed'); /** * CodeIgniter Date Helpers * - * @package CodeIgniter + * @package CodeIgniter + * @subpackage Helpers + * @category Helpers + * @author EllisLab Dev Team + * @link https://codeigniter.com/user_guide/helpers/date_helper.html */ -if (! function_exists('now')) +// ------------------------------------------------------------------------ + +if ( ! function_exists('now')) { /** * Get "now" time * * Returns time() based on the timezone parameter or on the - * app_timezone() setting - * - * @param string $timezone + * "time_reference" setting * - * @return integer - * @throws \Exception + * @param string + * @return int */ - function now(string $timezone = null): int + function now($timezone = NULL) { - $timezone = empty($timezone) ? app_timezone() : $timezone; + if (empty($timezone)) + { + $timezone = config_item('time_reference'); + } - if ($timezone === 'local' || $timezone === date_default_timezone_get()) + if ($timezone === 'local' OR $timezone === date_default_timezone_get()) { return time(); } @@ -71,32 +79,664 @@ function now(string $timezone = null): int } } -if (! function_exists('timezone_select')) +// ------------------------------------------------------------------------ + +if ( ! function_exists('mdate')) +{ + /** + * Convert MySQL Style Datecodes + * + * This function is identical to PHPs date() function, + * except that it allows date codes to be formatted using + * the MySQL style, where each code letter is preceded + * with a percent sign: %Y %m %d etc... + * + * The benefit of doing dates this way is that you don't + * have to worry about escaping your text letters that + * match the date codes. + * + * @param string + * @param int + * @return int + */ + function mdate($datestr = '', $time = '') + { + if ($datestr === '') + { + return ''; + } + elseif (empty($time)) + { + $time = now(); + } + + $datestr = str_replace( + '%\\', + '', + preg_replace('/([a-z]+?){1}/i', '\\\\\\1', $datestr) + ); + + return date($datestr, $time); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('standard_date')) +{ + /** + * Standard Date + * + * Returns a date formatted according to the submitted standard. + * + * As of PHP 5.2, the DateTime extension provides constants that + * serve for the exact same purpose and are used with date(). + * + * @todo Remove in version 3.1+. + * @deprecated 3.0.0 Use PHP's native date() instead. + * @link http://www.php.net/manual/en/class.datetime.php#datetime.constants.types + * + * @example date(DATE_RFC822, now()); // default + * @example date(DATE_W3C, $time); // a different format and time + * + * @param string $fmt = 'DATE_RFC822' the chosen format + * @param int $time = NULL Unix timestamp + * @return string + */ + function standard_date($fmt = 'DATE_RFC822', $time = NULL) + { + if (empty($time)) + { + $time = now(); + } + + // Procedural style pre-defined constants from the DateTime extension + if (strpos($fmt, 'DATE_') !== 0 OR defined($fmt) === FALSE) + { + return FALSE; + } + + return date(constant($fmt), $time); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('timespan')) +{ + /** + * Timespan + * + * Returns a span of seconds in this format: + * 10 days 14 hours 36 minutes 47 seconds + * + * @param int a number of seconds + * @param int Unix timestamp + * @param int a number of display units + * @return string + */ + function timespan($seconds = 1, $time = '', $units = 7) + { + $CI =& get_instance(); + $CI->lang->load('date'); + + is_numeric($seconds) OR $seconds = 1; + is_numeric($time) OR $time = time(); + is_numeric($units) OR $units = 7; + + $seconds = ($time <= $seconds) ? 1 : $time - $seconds; + + $str = array(); + $years = floor($seconds / 31557600); + + if ($years > 0) + { + $str[] = $years.' '.$CI->lang->line($years > 1 ? 'date_years' : 'date_year'); + } + + $seconds -= $years * 31557600; + $months = floor($seconds / 2629743); + + if (count($str) < $units && ($years > 0 OR $months > 0)) + { + if ($months > 0) + { + $str[] = $months.' '.$CI->lang->line($months > 1 ? 'date_months' : 'date_month'); + } + + $seconds -= $months * 2629743; + } + + $weeks = floor($seconds / 604800); + + if (count($str) < $units && ($years > 0 OR $months > 0 OR $weeks > 0)) + { + if ($weeks > 0) + { + $str[] = $weeks.' '.$CI->lang->line($weeks > 1 ? 'date_weeks' : 'date_week'); + } + + $seconds -= $weeks * 604800; + } + + $days = floor($seconds / 86400); + + if (count($str) < $units && ($months > 0 OR $weeks > 0 OR $days > 0)) + { + if ($days > 0) + { + $str[] = $days.' '.$CI->lang->line($days > 1 ? 'date_days' : 'date_day'); + } + + $seconds -= $days * 86400; + } + + $hours = floor($seconds / 3600); + + if (count($str) < $units && ($days > 0 OR $hours > 0)) + { + if ($hours > 0) + { + $str[] = $hours.' '.$CI->lang->line($hours > 1 ? 'date_hours' : 'date_hour'); + } + + $seconds -= $hours * 3600; + } + + $minutes = floor($seconds / 60); + + if (count($str) < $units && ($days > 0 OR $hours > 0 OR $minutes > 0)) + { + if ($minutes > 0) + { + $str[] = $minutes.' '.$CI->lang->line($minutes > 1 ? 'date_minutes' : 'date_minute'); + } + + $seconds -= $minutes * 60; + } + + if (count($str) === 0) + { + $str[] = $seconds.' '.$CI->lang->line($seconds > 1 ? 'date_seconds' : 'date_second'); + } + + return implode(', ', $str); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('days_in_month')) +{ + /** + * Number of days in a month + * + * Takes a month/year as input and returns the number of days + * for the given month/year. Takes leap years into consideration. + * + * @param int a numeric month + * @param int a numeric year + * @return int + */ + function days_in_month($month = 0, $year = '') + { + if ($month < 1 OR $month > 12) + { + return 0; + } + elseif ( ! is_numeric($year) OR strlen($year) !== 4) + { + $year = date('Y'); + } + + if (defined('CAL_GREGORIAN')) + { + return cal_days_in_month(CAL_GREGORIAN, $month, $year); + } + + if ($year >= 1970) + { + return (int) date('t', mktime(12, 0, 0, $month, 1, $year)); + } + + if ($month == 2) + { + if ($year % 400 === 0 OR ($year % 4 === 0 && $year % 100 !== 0)) + { + return 29; + } + } + + $days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + return $days_in_month[$month - 1]; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('local_to_gmt')) +{ + /** + * Converts a local Unix timestamp to GMT + * + * @param int Unix timestamp + * @return int + */ + function local_to_gmt($time = '') + { + if ($time === '') + { + $time = time(); + } + + return mktime( + gmdate('G', $time), + gmdate('i', $time), + gmdate('s', $time), + gmdate('n', $time), + gmdate('j', $time), + gmdate('Y', $time) + ); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('gmt_to_local')) { /** - * Generates a select field of all available timezones + * Converts GMT time to a localized value * - * Returns a string with the formatted HTML + * Takes a Unix timestamp (in GMT) as input, and returns + * at the local value based on the timezone and DST setting + * submitted * - * @param string $class Optional class to apply to the select field - * @param string $default Default value for initial selection - * @param integer $what One of the DateTimeZone class constants (for listIdentifiers) - * @param string $country A two-letter ISO 3166-1 compatible country code (for listIdentifiers) + * @param int Unix timestamp + * @param string timezone + * @param bool whether DST is active + * @return int + */ + function gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE) + { + if ($time === '') + { + return now(); + } + + $time += timezones($timezone) * 3600; + + return ($dst === TRUE) ? $time + 3600 : $time; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('mysql_to_unix')) +{ + /** + * Converts a MySQL Timestamp to Unix * - * @return string - * @throws \Exception + * @param int MySQL timestamp YYYY-MM-DD HH:MM:SS + * @return int Unix timstamp */ - function timezone_select(string $class = '', string $default = '', int $what = \DateTimeZone::ALL, string $country = null): string + function mysql_to_unix($time = '') { - $timezones = \DateTimeZone::listIdentifiers($what, $country); + // We'll remove certain characters for backward compatibility + // since the formatting changed with MySQL 4.1 + // YYYY-MM-DD HH:MM:SS + + $time = str_replace(array('-', ':', ' '), '', $time); + + // YYYYMMDDHHMMSS + return mktime( + substr($time, 8, 2), + substr($time, 10, 2), + substr($time, 12, 2), + substr($time, 4, 2), + substr($time, 6, 2), + substr($time, 0, 4) + ); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('unix_to_human')) +{ + /** + * Unix to "Human" + * + * Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM + * + * @param int Unix timestamp + * @param bool whether to show seconds + * @param string format: us or euro + * @return string + */ + function unix_to_human($time = '', $seconds = FALSE, $fmt = 'us') + { + $r = date('Y', $time).'-'.date('m', $time).'-'.date('d', $time).' '; + + if ($fmt === 'us') + { + $r .= date('h', $time).':'.date('i', $time); + } + else + { + $r .= date('H', $time).':'.date('i', $time); + } + + if ($seconds) + { + $r .= ':'.date('s', $time); + } + + if ($fmt === 'us') + { + return $r.' '.date('A', $time); + } + + return $r; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('human_to_unix')) +{ + /** + * Convert "human" date to GMT + * + * Reverses the above process + * + * @param string format: us or euro + * @return int + */ + function human_to_unix($datestr = '') + { + if ($datestr === '') + { + return FALSE; + } + + $datestr = preg_replace('/\040+/', ' ', trim($datestr)); + + if ( ! preg_match('/^(\d{2}|\d{4})\-[0-9]{1,2}\-[0-9]{1,2}\s[0-9]{1,2}:[0-9]{1,2}(?::[0-9]{1,2})?(?:\s[AP]M)?$/i', $datestr)) + { + return FALSE; + } + + sscanf($datestr, '%d-%d-%d %s %s', $year, $month, $day, $time, $ampm); + sscanf($time, '%d:%d:%d', $hour, $min, $sec); + isset($sec) OR $sec = 0; + + if (isset($ampm)) + { + $ampm = strtolower($ampm); + + if ($ampm[0] === 'p' && $hour < 12) + { + $hour += 12; + } + elseif ($ampm[0] === 'a' && $hour === 12) + { + $hour = 0; + } + } + + return mktime($hour, $min, $sec, $month, $day, $year); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('nice_date')) +{ + /** + * Turns many "reasonably-date-like" strings into something + * that is actually useful. This only works for dates after unix epoch. + * + * @deprecated 3.1.3 Use DateTime::createFromFormat($input_format, $input)->format($output_format); + * @param string The terribly formatted date-like string + * @param string Date format to return (same as php date function) + * @return string + */ + function nice_date($bad_date = '', $format = FALSE) + { + if (empty($bad_date)) + { + return 'Unknown'; + } + elseif (empty($format)) + { + $format = 'U'; + } + + // Date like: YYYYMM + if (preg_match('/^\d{6}$/i', $bad_date)) + { + if (in_array(substr($bad_date, 0, 2), array('19', '20'))) + { + $year = substr($bad_date, 0, 4); + $month = substr($bad_date, 4, 2); + } + else + { + $month = substr($bad_date, 0, 2); + $year = substr($bad_date, 2, 4); + } + + return date($format, strtotime($year.'-'.$month.'-01')); + } + + // Date Like: YYYYMMDD + if (preg_match('/^\d{8}$/i', $bad_date, $matches)) + { + return DateTime::createFromFormat('Ymd', $bad_date)->format($format); + } + + // Date Like: MM-DD-YYYY __or__ M-D-YYYY (or anything in between) + if (preg_match('/^(\d{1,2})-(\d{1,2})-(\d{4})$/i', $bad_date, $matches)) + { + return date($format, strtotime($matches[3].'-'.$matches[1].'-'.$matches[2])); + } + + // Any other kind of string, when converted into UNIX time, + // produces "0 seconds after epoc..." is probably bad... + // return "Invalid Date". + if (date('U', strtotime($bad_date)) === '0') + { + return 'Invalid Date'; + } + + // It's probably a valid-ish date format already + return date($format, strtotime($bad_date)); + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('timezone_menu')) +{ + /** + * Timezone Menu + * + * Generates a drop-down menu of timezones. + * + * @param string timezone + * @param string classname + * @param string menu name + * @param mixed attributes + * @return string + */ + function timezone_menu($default = 'UTC', $class = '', $name = 'timezones', $attributes = '') + { + $CI =& get_instance(); + $CI->lang->load('date'); + + $default = ($default === 'GMT') ? 'UTC' : $default; + + $menu = ''; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('timezones')) +{ + /** + * Timezones + * + * Returns an array of timezones. This is a helper function + * for various other ones in this library + * + * @param string timezone + * @return string + */ + function timezones($tz = '') + { + // Note: Don't change the order of these even though + // some items appear to be in the wrong order + + $zones = array( + 'UM12' => -12, + 'UM11' => -11, + 'UM10' => -10, + 'UM95' => -9.5, + 'UM9' => -9, + 'UM8' => -8, + 'UM7' => -7, + 'UM6' => -6, + 'UM5' => -5, + 'UM45' => -4.5, + 'UM4' => -4, + 'UM35' => -3.5, + 'UM3' => -3, + 'UM2' => -2, + 'UM1' => -1, + 'UTC' => 0, + 'UP1' => +1, + 'UP2' => +2, + 'UP3' => +3, + 'UP35' => +3.5, + 'UP4' => +4, + 'UP45' => +4.5, + 'UP5' => +5, + 'UP55' => +5.5, + 'UP575' => +5.75, + 'UP6' => +6, + 'UP65' => +6.5, + 'UP7' => +7, + 'UP8' => +8, + 'UP875' => +8.75, + 'UP9' => +9, + 'UP95' => +9.5, + 'UP10' => +10, + 'UP105' => +10.5, + 'UP11' => +11, + 'UP115' => +11.5, + 'UP12' => +12, + 'UP1275' => +12.75, + 'UP13' => +13, + 'UP14' => +14 + ); + + if ($tz === '') + { + return $zones; + } + + return isset($zones[$tz]) ? $zones[$tz] : 0; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('date_range')) +{ + /** + * Date range + * + * Returns a list of dates within a specified period. + * + * @param int unix_start UNIX timestamp of period start date + * @param int unix_end|days UNIX timestamp of period end date + * or interval in days. + * @param mixed is_unix Specifies whether the second parameter + * is a UNIX timestamp or a day interval + * - TRUE or 'unix' for a timestamp + * - FALSE or 'days' for an interval + * @param string date_format Output date format, same as in date() + * @return array + */ + function date_range($unix_start = '', $mixed = '', $is_unix = TRUE, $format = 'Y-m-d') + { + if ($unix_start == '' OR $mixed == '' OR $format == '') + { + return FALSE; + } + + $is_unix = ! ( ! $is_unix OR $is_unix === 'days'); + + // Validate input and try strtotime() on invalid timestamps/intervals, just in case + if ( ( ! ctype_digit((string) $unix_start) && ($unix_start = @strtotime($unix_start)) === FALSE) + OR ( ! ctype_digit((string) $mixed) && ($is_unix === FALSE OR ($mixed = @strtotime($mixed)) === FALSE)) + OR ($is_unix === TRUE && $mixed < $unix_start)) + { + return FALSE; + } + + if ($is_unix && ($unix_start == $mixed OR date($format, $unix_start) === date($format, $mixed))) + { + return array(date($format, $unix_start)); + } + + $range = array(); + + $from = new DateTime(); + $from->setTimestamp($unix_start); + + if ($is_unix) + { + $arg = new DateTime(); + $arg->setTimestamp($mixed); + } + else + { + $arg = (int) $mixed; + } + + $period = new DatePeriod($from, new DateInterval('P1D'), $arg); + foreach ($period as $date) + { + $range[] = $date->format($format); + } - $buffer = "' . PHP_EOL); + return $range; } } diff --git a/system/helpers/directory_helper.php b/system/helpers/directory_helper.php new file mode 100644 index 00000000..2785241e --- /dev/null +++ b/system/helpers/directory_helper.php @@ -0,0 +1,101 @@ + 0) && is_dir($source_dir.$file)) + { + $filedata[$file] = directory_map($source_dir.$file, $new_depth, $hidden); + } + else + { + $filedata[] = $file; + } + } + + closedir($fp); + return $filedata; + } + + return FALSE; + } +} diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php new file mode 100644 index 00000000..b2a1458d --- /dev/null +++ b/system/helpers/download_helper.php @@ -0,0 +1,158 @@ + 0) + ? @rmdir($path) + : TRUE; + } +} + +// ------------------------------------------------------------------------ + +if ( ! function_exists('get_filenames')) +{ + /** + * Get Filenames + * + * Reads the specified directory and builds an array containing the filenames. + * Any sub-folders contained within the specified path are read as well. + * + * @param string path to source + * @param bool whether to include the path as part of the filename + * @param bool internal variable to determine recursion status - do not use in calls + * @return array + */ + function get_filenames($source_dir, $include_path = FALSE, $_recursion = FALSE) + { + static $_filedata = array(); + + if ($fp = @opendir($source_dir)) + { + // reset the array and make sure $source_dir has a trailing slash on the initial call + if ($_recursion === FALSE) + { + $_filedata = array(); + $source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + } + + while (FALSE !== ($file = readdir($fp))) + { + if (is_dir($source_dir.$file) && $file[0] !== '.') + { + get_filenames($source_dir.$file.DIRECTORY_SEPARATOR, $include_path, TRUE); + } + elseif ($file[0] !== '.') + { + $_filedata[] = ($include_path === TRUE) ? $source_dir.$file : $file; + } + } + + closedir($fp); + return $_filedata; + } + + return FALSE; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('get_dir_file_info')) +{ + /** + * Get Directory File Information + * + * Reads the specified directory and builds an array containing the filenames, + * filesize, dates, and permissions + * + * Any sub-folders contained within the specified path are read as well. + * + * @param string path to source + * @param bool Look only at the top level directory specified? + * @param bool internal variable to determine recursion status - do not use in calls + * @return array + */ + function get_dir_file_info($source_dir, $top_level_only = TRUE, $_recursion = FALSE) + { + static $_filedata = array(); + $relative_path = $source_dir; + + if ($fp = @opendir($source_dir)) + { + // reset the array and make sure $source_dir has a trailing slash on the initial call + if ($_recursion === FALSE) + { + $_filedata = array(); + $source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + } + + // Used to be foreach (scandir($source_dir, 1) as $file), but scandir() is simply not as fast + while (FALSE !== ($file = readdir($fp))) + { + if (is_dir($source_dir.$file) && $file[0] !== '.' && $top_level_only === FALSE) + { + get_dir_file_info($source_dir.$file.DIRECTORY_SEPARATOR, $top_level_only, TRUE); + } + elseif ($file[0] !== '.') + { + $_filedata[$file] = get_file_info($source_dir.$file); + $_filedata[$file]['relative_path'] = $relative_path; + } + } + + closedir($fp); + return $_filedata; + } + + return FALSE; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('get_file_info')) +{ + /** + * Get File Info + * + * Given a file and path, returns the name, path, size, date modified + * Second parameter allows you to explicitly declare what information you want returned + * Options are: name, server_path, size, date, readable, writable, executable, fileperms + * Returns FALSE if the file cannot be found. + * + * @param string path to file + * @param mixed array or comma separated string of information returned + * @return array + */ + function get_file_info($file, $returned_values = array('name', 'server_path', 'size', 'date')) + { + if ( ! file_exists($file)) + { + return FALSE; + } + + if (is_string($returned_values)) + { + $returned_values = explode(',', $returned_values); + } + + foreach ($returned_values as $key) + { + switch ($key) + { + case 'name': + $fileinfo['name'] = basename($file); + break; + case 'server_path': + $fileinfo['server_path'] = $file; + break; + case 'size': + $fileinfo['size'] = filesize($file); + break; + case 'date': + $fileinfo['date'] = filemtime($file); + break; + case 'readable': + $fileinfo['readable'] = is_readable($file); + break; + case 'writable': + $fileinfo['writable'] = is_really_writable($file); + break; + case 'executable': + $fileinfo['executable'] = is_executable($file); + break; + case 'fileperms': + $fileinfo['fileperms'] = fileperms($file); + break; + } + } + + return $fileinfo; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('get_mime_by_extension')) +{ + /** + * Get Mime by Extension + * + * Translates a file extension into a mime type based on config/mimes.php. + * Returns FALSE if it can't determine the type, or open the mime config file + * + * Note: this is NOT an accurate way of determining file mime types, and is here strictly as a convenience + * It should NOT be trusted, and should certainly NOT be used for security + * + * @param string $filename File name + * @return string + */ + function get_mime_by_extension($filename) + { + static $mimes; + + if ( ! is_array($mimes)) + { + $mimes = get_mimes(); + + if (empty($mimes)) + { + return FALSE; + } + } + + $extension = strtolower(substr(strrchr($filename, '.'), 1)); + + if (isset($mimes[$extension])) + { + return is_array($mimes[$extension]) + ? current($mimes[$extension]) // Multiple mime types, just give the first one + : $mimes[$extension]; + } + + return FALSE; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('symbolic_permissions')) +{ + /** + * Symbolic Permissions + * + * Takes a numeric value representing a file's permissions and returns + * standard symbolic notation representing that value + * + * @param int $perms Permissions + * @return string + */ + function symbolic_permissions($perms) + { + if (($perms & 0xC000) === 0xC000) + { + $symbolic = 's'; // Socket + } + elseif (($perms & 0xA000) === 0xA000) + { + $symbolic = 'l'; // Symbolic Link + } + elseif (($perms & 0x8000) === 0x8000) + { + $symbolic = '-'; // Regular + } + elseif (($perms & 0x6000) === 0x6000) + { + $symbolic = 'b'; // Block special + } + elseif (($perms & 0x4000) === 0x4000) + { + $symbolic = 'd'; // Directory + } + elseif (($perms & 0x2000) === 0x2000) + { + $symbolic = 'c'; // Character special + } + elseif (($perms & 0x1000) === 0x1000) + { + $symbolic = 'p'; // FIFO pipe + } + else + { + $symbolic = 'u'; // Unknown + } + + // Owner + $symbolic .= (($perms & 0x0100) ? 'r' : '-') + .(($perms & 0x0080) ? 'w' : '-') + .(($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); + + // Group + $symbolic .= (($perms & 0x0020) ? 'r' : '-') + .(($perms & 0x0010) ? 'w' : '-') + .(($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); + + // World + $symbolic .= (($perms & 0x0004) ? 'r' : '-') + .(($perms & 0x0002) ? 'w' : '-') + .(($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); + + return $symbolic; + } +} + +// -------------------------------------------------------------------- + +if ( ! function_exists('octal_permissions')) +{ + /** + * Octal Permissions + * + * Takes a numeric value representing a file's permissions and returns + * a three character string representing the file's octal permissions + * + * @param int $perms Permissions + * @return string + */ + function octal_permissions($perms) + { + return substr(sprintf('%o', $perms), -3); + } +} diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php index 5a1ad9d3..13f19631 100644 --- a/system/helpers/form_helper.php +++ b/system/helpers/form_helper.php @@ -1,5 +1,4 @@ getLocale(), $action); - } - - $action = site_url($action); + $action = $CI->config->site_url($CI->uri->uri_string()); } - - if (is_array($attributes) && array_key_exists('csrf_id', $attributes)) + // If an action is not a full URL then turn it into one + elseif (strpos($action, '://') === FALSE) { - $csrfId = $attributes['csrf_id']; - unset($attributes['csrf_id']); + $action = $CI->config->site_url($action); } - $attributes = stringify_attributes($attributes); + $attributes = _attributes_to_string($attributes); - if (stripos($attributes, 'method=') === false) + if (stripos($attributes, 'method=') === FALSE) { $attributes .= ' method="post"'; } - if (stripos($attributes, 'accept-charset=') === false) + + if (stripos($attributes, 'accept-charset=') === FALSE) { - $config = config(\Config\App::class); - $attributes .= ' accept-charset="' . strtolower($config->charset) . '"'; + $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"'; } - $form = '
\n"; - - // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites - $before = Services::filters() - ->getFilters()['before']; + $form = '\n"; - if ((in_array('csrf', $before) || array_key_exists('csrf', $before)) && strpos($action, base_url()) !== false && ! stripos($form, 'method="get"')) + if (is_array($hidden)) { - $form .= csrf_field($csrfId ?? null); + foreach ($hidden as $name => $value) + { + $form .= ''."\n"; + } } - if (is_array($hidden)) + // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites + if ($CI->config->item('csrf_protection') === TRUE && strpos($action, $CI->config->base_url()) !== FALSE && ! stripos($form, 'method="get"')) { - foreach ($hidden as $name => $value) + // Prepend/append random-length "white noise" around the CSRF + // token input, as a form of protection against BREACH attacks + if (FALSE !== ($noise = $CI->security->get_random_bytes(1))) + { + list(, $noise) = unpack('c', $noise); + } + else { - $form .= form_hidden($name, $value); + $noise = mt_rand(-128, 127); } + + // Prepend if $noise has a negative value, append if positive, do nothing for zero + $prepend = $append = ''; + if ($noise < 0) + { + $prepend = str_repeat(" ", abs($noise)); + } + elseif ($noise > 0) + { + $append = str_repeat(" ", $noise); + } + + $form .= sprintf( + '%s%s%s', + $prepend, + $CI->security->get_csrf_token_name(), + $CI->security->get_csrf_hash(), + $append, + "\n" + ); } return $form; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_open_multipart')) +if ( ! function_exists('form_open_multipart')) { /** * Form Declaration - Multipart type * * Creates the opening portion of the form, but with "multipart/form-data". * - * @param string $action The URI segments of the form destination - * @param array|string $attributes A key/value pair of attributes, or the same as a string - * @param array $hidden A key/value pair hidden data - * - * @return string + * @param string the URI segments of the form destination + * @param array a key/value pair of attributes + * @param array a key/value pair hidden data + * @return string */ - function form_open_multipart(string $action = '', $attributes = [], array $hidden = []): string + function form_open_multipart($action = '', $attributes = array(), $hidden = array()) { if (is_string($attributes)) { - $attributes .= ' enctype="' . esc('multipart/form-data', 'attr') . '"'; + $attributes .= ' enctype="multipart/form-data"'; } else { @@ -149,9 +166,9 @@ function form_open_multipart(string $action = '', $attributes = [], array $hidde } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_hidden')) +if ( ! function_exists('form_hidden')) { /** * Hidden Input Field @@ -159,17 +176,16 @@ function form_open_multipart(string $action = '', $attributes = [], array $hidde * Generates hidden fields. You can pass a simple key/value string or * an associative array with multiple values. * - * @param string|array $name Field name or associative array to create multiple fields - * @param string|array $value Field value - * @param boolean $recursing - * - * @return string + * @param mixed $name Field name + * @param string $value Field value + * @param bool $recursing + * @return string */ - function form_hidden($name, $value = '', bool $recursing = false): string + function form_hidden($name, $value = '', $recursing = FALSE) { static $form; - if ($recursing === false) + if ($recursing === FALSE) { $form = "\n"; } @@ -178,22 +194,22 @@ function form_hidden($name, $value = '', bool $recursing = false): string { foreach ($name as $key => $val) { - form_hidden($key, $val, true); + form_hidden($key, $val, TRUE); } return $form; } - if (! is_array($value)) + if ( ! is_array($value)) { - $form .= '\n"; + $form .= '\n"; } else { foreach ($value as $k => $v) { $k = is_int($k) ? '' : $k; - form_hidden($name . '[' . $k . ']', $v, true); + form_hidden($name.'['.$k.']', $v, TRUE); } } @@ -201,106 +217,97 @@ function form_hidden($name, $value = '', bool $recursing = false): string } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_input')) +if ( ! function_exists('form_input')) { /** - * Text Input Field. If 'type' is passed in the $type field, it will be - * used as the input type, for making 'email', 'phone', etc input fields. + * Text Input Field * - * @param mixed $data - * @param string $value - * @param mixed $extra - * @param string $type - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_input($data = '', string $value = '', $extra = '', string $type = 'text'): string + function form_input($data = '', $value = '', $extra = '') { - $defaults = [ - 'type' => $type, - 'name' => is_array($data) ? '' : $data, - 'value' => $value, - ]; + $defaults = array( + 'type' => 'text', + 'name' => is_array($data) ? '' : $data, + 'value' => $value + ); - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_password')) +if ( ! function_exists('form_password')) { /** * Password Field * * Identical to the input function but adds the "password" type * - * @param mixed $data - * @param string $value - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_password($data = '', string $value = '', $extra = ''): string + function form_password($data = '', $value = '', $extra = '') { - is_array($data) || $data = ['name' => $data]; - $data['type'] = 'password'; - + is_array($data) OR $data = array('name' => $data); + $data['type'] = 'password'; return form_input($data, $value, $extra); } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_upload')) +if ( ! function_exists('form_upload')) { /** * Upload Field * * Identical to the input function but adds the "file" type * - * @param mixed $data - * @param string $value - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_upload($data = '', string $value = '', $extra = ''): string + function form_upload($data = '', $value = '', $extra = '') { - $defaults = [ - 'type' => 'file', - 'name' => '', - ]; - is_array($data) || $data = ['name' => $data]; - $data['type'] = 'file'; - - return '\n"; + $defaults = array('type' => 'file', 'name' => ''); + is_array($data) OR $data = array('name' => $data); + $data['type'] = 'file'; + + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_textarea')) +if ( ! function_exists('form_textarea')) { /** * Textarea field * - * @param mixed $data - * @param string $value - * @param mixed $extra - * - * @return string + * @param mixed $data + * @param string $value + * @param mixed $extra + * @return string */ - function form_textarea($data = '', string $value = '', $extra = ''): string + function form_textarea($data = '', $value = '', $extra = '') { - $defaults = [ + $defaults = array( 'name' => is_array($data) ? '' : $data, 'cols' => '40', - 'rows' => '10', - ]; - if (! is_array($data) || ! isset($data['value'])) + 'rows' => '10' + ); + + if ( ! is_array($data) OR ! isset($data['value'])) { $val = $value; } @@ -310,31 +317,29 @@ function form_textarea($data = '', string $value = '', $extra = ''): string unset($data['value']); // textareas don't use the value attribute } - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_multiselect')) +if ( ! function_exists('form_multiselect')) { /** * Multi-select menu * - * @param string $name - * @param array $options - * @param array $selected - * @param mixed $extra - * - * @return string + * @param string + * @param array + * @param mixed + * @param mixed + * @return string */ - function form_multiselect(string $name = '', array $options = [], array $selected = [], $extra = ''): string + function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '') { - $extra = stringify_attributes($extra); - - if (stripos($extra, 'multiple') === false) + $extra = _attributes_to_string($extra); + if (stripos($extra, 'multiple') === FALSE) { $extra .= ' multiple="multiple"'; } @@ -343,23 +348,23 @@ function form_multiselect(string $name = '', array $options = [], array $selecte } } -//-------------------------------------------------------------------- +// -------------------------------------------------------------------- -if (! function_exists('form_dropdown')) +if ( ! function_exists('form_dropdown')) { /** * Drop-down Menu * - * @param mixed $data - * @param mixed $options - * @param mixed $selected - * @param mixed $extra - * - * @return string + * @param mixed $data + * @param mixed $options + * @param mixed $selected + * @param mixed $extra + * @return string */ - function form_dropdown($data = '', $options = [], $selected = [], $extra = ''): string + function form_dropdown($data = '', $options = array(), $selected = array(), $extra = '') { - $defaults = []; + $defaults = array(); + if (is_array($data)) { if (isset($data['selected'])) @@ -367,6 +372,7 @@ function form_dropdown($data = '', $options = [], $selected = [], $extra = ''): $selected = $data['selected']; unset($data['selected']); // select tags don't have a selected attribute } + if (isset($data['options'])) { $options = $data['options']; @@ -375,11 +381,11 @@ function form_dropdown($data = '', $options = [], $selected = [], $extra = ''): } else { - $defaults = ['name' => $data]; + $defaults = array('name' => $data); } - is_array($selected) || $selected = [$selected]; - is_array($options) || $options = [$options]; + is_array($selected) OR $selected = array($selected); + is_array($options) OR $options = array($options); // If no selected state was submitted we will attempt to set it automatically if (empty($selected)) @@ -388,74 +394,77 @@ function form_dropdown($data = '', $options = [], $selected = [], $extra = ''): { if (isset($data['name'], $_POST[$data['name']])) { - $selected = [$_POST[$data['name']]]; + $selected = array($_POST[$data['name']]); } } elseif (isset($_POST[$data])) { - $selected = [$_POST[$data]]; + $selected = array($_POST[$data]); } } - $extra = stringify_attributes($extra); - $multiple = (count($selected) > 1 && stripos($extra, 'multiple') === false) ? ' multiple="multiple"' : ''; - $form = '\n"; + foreach ($options as $key => $val) { $key = (string) $key; + if (is_array($val)) { if (empty($val)) { continue; } - $form .= '\n"; + + $form .= '\n"; + foreach ($val as $optgroup_key => $optgroup_val) { - $sel = in_array($optgroup_key, $selected) ? ' selected="selected"' : ''; - $form .= '\n"; + $sel = in_array($optgroup_key, $selected) ? ' selected="selected"' : ''; + $form .= '\n"; } + $form .= "\n"; } else { - $form .= '\n"; + $form .= '\n"; } } - return $form . "\n"; + return $form."\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_checkbox')) +if ( ! function_exists('form_checkbox')) { /** * Checkbox Field * - * @param mixed $data - * @param string $value - * @param boolean $checked - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param bool + * @param mixed + * @return string */ - function form_checkbox($data = '', string $value = '', bool $checked = false, $extra = ''): string + function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '') { - $defaults = [ - 'type' => 'checkbox', - 'name' => ( ! is_array($data) ? $data : ''), - 'value' => $value, - ]; + $defaults = array('type' => 'checkbox', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value); if (is_array($data) && array_key_exists('checked', $data)) { $checked = $data['checked']; - if ($checked === false) + + if ($checked == FALSE) { unset($data['checked']); } @@ -465,7 +474,7 @@ function form_checkbox($data = '', string $value = '', bool $checked = false, $e } } - if ($checked === true) + if ($checked == TRUE) { $defaults['checked'] = 'checked'; } @@ -474,102 +483,98 @@ function form_checkbox($data = '', string $value = '', bool $checked = false, $e unset($defaults['checked']); } - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_radio')) +if ( ! function_exists('form_radio')) { /** * Radio Button * - * @param mixed $data - * @param string $value - * @param boolean $checked - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param bool + * @param mixed + * @return string */ - function form_radio($data = '', string $value = '', bool $checked = false, $extra = ''): string + function form_radio($data = '', $value = '', $checked = FALSE, $extra = '') { - is_array($data) || $data = ['name' => $data]; - $data['type'] = 'radio'; + is_array($data) OR $data = array('name' => $data); + $data['type'] = 'radio'; return form_checkbox($data, $value, $checked, $extra); } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_submit')) +if ( ! function_exists('form_submit')) { /** * Submit Button * - * @param mixed $data - * @param string $value - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_submit($data = '', string $value = '', $extra = ''): string + function form_submit($data = '', $value = '', $extra = '') { - $defaults = [ - 'type' => 'submit', - 'name' => is_array($data) ? '' : $data, - 'value' => $value, - ]; + $defaults = array( + 'type' => 'submit', + 'name' => is_array($data) ? '' : $data, + 'value' => $value + ); - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_reset')) +if ( ! function_exists('form_reset')) { /** * Reset Button * - * @param mixed $data - * @param string $value - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_reset($data = '', string $value = '', $extra = ''): string + function form_reset($data = '', $value = '', $extra = '') { - $defaults = [ - 'type' => 'reset', - 'name' => is_array($data) ? '' : $data, - 'value' => $value, - ]; + $defaults = array( + 'type' => 'reset', + 'name' => is_array($data) ? '' : $data, + 'value' => $value + ); - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_button')) +if ( ! function_exists('form_button')) { /** * Form Button * - * @param mixed $data - * @param string $content - * @param mixed $extra - * - * @return string + * @param mixed + * @param string + * @param mixed + * @return string */ - function form_button($data = '', string $content = '', $extra = ''): string + function form_button($data = '', $content = '', $extra = '') { - $defaults = [ + $defaults = array( 'name' => is_array($data) ? '' : $data, - 'type' => 'button', - ]; + 'type' => 'button' + ); if (is_array($data) && isset($data['content'])) { @@ -577,181 +582,149 @@ function form_button($data = '', string $content = '', $extra = ''): string unset($data['content']); // content is not an attribute } - return '\n"; + return '\n"; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_label')) +if ( ! function_exists('form_label')) { /** * Form Label Tag * - * @param string $label_text The text to appear onscreen - * @param string $id The id the label applies to - * @param array $attributes Additional attributes - * - * @return string + * @param string The text to appear onscreen + * @param string The id the label applies to + * @param mixed Additional attributes + * @return string */ - function form_label(string $label_text = '', string $id = '', array $attributes = []): string + function form_label($label_text = '', $id = '', $attributes = array()) { + $label = ' $val) - { - $label .= ' ' . $key . '="' . $val . '"'; - } - } + $label .= _attributes_to_string($attributes); - return $label . '>' . $label_text . ''; + return $label.'>'.$label_text.''; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_datalist')) +if ( ! function_exists('form_fieldset')) { /** - * Datalist - * - * The element specifies a list of pre-defined options for an element. - * Users will see a drop-down list of pre-defined options as they input data. - * The list attribute of the element, must refer to the id attribute of the element. + * Fieldset Tag * - * @param string $name - * @param string $value - * @param array $options + * Used to produce
text. To close fieldset + * use form_fieldset_close() * - * @return string + * @param string The legend text + * @param array Additional attributes + * @return string */ - function form_datalist(string $name, string $value, array $options): string + function form_fieldset($legend_text = '', $attributes = array()) { - $data = [ - 'type' => 'text', - 'name' => $name, - 'list' => $name . '_list', - 'value' => $value, - ]; - - $out = form_input($data) . "\n"; - $out .= ""; - - foreach ($options as $option) + $fieldset = '\n"; + if ($legend_text !== '') { - $out .= "' . "\n"); + return $fieldset; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_fieldset')) +if ( ! function_exists('form_fieldset_close')) { /** - * Fieldset Tag - * - * Used to produce
text. To close fieldset - * use form_fieldset_close() - * - * @param string $legend_text The legend text - * @param array $attributes Additional attributes + * Fieldset Close Tag * - * @return string + * @param string + * @return string */ - function form_fieldset(string $legend_text = '', array $attributes = []): string + function form_fieldset_close($extra = '') { - $fieldset = '\n"; - - if ($legend_text !== '') - { - return $fieldset . '' . $legend_text . "\n"; - } - - return $fieldset; + return '
'.$extra; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_fieldset_close')) +if ( ! function_exists('form_close')) { /** - * Fieldset Close Tag - * - * @param string $extra + * Form Close Tag * - * @return string + * @param string + * @return string */ - function form_fieldset_close(string $extra = ''): string + function form_close($extra = '') { - return '
' . $extra; + return ''.$extra; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('form_close')) +if ( ! function_exists('form_prep')) { /** - * Form Close Tag + * Form Prep * - * @param string $extra + * Formats text so that it can be safely placed in a form field in the event it has HTML tags. * - * @return string + * @deprecated 3.0.0 An alias for html_escape() + * @param string|string[] $str Value to escape + * @return string|string[] Escaped values */ - function form_close(string $extra = ''): string + function form_prep($str) { - return '' . $extra; + return html_escape($str, TRUE); } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('set_value')) +if ( ! function_exists('set_value')) { /** * Form Value * * Grabs a value from the POST array for the specified field so you can - * re-populate an input field or textarea - * - * @param string $field Field name - * @param string $default Default value - * @param boolean $html_escape Whether to escape HTML special characters or not + * re-populate an input field or textarea. If Form Validation + * is active it retrieves the info from the validation class * - * @return string + * @param string $field Field name + * @param string $default Default value + * @param bool $html_escape Whether to escape HTML special characters or not + * @return string */ - function set_value(string $field, string $default = '', bool $html_escape = true): string + function set_value($field, $default = '', $html_escape = TRUE) { - $request = Services::request(); - - // Try any old input data we may have first - $value = $request->getOldInput($field); + $CI =& get_instance(); - if ($value === null) - { - $value = $request->getPost($field) ?? $default; - } + $value = (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field)) + ? $CI->form_validation->set_value($field, $default) + : $CI->input->post($field, FALSE); - return ($html_escape) ? esc($value) : $value; + isset($value) OR $value = $default; + return ($html_escape) ? html_escape($value) : $value; } } -//-------------------------------------------------------------------- +// ------------------------------------------------------------------------ -if (! function_exists('set_select')) +if ( ! function_exists('set_select')) { /** * Set Select @@ -759,29 +732,25 @@ function set_value(string $field, string $default = '', bool $html_escape = true * Let's you set the selected value of a