diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..f137394d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+composer.lock
+composer.phar
+vendor/
diff --git a/packages/maxmind/GeoLite2-Country.mmdb b/assets/packages/maxmind/GeoLite2-Country.mmdb
similarity index 100%
rename from packages/maxmind/GeoLite2-Country.mmdb
rename to assets/packages/maxmind/GeoLite2-Country.mmdb
diff --git a/packages/maxmind/README b/assets/packages/maxmind/README
similarity index 100%
rename from packages/maxmind/README
rename to assets/packages/maxmind/README
diff --git a/assets/plugins/.gitkeep b/assets/plugins/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/admin.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/admin.css
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/admin.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/admin.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/admin.js b/assets/themes-admin/foolz/foolframe-theme-admin/assets/admin.js
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/admin.js
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/admin.js
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.css
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.min.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.min.css
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.min.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap-responsive.min.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.css
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.min.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.min.css
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.min.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/css/bootstrap.min.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings-white.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings-white.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings-white.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings-white.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/img/glyphicons-halflings.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.js b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.js
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.js
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.js
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.min.js b/assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.min.js
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.min.js
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/bootstrap2/js/bootstrap.min.js
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/README.md b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/README.md
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/README.md
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/README.md
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.css
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.min.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.min.css
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.min.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome-ie7.min.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.css
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.min.css b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.min.css
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.min.css
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/css/font-awesome.min.css
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/FontAwesome.otf b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/FontAwesome.otf
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/FontAwesome.otf
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/FontAwesome.otf
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.eot b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.eot
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.eot
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.eot
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.svg b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.svg
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.svg
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.svg
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.ttf b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.ttf
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.ttf
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.ttf
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.woff b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.woff
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.woff
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/font/fontawesome-webfont.woff
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome-ie7.less b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome-ie7.less
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome-ie7.less
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome-ie7.less
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome.less b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome.less
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome.less
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/less/font-awesome.less
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.sass b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.sass
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.sass
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.sass
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.scss b/assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.scss
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.scss
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/font-awesome/sass/font-awesome.scss
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.gif b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.gif
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.gif
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.gif
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/ajax-loader.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/icon-search-black.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icon-search-black.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/icon-search-black.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icon-search-black.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-black.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-black.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-black.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-black.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-white.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-white.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-white.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-18-white.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-black.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-black.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-black.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-black.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-white.png b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-white.png
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-white.png
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/icons-36-white.png
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/images/loader-18.gif b/assets/themes-admin/foolz/foolframe-theme-admin/assets/images/loader-18.gif
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/images/loader-18.gif
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/images/loader-18.gif
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/jquery.js b/assets/themes-admin/foolz/foolframe-theme-admin/assets/jquery.js
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/jquery.js
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/jquery.js
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/assets/maintenance.jpg b/assets/themes-admin/foolz/foolframe-theme-admin/assets/maintenance.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/assets/maintenance.jpg
rename to assets/themes-admin/foolz/foolframe-theme-admin/assets/maintenance.jpg
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/bootstrap.php b/assets/themes-admin/foolz/foolframe-theme-admin/bootstrap.php
similarity index 100%
rename from public/themes-admin/foolz/foolframe-theme-admin/bootstrap.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/bootstrap.php
diff --git a/assets/themes-admin/foolz/foolframe-theme-admin/composer.json b/assets/themes-admin/foolz/foolframe-theme-admin/composer.json
new file mode 100644
index 00000000..c6f47240
--- /dev/null
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/composer.json
@@ -0,0 +1,35 @@
+{
+ "name": "foolz/foolframe-theme-admin",
+ "type": "foolz-foolframe-admin-theme",
+ "description": "The default FoolFrame admin theme.",
+ "version": "1.0.3",
+ "keywords": [
+ "theme",
+ "admin",
+ "foolframe"
+ ],
+ "homepage": "http://www.foolz.us",
+ "license": "Apache-2.0",
+ "authors": [
+ {
+ "name": "foolz",
+ "email": "support@foolz.us"
+ }
+ ],
+ "support": {
+ "email": "support@foolz.us",
+ "irc": "irc://irc.irchighway.net/fooldriver"
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "foolz/theme": "dev"
+ },
+ "autoload": {
+ "psr-4": {
+ "Foolz\\FoolFrame\\Theme\\Admin\\": "src/"
+ }
+ },
+ "extra": {
+ "name": "Admin"
+ }
+}
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Account.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Account.php
old mode 100755
new mode 100644
similarity index 94%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Account.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Account.php
index 91d32451..8d21fdf5
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Account.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Account.php
@@ -1,11 +1,11 @@
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Base.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Base.php
old mode 100755
new mode 100644
similarity index 97%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Base.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Base.php
index a20e3259..00c7284c
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Layout/Base.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Layout/Base.php
@@ -1,10 +1,10 @@
@@ -17,7 +17,7 @@ public function toString()
Otherwise, you can activate your account by following this link. ( ゜∀゜)アハハ八八ノヽノヽノヽノ \ / \/ \
-If the link does not work, copy and paste the following address into your browser's address bar: = $link ?>
+If the link does not work, copy and paste the following address into your browser's address bar: = $this->getParamManager()->getParam('link') ?>
Thanks for joining us! キタ━━━━(゚∀゚)━━━━ !!!!! Your registration was VIP quality.
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/DeleteAccount.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/DeleteAccount.php
old mode 100755
new mode 100644
similarity index 87%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/DeleteAccount.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/DeleteAccount.php
index c8de5a26..55817de2
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/DeleteAccount.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/DeleteAccount.php
@@ -1,8 +1,8 @@
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/EmailChange.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/EmailChange.php
old mode 100755
new mode 100644
similarity index 87%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/EmailChange.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/EmailChange.php
index 990b01c5..5bd6be60
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/EmailChange.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/EmailChange.php
@@ -1,8 +1,8 @@
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/PasswordChange.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/PasswordChange.php
old mode 100755
new mode 100644
similarity index 87%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/PasswordChange.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/PasswordChange.php
index ebe81691..f2c740f4
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/Email/PasswordChange.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/Email/PasswordChange.php
@@ -1,8 +1,8 @@
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/ForgotPassword.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/ForgotPassword.php
old mode 100755
new mode 100644
similarity index 88%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/ForgotPassword.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/ForgotPassword.php
index 615c47b8..b6774040
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Account/ForgotPassword.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Account/ForgotPassword.php
@@ -1,8 +1,8 @@
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Users/Manage.php b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Users/Manage.php
similarity index 90%
rename from public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Users/Manage.php
rename to assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Users/Manage.php
index ed4c7f7e..2e7d75ef 100644
--- a/public/themes-admin/foolz/foolframe-theme-admin/classes/Foolz/Foolframe/Theme/Admin/Partial/Users/Manage.php
+++ b/assets/themes-admin/foolz/foolframe-theme-admin/src/Partial/Users/Manage.php
@@ -1,8 +1,8 @@
diff --git a/composer.json b/composer.json
index 1bfb449e..090076cd 100755
--- a/composer.json
+++ b/composer.json
@@ -10,7 +10,7 @@
"require": {
},
- "autoload": {
- "psr-4": {"Foolz\\Foolframe\\": "src/"}
- }
+ "autoload": {
+ "psr-4": {"Foolz\\FoolFrame\\": "src/"}
+ }
}
diff --git a/config/config.php b/config/config.php
index 1d4141e8..6da6eb28 100755
--- a/config/config.php
+++ b/config/config.php
@@ -17,7 +17,10 @@
'modules' => [
// list of modules installed
'installed' => [
- 'foolframe' => 'foolz/foolframe'
+ 'foolframe' => [
+ 'context' => '\\Foolz\\FoolFrame\\Model\\Context',
+ 'namespace' => 'foolz/foolframe'
+ ]
]
]
];
diff --git a/config/package.php b/config/package.php
index 1ebcecb6..d0b3f7bb 100755
--- a/config/package.php
+++ b/config/package.php
@@ -16,10 +16,12 @@
*/
'name' => 'FoolFrame',
+ 'class_context' => '\\Foolz\\FoolFrame\\Model\\Context',
+
/**
* The name that can be used in classes names
*/
- 'class_name' => 'Foolframe',
+ 'class_name' => 'FoolFrame',
/**
* URL to download a newer version
@@ -57,8 +59,8 @@
* Locations of the data out of the module folder
*/
'directories' => [
- 'themes' => VENDPATH.'foolz/foolframe/public/themes/',
- 'plugins' => VENDPATH.'foolz/foolframe/public/plugins/'
+ 'themes' => VENDPATH.'foolz/foolframe/assets/themes/',
+ 'plugins' => VENDPATH.'foolz/foolframe/assets/plugins/'
],
/**
@@ -71,7 +73,7 @@
],
'maxmind' => [
- 'geoip2_db_path' => VENDPATH.'foolz/foolframe/packages/maxmind/GeoLite2-Country.mmdb'
+ 'geoip2_db_path' => VENDPATH.'foolz/foolframe/assets/packages/maxmind/GeoLite2-Country.mmdb'
],
'imagick' => [
diff --git a/config/swiftmailer.php b/config/swiftmailer.php
new file mode 100644
index 00000000..37944a44
--- /dev/null
+++ b/config/swiftmailer.php
@@ -0,0 +1,10 @@
+ 'sendmail',
+ 'host' => '127.0.0.1',
+ 'port' => 25,
+ 'username' => '',
+ 'password' => '',
+ 'encryption' => null
+];
diff --git a/public/plugins/foolz/foolframe-plugin-articles/bootstrap.php b/public/plugins/foolz/foolframe-plugin-articles/bootstrap.php
deleted file mode 100755
index 14477804..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/bootstrap.php
+++ /dev/null
@@ -1,133 +0,0 @@
-setCall(function ($result) {
- /* @var Context $context */
- $context = $result->getParam('context');
- /** @var Autoloader $autoloader */
- $autoloader = $context->getService('autoloader');
-
- $autoloader->addClassMap([
- 'Foolz\Foolframe\Plugins\Articles\Model\Articles' => __DIR__ . '/classes/model/articles.php',
- 'Foolz\Foolframe\Controller\Admin\Articles' => __DIR__ . '/classes/controller/admin.php',
- 'Foolz\Foolfuuka\Controller\Chan\Articles' => __DIR__ . '/classes/controller/chan.php'
- ]);
-
- $context->getContainer()
- ->register('foolframe-plugin.articles', 'Foolz\Foolframe\Plugins\Articles\Model\Articles')
- ->addArgument($context);
-
- Event::forge('Foolz\Foolframe\Model\Context.handleWeb.has_auth')
- ->setCall(function ($result) use ($context) {
- // don't add the admin panels if the user is not an admin
- if ($context->getService('auth')->hasAccess('maccess.admin')) {
- $context->getRouteCollection()->add(
- 'foolframe.plugin.articles.admin', new \Symfony\Component\Routing\Route(
- '/admin/articles/{_suffix}',
- [
- '_suffix' => 'manage',
- '_controller' => '\Foolz\Foolframe\Controller\Admin\Articles::*'
- ],
- [
- '_suffix' => '.*'
- ]
- )
- );
-
- function() {die('lol');};
-
- Event::forge('Foolz\Foolframe\Controller\Admin.before.sidebar.add')
- ->setCall(function ($result) {
- $sidebar = $result->getParam('sidebar');
- $sidebar[]['articles'] = [
- 'name' => _i('Articles'),
- 'default' => 'manage',
- 'position' => [
- 'beforeafter' => 'before',
- 'element' => 'account'
- ],
- 'level' => 'admin',
- 'content' => [
- 'manage' => ['level' => 'admin', 'name' => _i('Articles'), 'icon' => 'icon-font'],
- ]];
- $result->setParam('sidebar', $sidebar);
- });
- }
-
- $context->getRouteCollection()->add(
- 'foolframe.plugin.articles.chan', new \Symfony\Component\Routing\Route(
- '/_/articles/{_suffix}',
- [
- '_suffix' => '',
- '_controller' => '\Foolz\Foolfuuka\Controller\Chan\Articles::articles'
- ],
- [
- '_suffix' => '.*'
- ]
- )
- );
-
- Event::forge('foolframe.themes.generic_top_nav_buttons')
- ->setCall(function ($result) use ($context) {
- $context->getService('foolframe-plugin.articles')->getNav('top', $result);
- })
- ->setPriority(3);
-
- Event::forge('foolframe.themes.generic_bottom_nav_buttons')
- ->setCall(function ($result) use ($context) {
- $context->getService('foolframe-plugin.articles')->getNav('bottom', $result);
- })
- ->setPriority(3);
-
- Event::forge('foolframe.themes.generic.index_nav_elements')
- ->setCall(function ($result) use ($context) {
- $context->getService('foolframe-plugin.articles')->getIndex($result);
- })
- ->setPriority(3);
- });
- });
-
- Event::forge('Foolz\Foolframe\Model\Plugin::schemaUpdate.foolz/foolframe-plugin-articles')
- ->setCall(function ($result) {
- /** @var Context $context */
- $context = $result->getParam('context');
- /** @var DoctrineConnection $dc */
- $dc = $context->getService('doctrine');
-
- /** @var $schema \Doctrine\DBAL\Schema\Schema */
- /** @var $table \Doctrine\DBAL\Schema\Table */
- $schema = $result->getParam('schema');
- $table = $schema->createTable($dc->p('plugin_ff_articles'));
- if ($dc->getConnection()->getDriver()->getName() == 'pdo_mysql') {
- $table->addOption('charset', 'utf8mb4');
- $table->addOption('collate', 'utf8mb4_unicode_ci');
- }
- $table->addColumn('id', 'integer', ['unsigned' => true, 'autoincrement' => true]);
- $table->addColumn('slug', 'string', ['length' => 128]);
- $table->addColumn('title', 'string', ['length' => 256]);
- $table->addColumn('url', 'string', ['length' => 256]);
- $table->addColumn('content', 'text', ['length' => 65532]);
- $table->addColumn('hidden', 'smallint', ['unsigned' => true, 'default' => 0]);
- $table->addColumn('top', 'smallint', ['unsigned' => true, 'default' => 0]);
- $table->addColumn('bottom', 'smallint', ['unsigned' => true, 'default' => 0]);
- $table->addColumn('timestamp', 'integer', ['unsigned' => true]);
- $table->setPrimaryKey(['id']);
- $table->addIndex(['slug'], $dc->p('plugin_ff_articles_slug_index'));
- $table->addIndex(['title'], $dc->p('plugin_ff_articles_title_index'));
- });
- }
-
-
-}
-
-
-(new HHVM_Articles())->run();
diff --git a/public/plugins/foolz/foolframe-plugin-articles/classes/controller/admin.php b/public/plugins/foolz/foolframe-plugin-articles/classes/controller/admin.php
deleted file mode 100755
index defdf92a..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/classes/controller/admin.php
+++ /dev/null
@@ -1,297 +0,0 @@
-articles = $this->getContext()->getService('foolframe-plugin.articles');
- }
-
- public function security()
- {
- return $this->getAuth()->hasAccess('maccess.mod');
- }
-
- public function structure()
- {
- /** @var DoctrineConnection $dc */
- $dc = $this->getContext()->getService('doctrine');
-
- return array(
- 'open' => array(
- 'type' => 'open',
- ),
- 'id' => array(
- 'type' => 'hidden',
- 'database' => true,
- 'validation_func' => function($input, $form_internal) use ($dc) {
- // check that the ID exists
- /** @var DoctrineConnection $dc */
- $count = (int) $dc->qb()
- ->select('COUNT(*) as count')
- ->from($dc->p('plugin_ff_articles'), 'a')
- ->where('id = :id')
- ->setParameter(':id', $input['id'])
- ->execute()
- ->fetch()['count'];
-
- if ($count !== 1) {
- return array(
- 'error_code' => 'ID_NOT_FOUND',
- 'error' => _i('Couldn\'t find the article with the submitted ID.'),
- 'critical' => true
- );
- }
-
- return array('success' => true);
- }
- ),
- 'title' => array(
- 'type' => 'input',
- 'database' => true,
- 'label' => 'Title',
- 'help' => _i('The title of your article'),
- 'class' => 'span4',
- 'placeholder' => _i('Required'),
- 'validation' => [new Trim(), new Assert\NotBlank()]
- ),
- 'slug' => array(
- 'database' => true,
- 'type' => 'input',
- 'label' => _i('Slug'),
- 'help' => _i('Insert the short name of the article to use in the url. Only alphanumeric and dashes.'),
- 'placeholder' => _i('Required'),
- 'class' => 'span4',
- 'validation' => [new Trim(), new Assert\Regex('/^\w+$/')],
- 'validation_func' => function($input, $form_internal) use ($dc) {
- // if we're working on the same object
- if (isset($input['id'])) {
- // existence ensured by CRITICAL in the ID check
- /** @var DoctrineConnection $dc */
- $result = $dc->qb()
- ->select('*')
- ->from($dc->p('plugin_ff_articles'), 'a')
- ->where('id = :id')
- ->setParameter(':id', $input['id'])
- ->execute()
- ->fetch();
-
- // no change?
- if ($input['slug'] == $result['slug']) {
- return array('success' => true);
- }
- }
-
- // check that there isn't already an article with that name
- $count = $dc->qb()
- ->select('COUNT(*) as count')
- ->from($dc->p('plugin_ff_articles'), 'a')
- ->where('slug = :slug')
- ->setParameter(':slug', $input['slug'])
- ->execute()
- ->fetch()['count'];
-
- if ($count) {
- return array(
- 'error_code' => 'ALREADY_EXISTS',
- 'error' => _i('The slug is already being used for another board.')
- );
- }
- }
- ),
- 'url' => array(
- 'type' => 'input',
- 'database' => true,
- 'class' => 'span4',
- 'label' => 'URL',
- 'help' => _i('If you set this, the article link will be an outlink.'),
- 'validation' => [new Trim()]
- ),
- 'content' => array(
- 'type' => 'textarea',
- 'database' => true,
- 'style' => 'height:350px; width: 90%',
- 'label' => _i('Article'),
- 'help' => _i('The content of your article, in MarkDown')
- ),
- 'separator-1' => array(
- 'type' => 'separator'
- ),
- 'hidden' => array(
- 'type' => 'checkbox',
- 'database' => true,
- 'help' => _i('Disable access to the article.')
- ),
- 'separator-1' => array(
- 'type' => 'separator'
- ),
- 'top' => array(
- 'type' => 'checkbox',
- 'database' => true,
- 'help' => _i('Display the article link on the top of the page')
- ),
- 'bottom' => array(
- 'type' => 'checkbox',
- 'database' => true,
- 'help' => _i('Display the article link on the bottom of the page')
- ),
- 'separator-2' => array(
- 'type' => 'separator-short'
- ),
- 'submit' => array(
- 'type' => 'submit',
- 'class' => 'btn-primary',
- 'value' => _i('Submit')
- ),
- 'close' => array(
- 'type' => 'close'
- ),
- );
- }
-
- public function action_manage()
- {
- $this->param_manager->setParam('controller_title', _i("Articles"));
- $this->param_manager->setParam('method_title', _i('Manage'));
-
- $articles = $this->articles->getAll();
-
- ob_start();
- ?>
-
- = _i('New article') ?>
-
-
-
- builder->createPartial('body', 'content')
- ->getParamManager()->setParam('content', ob_get_clean());
-
- return new Response($this->builder->build());
- }
-
- public function action_edit($slug = null)
- {
- $data['form'] = $this->structure();
-
- if ($this->getPost() && !$this->checkCsrfToken()) {
- $this->notices->set('warning', _i('The security token wasn\'t found. Try resubmitting.'));
- } elseif ($this->getPost()) {
- $result = Validator::formValidate($data['form'], $this->getPost());
- if (isset($result['error'])) {
- $this->notices->set('warning', $result['error']);
- } else {
- // it's actually fully checked, we just have to throw it in DB
- $this->articles->save($result['success']);
- if (is_null($slug)) {
- $this->notices->setFlash('success', _i('New article created!'));
- return $this->redirect('admin/articles/edit/' . $result['success']['slug']);
- } elseif ($slug != $result['success']['slug']) {
- // case in which letter was changed
- $this->notices->setFlash('success', _i('Article information updated.'));
- return $this->redirect('admin/articles/edit/' . $result['success']['slug']);
- } else {
- $this->notices->set('success', _i('Article information updated.'));
- }
- }
- }
-
- if (!is_null($slug)) {
- try {
- $article = $this->articles->getBySlug($slug);
- $data['object'] = (object) $article;
- } catch (ArticlesArticleNotFoundException $e) {
- throw new NotFoundHttpException;
- }
-
- $this->param_manager->setParam('method_title', [_i('Edit'), $article['slug']]);
- } else {
- $this->param_manager->setParam('method_title', _i('New'));
- }
-
- $this->param_manager->setParam('controller_title', _i('Articles'));
- $this->builder->createPartial('body', 'form_creator')
- ->getParamManager()->setParams($data);
-
- return new Response($this->builder->build());
- }
-
- public function action_remove($id)
- {
- try {
- $article = $this->articles->getById($id);
- } catch (ArticlesArticleNotFoundException $e) {
- throw new NotFoundHttpException;
- }
-
- if ($this->getPost() && !$this->checkCsrfToken()) {
- $this->notices->set('warning', _i('The security token wasn\'t found. Try resubmitting.'));
- } elseif ($this->getPost()) {
- try {
- $this->articles->remove($id);
- } catch (ArticlesArticleNotFoundException $e) {
- throw new NotFoundHttpException;
- }
-
- return $this->redirect('admin/articles/manage');
- }
-
- $this->param_manager->setParam('controller_title', _i('Articles'));
- $this->param_manager->setParam('method_title', _i('Delete') . ' ' . $article['title']);
- $data['alert_level'] = 'warning';
- $data['message'] = _i('Do you really want to remove the article?');
-
- $this->builder->createPartial('body', 'confirm')
- ->getParamManager()->setParams($data);
-
- return new Response($this->builder->build());
-
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-articles/classes/controller/chan.php b/public/plugins/foolz/foolframe-plugin-articles/classes/controller/chan.php
deleted file mode 100755
index cafadd05..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/classes/controller/chan.php
+++ /dev/null
@@ -1,72 +0,0 @@
-articles = new A($this->getContext());
- }
-
-
- public function action_articles($slug = null)
- {
- if(is_null($slug)) {
- return $this->action_index();
- }
-
- try {
- $article = $this->articles->getBySlug($slug);
- } catch (ArticlesArticleNotFoundException $e) {
- return $this->action_404();
- }
-
- if ($article['url']) {
- return new RedirectResponse($article['url']);
- }
-
- $this->setLastModified($article['timestamp']);
-
- if (!$this->response->isNotModified($this->request)) {
- $this->builder->getProps()->addTitle($article['title']);
- $this->param_manager->setParam('section_title', $article['title']);
-
- $this->builder->createPartial('body', 'markdown')
- ->getParamManager()->setParam('content', $article['content']);
-
- $this->response->setContent($this->builder->build());
- }
-
- return $this->response;
- }
-
- public function action_index()
- {
- $articles = $this->articles->getAll();
-
- $this->builder->getProps()->addTitle(_('Articles'));
- $this->param_manager->setParam('section_title', _('Articles'));
-
- ob_start();
-
- include __DIR__.'/../../views/articles.php';
-
- $string = ob_get_clean();
- $partial = $this->builder->createPartial('body', 'plugin');
- $partial->getParamManager()->setParam('content', $string);
-
- return $this->response->setContent($this->builder->build());
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-articles/classes/model/articles.php b/public/plugins/foolz/foolframe-plugin-articles/classes/model/articles.php
deleted file mode 100755
index d4c0d159..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/classes/model/articles.php
+++ /dev/null
@@ -1,205 +0,0 @@
-dc = $this->getContext()->getService('doctrine');
- $this->uri = $this->getContext()->getService('uri');
- }
-
- public function remove($id)
- {
- // this might throw ArticlesArticleNotFound, catch in controller
- $this->getById($id);
-
- $this->dc->qb()
- ->delete($this->dc->p('plugin_ff_articles'))
- ->where('id = :id')
- ->setParameter(':id', $id)
- ->execute();
-
- static::clear_cache();
- }
-
- public function clear_cache()
- {
- Cache::item('foolframe.plugin.articles.model.get_index')->delete();
- Cache::item('foolframe.plugin.articles.model.get_nav_top')->delete();
- Cache::item('foolframe.plugin.articles.model.get_nav_bottom')->delete();
- }
-
- /**
- * Grab the whole table of articles
- */
- public function getAll()
- {
- $query = $this->dc->qb()
- ->select('*')
- ->from($this->dc->p('plugin_ff_articles'), 'a');
-
- if (!$this->getAuth()->hasAccess('maccess.mod')) {
- $query->where('hidden = 0');
- }
-
- $result = $query->orderBy('title', 'asc')
- ->execute()
- ->fetchAll();
-
- return $result;
- }
-
- public function getById($id)
- {
- $query = $this->dc->qb()
- ->select('*')
- ->from($this->dc->p('plugin_ff_articles'), 'a')
- ->where('id = :id')
- ->setParameter(':id', $id);
-
- if (!$this->getAuth()->hasAccess('maccess.mod')) {
- $query->andWhere('hidden = 0');
- }
-
- $result = $query->execute()
- ->fetch();
-
- if (!count($result)) {
- throw new ArticlesArticleNotFoundException;
- }
-
- return $result;
- }
-
- public function getBySlug($slug)
- {
- $query = $this->dc->qb()
- ->select('*')
- ->from($this->dc->p('plugin_ff_articles'), 'a')
- ->where('slug = :slug')
- ->setParameter(':slug', $slug);
-
- if (!$this->getAuth()->hasAccess('maccess.mod')) {
- $query->andWhere('hidden = 0');
- }
-
- $result = $query->execute()
- ->fetch();
-
- if (!$result) {
- throw new ArticlesArticleNotFoundException(_i('The article you were looking for does not exist.'));
- }
-
- return $result;
- }
-
- public function getNav($where, $result)
- {
- $nav = $result->getParam('nav');
-
- try {
- $res = Cache::item('foolframe.plugin.articles.model.get_nav_'.$where)->get();
- } catch (\OutOfBoundsException $e) {
- $res = $this->dc->qb()
- ->select('slug, title')
- ->from($this->dc->p('plugin_ff_articles'), 'a')
- ->where($where.' = 1')
- ->execute()
- ->fetchAll();
-
- Cache::item('foolframe.plugin.articles.model.get_nav_'.$where)->set($res, 3600);
- }
-
- if(!count($res)) {
- return;
- }
-
- foreach($res as $article) {
- $nav[] = array('href' => $this->uri->create('_/articles/' . $article['slug']), 'text' => e($article['title']));
- }
-
- $result->setParam('nav', $nav)->set($nav);
- }
-
- public function getIndex($result)
- {
- $nav = $result->getParam('nav');
-
- try {
- $res = Cache::item('foolframe.plugin.articles.model.get_index')->get();
- } catch (\OutOfBoundsException $e) {
- $res = $this->dc->qb()
- ->select('slug, title')
- ->from($this->dc->p('plugin_ff_articles'), 'a')
- ->orderBy('title', 'asc')
- ->execute()
- ->fetchAll();
-
- Cache::item('foolframe.plugin.articles.model.get_index')->set($res, 3600);
- }
-
- if(!count($res)) {
- return;
- }
-
- $nav['articles'] = array('title' => _i('Articles'), 'elements' => array());
-
- foreach($res as $article) {
- $nav['articles']['elements'][] = array(
- 'href' => $this->uri->create('_/articles/' . $article['slug']),
- 'text' => e($article['title'])
- );
- }
-
- $result->setParam('nav', $nav)->set($nav);
- }
-
- public function save($data)
- {
- if (isset($data['id'])) {
- $query = $this->dc->qb()
- ->update($this->dc->p('plugin_ff_articles'))
- ->set('timestamp', ':time')
- ->where('id = :id')
- ->setParameter(':id', $data['id'])
- ->setParameter(':time', time());
-
- foreach ($data as $k => $i) {
- if ($k !== 'id') {
- $query->set($k, $this->dc->getConnection()->quote($i));
- }
- }
-
- $query->execute();
- } else {
- $data['timestamp'] = time();
-
- $this->dc->getConnection()
- ->insert($this->dc->p('plugin_ff_articles'), $data);
- }
-
- $this->clear_cache();
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-articles/composer.json b/public/plugins/foolz/foolframe-plugin-articles/composer.json
deleted file mode 100755
index e2af8378..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "foolz/foolframe-plugin-articles",
- "type": "foolz-foolframe-plugin",
- "description": "Enable support for custom pages in MarkDown and custom links.",
- "version": "1.5.0",
- "keywords": ["fake", "mock"],
- "homepage": "http://www.foolz.us",
- "license": "Apache-2.0",
- "authors": [{"name": "foolz", "email": "support@foolz.us"}],
- "support": {
- "email": "support@foolz.us",
- "irc": "irc://irc.irchighway.net/fooldriver"
- },
-
- "require" : {
- "foolz/plugin": "dev"
- },
-
- "extra": {
- "name": "Articles",
- "slug": "articles",
- "identifier": "ff",
- "module": "foolframe"
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-articles/views/articles.php b/public/plugins/foolz/foolframe-plugin-articles/views/articles.php
deleted file mode 100644
index 5ff6c5cd..00000000
--- a/public/plugins/foolz/foolframe-plugin-articles/views/articles.php
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/public/plugins/foolz/foolframe-plugin-ssl-tools/bootstrap.php b/public/plugins/foolz/foolframe-plugin-ssl-tools/bootstrap.php
deleted file mode 100755
index fcc17265..00000000
--- a/public/plugins/foolz/foolframe-plugin-ssl-tools/bootstrap.php
+++ /dev/null
@@ -1,114 +0,0 @@
-setCall(function($result) {
- // this plugin works with indexes that don't exist in CLI
- if (PHP_SAPI === 'cli') {
- return false;
- }
-
- /* @var Context $context */
- $context = $result->getParam('context');
- /** @var Autoloader $autoloader */
- $autoloader = $context->getService('autoloader');
- /** @var Auth $auth */
- $auth = $context->getService('auth');
-
- $autoloader->addClassMap([
- 'Foolz\Foolframe\Plugins\SslTools\Model\SslTools' => __DIR__.'/classes/model/ssl_tools.php',
- 'Foolz\Foolframe\Controller\Admin\Plugins\SslTools' => __DIR__.'/classes/controller/admin/ssl_tools.php'
- ]);
-
- Event::forge('Foolz\Foolframe\Model\Context.handleWeb.has_auth')
- ->setCall(function($result) use ($context, $auth) {
- // don't add the admin panels if the user is not an admin
- if ($auth->hasAccess('maccess.admin')) {
- $context->getRouteCollection()->add(
- 'foolframe.plugin.ssl_tools.admin', new \Symfony\Component\Routing\Route(
- '/admin/plugins/ssl_tools/{_suffix}',
- [
- '_suffix' => 'manage',
- '_controller' => '\Foolz\Foolframe\Controller\Admin\Plugins\SslTools::manage'
- ],
- [
- '_suffix' => '.*'
- ]
- )
- );
-
- Event::forge('Foolz\Foolframe\Controller\Admin.before.sidebar.add')
- ->setCall(function($result) {
- $sidebar = $result->getParam('sidebar');
- $sidebar[]['plugins'] = [
- 'content' => array('ssl_tools/manage' => array('level' => 'admin', 'name' => _i('SSL Tools'), 'icon' => 'icon-lock'))
- ];
- $result->setParam('sidebar', $sidebar);
- });
- }
- });
-
-
- $context->getContainer()
- ->register('foolframe-plugin.ssl_tools', 'Foolz\Foolframe\Plugins\SslTools\Model\SslTools')
- ->addArgument($context);
-
- /** @var \Foolz\Foolframe\Plugins\SslTools\Model\SslTools $ssl_tools */
- $ssl_tools = $context->getService('foolframe-plugin.ssl_tools');
-
- Event::forge('Foolz\Foolframe\Model\Context.handleWeb.has_request')
- ->setCall(function($result) use ($ssl_tools) {
- $request = $result->getParam('request');
- $context = $result->getObject();
-
- Event::forge('foolframe.themes.generic_top_nav_buttons')
- ->setCall(function($result) use ($context, $request, $ssl_tools) {
- $ssl_tools->nav($context, $request, 'top', $result);
- })
- ->setPriority(4);
-
- Event::forge('foolframe.themes.generic_bottom_nav_buttons')
- ->setCall(function($result) use ($context, $request, $ssl_tools) {
- $ssl_tools->nav($context, $request, 'bottom', $result);
- })
- ->setPriority(4);
- });
-
- Event::forge('Foolz\Foolframe\Model\Context.handleWeb.override_response')
- ->setCall(function(Result $result) use ($auth) {
- /** @var Request $request */
- $obj = $result->getObject();
- /** @var Request $request */
- $request = $result->getParam('request');
- /** @var Preferences $preferences */
- $preferences = $obj->getService('preferences');
-
- if (!$request->isSecure()) {
- if ($preferences->get('foolframe.plugins.ssl_tools.force_everyone')
- || ($preferences->get('foolframe.plugins.ssl_tools.force_for_logged') && $auth->hasAccess('maccess.user'))
- )
- {
- // redirect to itself
- $result->set(new RedirectResponse('https://'.$request->getHttpHost().$request->getRequestUri()));
- return;
- }
- }
- });
- });
-
- }
-}
-
-(new HHVM_SslTools())->run();
diff --git a/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/controller/admin/ssl_tools.php b/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/controller/admin/ssl_tools.php
deleted file mode 100755
index c86962df..00000000
--- a/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/controller/admin/ssl_tools.php
+++ /dev/null
@@ -1,84 +0,0 @@
-param_manager->setParam('controller_title', _i('Plugins'));
- }
-
- public function security()
- {
- return $this->getAuth()->hasAccess('maccess.admin');
- }
-
- public function action_manage()
- {
- $this->param_manager->setParam('method_title', [_i('FoolFrame'), _i('SSL Tools'), 'SSL']);
-
- $form = array();
-
- $form['open'] = array(
- 'type' => 'open'
- );
-
- $form['foolframe.plugins.ssl_tools.available'] = array(
- 'type' => 'checkbox',
- 'preferences' => true,
- 'help' => _i('Does the server have SSL available (does your site support https:// protocol)?'),
- 'sub' => array(
- 'foolframe.plugins.ssl_tools.force_for_logged' => array(
- 'type' => 'checkbox',
- 'preferences' => true,
- 'help' => _i('Redirect the logged in users to the SSL version of the site')
- ),
- 'foolframe.plugins.ssl_tools.force_everyone' => array(
- 'type' => 'checkbox',
- 'preferences' => true,
- 'help' => _i('Redirect every user to the SSL version of the site')
- ),
- 'foolframe.plugins.ssl_tools.enable_top_link' => array(
- 'type' => 'checkbox',
- 'preferences' => true,
- 'help' => _i('Show a link to SSL in the header if the user is browsing in http://')
- ),
- 'foolframe.plugins.ssl_tools.enable_bottom_link' => array(
- 'type' => 'checkbox',
- 'preferences' => true,
- 'help' => _i('Show a link to SSL in the footer if the user is browsing in http://')
- ),
- )
- );
-
- $form['separator'] = array(
- 'type' => 'separator'
- );
-
- $form['submit'] = array(
- 'type' => 'submit',
- 'value' => _i('Submit'),
- 'class' => 'btn btn-primary'
- );
-
- $form['close'] = array(
- 'type' => 'close'
- );
-
- $this->preferences->submit_auto($this->getRequest(), $form, $this->getPost());
-
- $data['form'] = $form;
-
- // create a form
- $this->builder->createPartial('body', 'form_creator')
- ->getParamManager()->setParams($data);
-
- return new Response($this->builder->build());
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/model/ssl_tools.php b/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/model/ssl_tools.php
deleted file mode 100755
index 7d345ef6..00000000
--- a/public/plugins/foolz/foolframe-plugin-ssl-tools/classes/model/ssl_tools.php
+++ /dev/null
@@ -1,28 +0,0 @@
-getParam('nav');
-
- /** @var Preferences $preferences */
- $preferences = $context->getService('preferences');
- /** @var Uri $uri */
- $uri = $context->getService('uri');
-
- if ($preferences->get('foolframe.plugins.ssl_tools.enable_'.$position.'_link') && (!$request->isSecure())) {
- $nav[] = array('href' => 'https'.substr($uri->base(), 4), 'text' => ' SSL');
- }
-
- $result->setParam('nav', $nav)->set($nav);
- }
-}
diff --git a/public/plugins/foolz/foolframe-plugin-ssl-tools/composer.json b/public/plugins/foolz/foolframe-plugin-ssl-tools/composer.json
deleted file mode 100755
index 22fe216d..00000000
--- a/public/plugins/foolz/foolframe-plugin-ssl-tools/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "foolz/foolframe-plugin-ssl-tools",
- "type": "foolz-foolframe-plugin",
- "description": "Adds a panel to control useful tools if you have SSL available",
- "version": "1.0.0",
- "keywords": ["fake", "mock"],
- "homepage": "http://www.foolz.us",
- "license": "Apache-2.0",
- "authors": [{"name": "foolz", "email": "support@foolz.us"}],
- "support": {
- "email": "support@foolz.us",
- "irc": "irc://irc.irchighway.net/fooldriver"
- },
-
- "require": {
- "foolz/plugin": "dev"
- },
-
- "extra": {
- "name": "SSL Tools",
- "slug": "ssl_tools",
- "identifier": "ff",
- "module": "foolframe"
- }
-}
\ No newline at end of file
diff --git a/public/themes-admin/foolz/foolframe-theme-admin/composer.json b/public/themes-admin/foolz/foolframe-theme-admin/composer.json
deleted file mode 100644
index 497f62a1..00000000
--- a/public/themes-admin/foolz/foolframe-theme-admin/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "foolz/foolframe-theme-admin",
- "type": "foolz-foolframe-admin-theme",
- "description": "The default FoolFrame admin theme.",
- "version": "1.0.2",
- "keywords": ["theme", "admin", "foolframe"],
- "homepage": "http://www.foolz.us",
- "license": "Apache-2.0",
- "authors": [{"name": "foolz", "email": "support@foolz.us"}],
- "support": {
- "email": "support@foolz.us",
- "irc": "irc://irc.irchighway.net/fooldriver"
- },
- "require": {
- "php": ">=5.4.0",
- "foolz/theme": "dev"
- },
- "autoload": {
- "psr-0": {
- "Foolz\\Foolframe\\Theme\\Admin": "classes/"
- }
- },
- "extra": {
- "name" : "Admin"
- }
-}
\ No newline at end of file
diff --git a/src/Controller/Admin.php b/src/Controller/Admin.php
index cd084993..cccd1167 100755
--- a/src/Controller/Admin.php
+++ b/src/Controller/Admin.php
@@ -1,13 +1,13 @@
getRequest();
$this->uri = $this->getContext()->getService('uri');
+ $this->mailer = $this->getContext()->getService('mailer');
$this->notices = $this->getContext()->getService('notices');
$this->preferences = $this->getContext()->getService('preferences');
$this->config = $this->getContext()->getService('config');
$this->security = $this->getContext()->getService('security');
$theme_instance = \Foolz\Theme\Loader::forge('foolframe_admin');
- $theme_instance->addDir(VENDPATH.'foolz/foolframe/public/themes-admin/');
+ $theme_instance->addDir(VENDPATH.'foolz/foolframe/assets/themes-admin/');
$theme_instance->addDir(VAPPPATH.'foolz/foolframe/themes-admin/');
$theme_instance->setBaseUrl($this->uri->base().'foolframe/');
$theme_instance->setPublicDir(DOCROOT.'foolframe/');
@@ -89,8 +95,7 @@ public function before()
// returns the hardcoded sidebar array (can't use functions when declaring a class variable)
$sidebar = $this->getSidebarValues();
-
- $sidebar_dynamic = Hook::forge('Foolz\Foolframe\Controller\Admin.before.sidebar.add')
+ $sidebar_dynamic = Hook::forge('Foolz\FoolFrame\Controller\Admin::before#var.sidebar')
->setObject($this)
->setParam('sidebar', [])
->execute()
@@ -149,7 +154,7 @@ private function getSidebarValues()
// load sidebars from modules and leave FoolFrame sidebar on bottom
foreach($this->config->get('foolz/foolframe', 'config', 'modules.installed') as $module) {
- $module_sidebar = $this->config->get($module, 'sidebar');
+ $module_sidebar = $this->config->get($module['namespace'], 'sidebar');
if(is_array($module_sidebar)) {
$sidebar = array_merge($module_sidebar['sidebar'], $sidebar);
}
diff --git a/src/Controller/Admin/Account.php b/src/Controller/Admin/Account.php
index 5bdeba3e..fddfb811 100755
--- a/src/Controller/Admin/Account.php
+++ b/src/Controller/Admin/Account.php
@@ -1,25 +1,23 @@
notices->set('error', _i('You have entered an invalid username and/or password. Please try again.'));
+ } catch (AccountNotVerifiedException $e) {
+ $this->notices->set('error', _i('Your account has not been activated yet, please check your email.'));
}
}
@@ -161,16 +161,13 @@ public function action_register()
'link' => $this->uri->create('admin/account/activate/'.$id.'/'.$activation_key)
]);
- $message = Swift_Message::newInstance()
+ $message = $this->mailer->create()
->setFrom([$from => $this->preferences->get('foolframe.gen.website_title')])
->setTo($input['email'])
->setSubject($title)
->setBody($this->builder->build(), 'text/html');
- $mailer = Swift_Mailer::newInstance(Swift_SendmailTransport::newInstance());
- $result = $mailer->send($message);
-
- if ($result != 1) {
+ if ($this->mailer->send($message) !== 1) {
// the email driver was unable to send the email. the account will be activated automatically.
$this->getAuth()->activateUser($id, $activation_key);
$this->notices->setFlash('success', _i('Congratulations! You have successfully registered.'));
@@ -350,16 +347,13 @@ public function action_change_email($id = null, $email_key = null)
'link' => $this->uri->create('admin/account/change_email/'.$user->id.'/'.$change_email_key)
]);
- $message = Swift_Message::newInstance()
+ $message = $this->mailer->create()
->setFrom([$from => $this->preferences->get('foolframe.gen.website_title')])
->setTo($user->email)
->setSubject($title)
->setBody($this->builder->build(), 'text/html');
- $mailer = Swift_Mailer::newInstance(Swift_SendmailTransport::newInstance());
- $result = $mailer->send($message);
-
- if ($result == 1) {
+ if ($this->mailer->send($message) === 1) {
$this->notices->setFlash('success', _i('An email has been sent to verify your new email address. The activation link will only be valid for 24 hours.'));
} else {
// the email driver was unable to send the email. the account's email address will not be changed.
@@ -437,16 +431,13 @@ public function action_delete($id = null, $key = null)
'link' => $this->uri->create('admin/account/delete/'.$user->id.'/'.$account_deletion_key)
]);
- $message = Swift_Message::newInstance()
+ $message = $this->mailer->create()
->setFrom([$from => $this->preferences->get('foolframe.gen.website_title')])
->setTo($user->email)
->setSubject($title)
->setBody($this->builder->build(), 'text/html');
- $mailer = Swift_Mailer::newInstance(Swift_SendmailTransport::newInstance());
- $result = $mailer->send($message);
-
- if ($result == 1) {
+ if ($this->mailer->send($message) === 1) {
$this->notices->setFlash('success', _i('An email has been sent to verify the deletion of your account. The verification link will only work for 15 minutes.'));
} else {
// the email driver was unable to send the email. the account will not be deleted.
@@ -475,7 +466,7 @@ public function sendChangePasswordEmail($email)
return $this->redirect('admin/account/forgotten_password');
}
- /** @var \Foolz\Foolframe\Model\Users $users */
+ /** @var \Foolz\FoolFrame\Model\Users $users */
$users = $this->getContext()->getService('users');
$user = $users->getUserBy('email', $email);
@@ -493,16 +484,13 @@ public function sendChangePasswordEmail($email)
'link' => $this->uri->create('admin/account/change_password/'.$user->id.'/'.$password_key)
]);
- $message = Swift_Message::newInstance()
+ $message = $this->mailer->create()
->setFrom([$from => $this->preferences->get('foolframe.gen.website_title')])
->setTo($email)
->setSubject($title)
->setBody($this->builder->build(), 'text/html');
- $mailer = Swift_Mailer::newInstance(Swift_SendmailTransport::newInstance());
- $result = $mailer->send($message);
-
- if ($result == 1) {
+ if ($this->mailer->send($message) === 1) {
$this->notices->setFlash('success', _i('An email has been sent to verify that you wish to change your password. The verification link included will only work for the next 15 minutes.'));
} else {
// the email driver was unable to send the email. the account's password will not be changed..
@@ -519,6 +507,7 @@ public function action_profile()
return $this->redirectToLogin();
}
+ $data = [];
$form = [];
$form['open'] = array(
diff --git a/src/Controller/Admin/Plugins.php b/src/Controller/Admin/Plugins.php
index 9b6d58e6..c1006567 100755
--- a/src/Controller/Admin/Plugins.php
+++ b/src/Controller/Admin/Plugins.php
@@ -1,14 +1,14 @@
param_manager->setParam('method_title', _i('General'));
+ $data = [];
$form = [];
$form['open'] = array(
@@ -123,15 +124,15 @@ function action_general()
);
foreach ($this->config->get('foolz/foolframe', 'config', 'modules.installed') as $module) {
- if ($module === 'foolz/foolframe') {
+ if ($module['namespace'] === 'foolz/foolframe') {
continue;
}
$theme_loader = new \Foolz\Theme\Loader();
- $theme_loader->addDir($this->config->get($module, 'package', 'directories.themes'));
+ $theme_loader->addDir($this->config->get($module['namespace'], 'package', 'directories.themes'));
$themes = $theme_loader->getAll();
- $module_name = $this->config->get($module, 'package', 'main.name');
+ $module_name = $this->config->get($module['namespace'], 'package', 'main.name');
$theme_checkboxes = [];
@@ -180,7 +181,7 @@ function action_general()
'label' => _i('Google Analytics code'),
'placeholder' => 'UX-XXXXXXX-X',
'preferences' => true,
- 'help' => _i("Insert your Google Analytics code."),
+ 'help' => _i('Insert your Google Analytics code.'),
'class' => 'span2'
);
@@ -192,7 +193,7 @@ function action_general()
'type' => 'textarea',
'label' => _i('Header Text ("alerts/notices")'),
'preferences' => true,
- 'help' => _i("Inserts text above in the header site wide, below the navigation links.
Most Bootstrap CSS formatting can be used here."),
+ 'help' => _i('Inserts text above in the header site wide, below the navigation links.
Most Bootstrap CSS formatting can be used here.'),
'class' => 'span5'
);
@@ -200,7 +201,7 @@ function action_general()
'type' => 'textarea',
'label' => _i('Header Code'),
'preferences' => true,
- 'help' => _i("This will insert the HTML code inside the <HEAD>."),
+ 'help' => _i('This will insert the HTML code inside the <HEAD>.'),
'class' => 'span5'
);
@@ -208,7 +209,7 @@ function action_general()
'type' => 'textarea',
'label' => _i('Footer Text'),
'preferences' => true,
- 'help' => _i("Inserts text in the footer site wide, such as credits and similar.
Most Bootstrap CSS formatting can be used here."),
+ 'help' => _i('Inserts text in the footer site wide, such as credits and similar.
Most Bootstrap CSS formatting can be used here.'),
'class' => 'span5'
);
@@ -248,6 +249,7 @@ function action_advertising()
{
$this->param_manager->setParam('method_title', _i('Advertising'));
+ $data = [];
$form = [];
$form['open'] = array(
@@ -312,6 +314,7 @@ function action_registration()
{
$this->param_manager->setParam('method_title', _i('Registration'));
+ $data = [];
$form = [];
$form['open'] = array(
diff --git a/src/Controller/Admin/System.php b/src/Controller/Admin/System.php
index 1a459bc9..e73de482 100755
--- a/src/Controller/Admin/System.php
+++ b/src/Controller/Admin/System.php
@@ -1,12 +1,12 @@
S::environment($this->getContext())];
+ $data = ['info' => S::getEnvironment($this->getContext())];
$this->param_manager->setParam('method_title', _i('Information'));
$this->builder->createPartial('body', 'system/information')
diff --git a/src/Controller/Admin/Users.php b/src/Controller/Admin/Users.php
index 8d7e2685..94618a47 100755
--- a/src/Controller/Admin/Users.php
+++ b/src/Controller/Admin/Users.php
@@ -1,15 +1,15 @@
getContext()->getService('users');
$users_data = $users->getAll($page, 40);
$data['users'] = $users_data['result'];
@@ -49,17 +49,18 @@ public function action_user($id = null)
throw new NotFoundHttpException;
}
+ $data = [];
+ $form = [];
+
try {
- /** @var \Foolz\Foolframe\Model\Users $users */
+ /** @var \Foolz\FoolFrame\Model\Users $users */
$users = $this->getContext()->getService('users');
$data['object'] = $users->getUserBy('id', $id);
$data['object']->password = '';
- } catch (\Foolz\Foolframe\Model\UsersWrongIdException $e) {
+ } catch (\Foolz\FoolFrame\Model\UsersWrongIdException $e) {
throw new NotFoundHttpException;
}
- $form = [];
-
$form['open'] = array(
'type' => 'open'
);
diff --git a/src/Controller/Common.php b/src/Controller/Common.php
index 5adfdd64..9bddf9bd 100755
--- a/src/Controller/Common.php
+++ b/src/Controller/Common.php
@@ -1,9 +1,9 @@
notices = $this->getContext()->getService('notices');
$this->uri = $this->getContext()->getService('uri');
$this->config = $this->getContext()->getService('config');
- $this->install = new \Foolz\Foolframe\Model\Install($this->getContext());
+ $this->install = new \Foolz\FoolFrame\Model\Install($this->getContext());
$theme_instance = \Foolz\Theme\Loader::forge('foolframe_admin');
- $theme_instance->addDir(VENDPATH.'foolz/foolframe/public/themes-admin/');
+ $theme_instance->addDir(VENDPATH.'foolz/foolframe/assets/themes-admin/');
$theme_instance->setBaseUrl($this->uri->base().'foolframe/');
$theme_instance->setPublicDir(DOCROOT.'foolframe/');
$this->theme = $theme_instance->get('foolz/foolframe-theme-admin');
@@ -114,7 +114,8 @@ public function action_index()
public function action_system_check()
{
- $data['system'] = System::environment($this->getContext());
+ $data = [];
+ $data['system'] = System::getEnvironment($this->getContext());
$this->process('system_check');
$this->param_manager->setParam('method_title', _i('System Check'));
diff --git a/src/Model/Auth.php b/src/Model/Auth.php
index 8b8f743d..513ce7db 100644
--- a/src/Model/Auth.php
+++ b/src/Model/Auth.php
@@ -1,6 +1,6 @@
groups = $this->config->get('foolz/foolframe', 'foolauth', 'groups');
foreach ($this->config->get('foolz/foolframe', 'config', 'modules.installed') as $module) {
- foreach ($this->config->get($module, 'foolauth', 'roles') as $key => $item) {
+ foreach ($this->config->get($module['namespace'], 'foolauth', 'roles') as $key => $item) {
if (!isset($this->roles[$key])) {
$this->roles[$key] = $item;
} else {
@@ -154,6 +156,10 @@ public function authenticateWithUsernameAndPassword($username, $password, $ip_de
throw new WrongUsernameOrPasswordException();
}
+ if (!$user['activated'] && !$this->preferences->get('foolframe.auth.disable_registration_email')) {
+ throw new AccountNotVerifiedException();
+ }
+
$this->resetAttempts($username);
$this->user = new User($this->getContext(), $user);
@@ -244,7 +250,8 @@ public function createAutologinHash($ip_decimal, $user_agent = '')
return serialize(['user_id' => $this->user->getId(), 'login_id' => $login_id, 'login_hash' => $login_hash]);
}
- public function hasAccess($area) {
+ public function hasAccess($area)
+ {
if (!isset($this->groups[$this->getUser()->getGroupId()])) {
throw new \RuntimeException('Group not found');
}
@@ -318,7 +325,7 @@ public function createUser($username, $password, $email, $group = 1, Array $prof
$password = trim($password);
$email = filter_var(trim($email), FILTER_VALIDATE_EMAIL);
- if (empty($username) or empty($password) or empty($email)) {
+ if (empty($username) || empty($password) || empty($email)) {
throw new UpdateException('Username, password and email address can\'t be empty.', 1);
}
diff --git a/src/Model/Autoloader.php b/src/Model/Autoloader.php
index 4a45569b..d0731050 100644
--- a/src/Model/Autoloader.php
+++ b/src/Model/Autoloader.php
@@ -1,7 +1,6 @@
addClass($class, $path);
}
}
-
}
diff --git a/src/Model/Config.php b/src/Model/Config.php
index 4abdca15..930b826a 100644
--- a/src/Model/Config.php
+++ b/src/Model/Config.php
@@ -1,7 +1,6 @@
1) {
$key = array_shift($keys);
- if (!isset($array[$key]) or !is_array($array[$key])) {
+ if (!isset($array[$key]) || !is_array($array[$key])) {
$array[$key] = array();
}
@@ -96,8 +95,7 @@ public function save($package_name, $file)
*/
public static function saveArrayToFile($path, $array)
{
- $content = "profiler = $this->container->get('profiler');
- class_alias('Foolz\Foolframe\Model\Plugins', 'Plugins');
- class_alias('Foolz\Foolframe\Model\SchemaManager', 'SchemaManager');
- class_alias('Foolz\Foolframe\Model\System', 'System');
- class_alias('Foolz\Foolframe\Model\User', 'User');
- class_alias('Foolz\Foolframe\Model\Users', 'Users');
+ class_alias('Foolz\FoolFrame\Model\Plugins', 'Plugins');
+ class_alias('Foolz\FoolFrame\Model\SchemaManager', 'SchemaManager');
+ class_alias('Foolz\FoolFrame\Model\System', 'System');
+ class_alias('Foolz\FoolFrame\Model\User', 'User');
+ class_alias('Foolz\FoolFrame\Model\Users', 'Users');
$this->route_collection = new RouteCollection();
- $this->logger = new Logger('foolframe');
- $this->logger->pushHandler(new RotatingFileHandler(VAPPPATH.'foolz/foolframe/logs/foolframe.log', 7, Logger::WARNING));
+ $this->logger = new MonoLogger('foolframe');
+ $this->logger->pushHandler(new RotatingFileHandler(VAPPPATH.'foolz/foolframe/logs/foolframe.log', 7, MonoLogger::WARNING));
$this->logger->pushProcessor(new IntrospectionProcessor());
$this->logger->pushProcessor(new WebProcessor());
// special logger that saves stack traces from the exception handler
- $this->logger_trace = new Logger('foolframe_trace');
- $this->logger_trace->pushHandler(new RotatingFileHandler(VAPPPATH.'foolz/foolframe/logs/foolframe_trace.log', 7, Logger::WARNING));
+ $this->logger_trace = new MonoLogger('foolframe_trace');
+ $this->logger_trace->pushHandler(new RotatingFileHandler(VAPPPATH.'foolz/foolframe/logs/foolframe_trace.log', 7, MonoLogger::WARNING));
$this->logger_trace->pushProcessor(new IntrospectionProcessor());
$this->logger_trace->pushProcessor(new WebProcessor());
@@ -133,35 +133,38 @@ class_alias('Foolz\Foolframe\Model\Users', 'Users');
ini_set('display_errors', 1);
}
- $this->container->register('autoloader', 'Foolz\Foolframe\Model\Autoloader')
+ $this->container->register('autoloader', 'Foolz\FoolFrame\Model\Autoloader')
->addArgument($this)
->addMethodCall('register');
- $this->container->register('logger', 'Foolz\Foolframe\Model\Logger')
+ $this->container->register('logger', 'Foolz\FoolFrame\Model\Logger')
->addArgument($this)
->addMethodCall('addLogger', [$this->logger])
->addMethodCall('addLogger', [$this->logger_trace]);
- $this->container->register('config', 'Foolz\Foolframe\Model\Config')
+ $this->container->register('config', 'Foolz\FoolFrame\Model\Config')
->addArgument($this);
- $this->container->register('doctrine', 'Foolz\Foolframe\Model\DoctrineConnection')
+ $this->container->register('doctrine', 'Foolz\FoolFrame\Model\DoctrineConnection')
->addArgument($this)
->addArgument(new Reference('config'));
- $this->container->register('preferences', 'Foolz\Foolframe\Model\Preferences')
+ $this->container->register('mailer', 'Foolz\FoolFrame\Model\Mailer')
->addArgument($this);
- $this->container->register('plugins', 'Foolz\Foolframe\Model\Plugins')
+ $this->container->register('preferences', 'Foolz\FoolFrame\Model\Preferences')
->addArgument($this);
- $this->container->register('users', 'Foolz\Foolframe\Model\Users')
+ $this->container->register('plugins', 'Foolz\FoolFrame\Model\Plugins')
->addArgument($this);
- $this->container->register('auth', 'Foolz\Foolframe\Model\Auth')
+ $this->container->register('users', 'Foolz\FoolFrame\Model\Users')
->addArgument($this);
- $this->container->register('security', 'Foolz\Foolframe\Model\Security')
+ $this->container->register('auth', 'Foolz\FoolFrame\Model\Auth')
+ ->addArgument($this);
+
+ $this->container->register('security', 'Foolz\FoolFrame\Model\Security')
->addArgument($this);
$this->config = $this->getService('config');
@@ -207,15 +210,9 @@ class_alias('Foolz\Foolframe\Model\Users', 'Users');
// run the Framework class for each module
foreach($this->config->get('foolz/foolframe', 'config', 'modules.installed') as $module) {
- if ($module !== 'foolz/foolframe') {
- $class_arr = explode('/', $module);
- $class = '\\';
- foreach ($class_arr as $str) {
- $class .= ucfirst($str).'\\';
- }
-
- $class .= 'Model\Context';
- $this->child_contextes[$module] = new $class($this);
+ if ($module['namespace'] !== 'foolz/foolframe') {
+ $context = $module['context'];
+ $this->child_contextes[$module['namespace']] = new $context($this);
}
}
@@ -243,7 +240,7 @@ public function handleWeb(Request $request = null)
}
$this->container
- ->register('uri', '\Foolz\Foolframe\Model\Uri')
+ ->register('uri', '\Foolz\FoolFrame\Model\Uri')
->addArgument($this)
->addArgument($request);
@@ -266,7 +263,7 @@ public function handleWeb(Request $request = null)
}
$this->profiler->log('Stop Auth rememberme');
- Hook::forge('Foolz\Foolframe\Model\Context.handleWeb.has_auth')
+ Hook::forge('Foolz\FoolFrame\Model\Context::handleWeb#obj.afterAuth')
->setObject($this)
->setParam('route_collection', $this->route_collection)
->execute();
@@ -283,13 +280,13 @@ public function handleWeb(Request $request = null)
$lang = $this->preferences->get('foolframe.lang.default');
}
- // HHVM can't handle gettext
+ // HHVM does not support gettext
if (function_exists('bindtextdomain')) {
$locale = $lang.'.utf8';
putenv('LANG='.$locale);
putenv('LANGUAGE='.$locale);
setlocale(LC_ALL, $locale);
- bindtextdomain($lang, DOCROOT."assets/locale");
+ bindtextdomain($lang, DOCROOT.'assets/locale');
bind_textdomain_codeset($lang, 'UTF-8');
textdomain($lang);
}
@@ -297,7 +294,7 @@ public function handleWeb(Request $request = null)
$this->profiler->log('Start routes setup');
// load the routes from the child contextes first
- Hook::forge('Foolz\Foolframe\Model\Context.handleWeb.route_collection')
+ Hook::forge('Foolz\FoolFrame\Model\Context::handleWeb#obj.routing')
->setObject($this)
->setParam('route_collection', $this->route_collection)
->execute();
@@ -314,19 +311,18 @@ public function handleWeb(Request $request = null)
}
// load the framework routes
-
- Hook::forge('Foolz\Foolframe\Model\Context.handleWeb.contextes_handled')
+ Hook::forge('Foolz\FoolFrame\Model\Context::handleWeb#obj.context')
->setObject($this)
->execute();
// this is the first time we know we have a request for sure
// hooks that need the request to function must run here
- Hook::forge('Foolz\Foolframe\Model\Context.handleWeb.has_request')
+ Hook::forge('Foolz\FoolFrame\Model\Context::handleWeb#obj.request')
->setObject($this)
->setParam('request', $request)
->execute();
- $this->container->register('notices', 'Foolz\Foolframe\Model\Notices')
+ $this->container->register('notices', 'Foolz\FoolFrame\Model\Notices')
->addArgument($this)
->addArgument($request);
@@ -344,7 +340,7 @@ public function handleWeb(Request $request = null)
$this->profiler->log('End HttpKernel loading');
// if this hook is used, it can override the entirety of the request handling
- $response = Hook::forge('Foolz\Foolframe\Model\Context.handleWeb.override_response')
+ $response = Hook::forge('Foolz\FoolFrame\Model\Context::handleWeb#obj.response')
->setObject($this)
->setParam('request', $request)
->execute()
@@ -381,9 +377,9 @@ public function handleConsole()
{
$application = new Application();
- Hook::forge('Foolz\Foolframe\Model\Context::handleConsole.add')
- ->setParam('application', $application)
+ Hook::forge('Foolz\FoolFrame\Model\Context::handleConsole#obj.app')
->setObject($this)
+ ->setParam('application', $application)
->execute();
//$application->add(new \Your\Class\Command\Console()); // that extends Command
@@ -415,7 +411,7 @@ protected function loadInstallRoutes(RouteCollection $route_collection)
'/install/{_suffix}',
[
'_suffix' => '',
- '_controller' => '\Foolz\Foolframe\Controller\Install::*'
+ '_controller' => '\Foolz\FoolFrame\Controller\Install::*'
],
[
'_suffix' => '.*',
@@ -425,12 +421,12 @@ protected function loadInstallRoutes(RouteCollection $route_collection)
$route_collection->add('foolframe.install.index', new Route(
'/',
- ['_controller' => '\Foolz\Foolframe\Controller\Install::index']
+ ['_controller' => '\Foolz\FoolFrame\Controller\Install::index']
));
$route_collection->add('404', new Route(
'',
- ['_controller' => '\Foolz\Foolframe\Controller\Install::404']
+ ['_controller' => '\Foolz\FoolFrame\Controller\Install::404']
));
}
@@ -442,7 +438,7 @@ public function loadRoutes(RouteCollection $route_collection)
'/admin/'.$location.'/{_suffix}',
[
'_suffix' => '',
- '_controller' => '\Foolz\Foolframe\Controller\Admin\\'.ucfirst($location).'::*',
+ '_controller' => '\Foolz\FoolFrame\Controller\Admin\\'.ucfirst($location).'::*',
],
[
'_suffix' => '.*',
@@ -456,7 +452,7 @@ public function loadRoutes(RouteCollection $route_collection)
'/admin/{_suffix}',
[
'_suffix' => '',
- '_controller' => '\Foolz\Foolframe\Controller\Admin::*'
+ '_controller' => '\Foolz\FoolFrame\Controller\Admin::*'
],
[
'_suffix' => '.*',
diff --git a/src/Model/ContextInterface.php b/src/Model/ContextInterface.php
index ee0c29f7..c322fff8 100644
--- a/src/Model/ContextInterface.php
+++ b/src/Model/ContextInterface.php
@@ -1,17 +1,15 @@
parameters = array();
if ($suffix = $request->attributes->get('_suffix')) {
$parameters_temp = explode('/', $suffix);
- $parameters_temp = array_filter($parameters_temp, function ($el) { return $el !== ''; });
+ $parameters_temp = array_filter(
+ $parameters_temp,
+ function ($el) {
+ return $el !== '';
+ }
+ );
foreach ($parameters_temp as $p) {
$this->parameters[] = $p;
diff --git a/src/Model/Cookie.php b/src/Model/Cookie.php
index f3968a07..1935faea 100644
--- a/src/Model/Cookie.php
+++ b/src/Model/Cookie.php
@@ -1,9 +1,9 @@
getService('config');
@@ -17,5 +17,4 @@ public function __construct(Context $context, $name, $value = null, $expire = 0,
$httpOnly
);
}
-
}
diff --git a/src/Model/DoctrineConnection.php b/src/Model/DoctrineConnection.php
index a534d717..697b89fe 100644
--- a/src/Model/DoctrineConnection.php
+++ b/src/Model/DoctrineConnection.php
@@ -1,6 +1,6 @@
logger_trace !== null) {
$string = $exception->getMessage()."\r\n";
foreach ($exception->getTrace() as $trace) {
- $string .= " ";
- if (isset($trace['file'])) $string .= 'at '.$trace['file'].'('.$trace['line'].') ';
- if (isset($trace['class'])) $string .= 'in '. $trace['class'].$trace['type'];
- if (isset($trace['function'])) $string .= $trace['function'].'('.$this->stringify($trace['args']).')';
+ $string .= ' ';
+ if (isset($trace['file'])) {
+ $string .= 'at '.$trace['file'].'('.$trace['line'].') ';
+ }
+ if (isset($trace['class'])) {
+ $string .= 'in '. $trace['class'].$trace['type'];
+ }
+ if (isset($trace['function'])) {
+ $string .= $trace['function'].'('.$this->stringify($trace['args']).')';
+ }
$string .= "\r\n";
}
$this->logger_trace->error($string);
diff --git a/src/Model/Form.php b/src/Model/Form.php
index 8c59507c..27403067 100644
--- a/src/Model/Form.php
+++ b/src/Model/Form.php
@@ -1,7 +1,6 @@
'foolz/foolframe',
- $name_lowercase => 'foolz/'.$name_lowercase
+ 'foolframe' => [
+ 'context' => '\\Foolz\\FoolFrame\\Model\\Context',
+ 'namespace' => 'foolz/foolframe'
+ ],
+ $name_lowercase => [
+ 'context' => $this->config->get('unknown', 'package', 'main.class_context'),
+ 'namespace' => 'foolz/'.$name_lowercase
+ ]
];
$dc = new DoctrineConnection($this->getContext(), $this->config);
diff --git a/src/Model/Logger.php b/src/Model/Logger.php
index 21a3c98e..65cd7491 100644
--- a/src/Model/Logger.php
+++ b/src/Model/Logger.php
@@ -1,6 +1,6 @@
config = $context->getService('config');
+
+ $config = $this->config->get('foolz/foolframe', 'swiftmailer');
+ switch ($config['transport']) {
+ case 'smtp':
+ $transport = Swift_SmtpTransport::newInstance()
+ ->setHost($config['host'])
+ ->setPort($config['port'])
+ ->setUsername($config['username'])
+ ->setPassword($config['password'])
+ ->setEncryption($config['encryption'])
+ ->setAuthMode('login');
+ break;
+
+ default:
+ $transport = Swift_SendmailTransport::newInstance();
+ }
+
+ $this->mailer = Swift_Mailer::newInstance($transport);
+ }
+
+ public function create()
+ {
+ return Swift_Message::newInstance();
+ }
+
+ public function send($message)
+ {
+ return $this->mailer->send($message);
+ }
+}
diff --git a/src/Model/Markdown.php b/src/Model/Markdown.php
index aed9fed0..c66bd71a 100644
--- a/src/Model/Markdown.php
+++ b/src/Model/Markdown.php
@@ -1,5 +1,5 @@
context = $context;
}
@@ -30,4 +31,4 @@ public function getAuth()
{
return $this->context->getService('auth');
}
-}
\ No newline at end of file
+}
diff --git a/src/Model/ModelInterface.php b/src/Model/ModelInterface.php
index 2e69e5fc..4cc73182 100644
--- a/src/Model/ModelInterface.php
+++ b/src/Model/ModelInterface.php
@@ -1,8 +1,8 @@
config->get('foolz/foolframe', 'config', 'modules.installed') as $module) {
- $dir = $this->config->get($module, 'package', 'directories.plugins');
+ $dir = $this->config->get($module['namespace'], 'package', 'directories.plugins');
$this->loader->addDir($dir);
- $dir = VAPPPATH.$module.'/plugins';
+ $dir = VAPPPATH.$module['namespace'].'/plugins';
$this->loader->addDir($dir);
}
@@ -64,9 +65,8 @@ public function instantiate()
$plugin = $this->loader->get($enabled['slug']);
$plugin->bootstrap();
// we could use execute() but we want to inject more in the call
- \Foolz\Plugin\Hook::forge('Foolz\Plugin\Plugin::execute.'.$plugin->getConfig('name'))
+ \Foolz\Plugin\Hook::forge('Foolz\Plugin\Plugin::execute#'.$plugin->getConfig('name'))
->setObject($plugin)
- ->setParam('framework', $this->getContext())
->setParam('context', $this->getContext())
->execute();
@@ -77,7 +77,8 @@ public function instantiate()
}
}
- public function handleWeb() {
+ public function handleWeb()
+ {
$this->uri = $this->getContext()->getService('uri');
$this->loader->setPublicDir(DOCROOT.'foolframe/');
$this->loader->setBaseUrl($this->uri->base().'foolframe/');
@@ -129,8 +130,6 @@ public function getPlugin($slug)
public function enable($slug)
{
- $plugin = $this->loader->get($slug);
-
$count = $this->dc->qb()
->select('COUNT(*) as count')
->from($this->dc->p('plugins'), 'p')
@@ -160,8 +159,6 @@ public function enable($slug)
*/
public function disable($slug)
{
- $plugin = $this->loader->get($slug);
-
$this->dc->qb()
->update($this->dc->p('plugins'))
->set('enabled', ':enabled')
@@ -182,7 +179,7 @@ public function install($slug)
$this->clearCache();
// run the schema update
- $sm = \Foolz\Foolframe\Model\SchemaManager::forge($this->dc->getConnection(), $this->dc->getPrefix().'plugin_');
+ $sm = \Foolz\FoolFrame\Model\SchemaManager::forge($this->dc->getConnection(), $this->dc->getPrefix().'plugin_');
foreach ($this->getInstalled() as $enabled) {
try {
@@ -192,7 +189,7 @@ public function install($slug)
$plug->bootstrap();
}
- \Foolz\Plugin\Hook::forge('Foolz\Foolframe\Model\Plugin::schemaUpdate.'.$plug->getConfig('name'))
+ \Foolz\Plugin\Hook::forge('Foolz\FoolFrame\Model\Plugin::install#'.$plug->getConfig('name'))
->setParam('context', $this->getContext())
->setParam('schema', $sm->getCodedSchema())
->execute();
diff --git a/src/Model/Preferences.php b/src/Model/Preferences.php
index 04a647ab..6b4e3329 100644
--- a/src/Model/Preferences.php
+++ b/src/Model/Preferences.php
@@ -1,9 +1,10 @@
set($this->preferences, 3600);
}
- $this->preferences = \Foolz\Plugin\Hook::forge('Foolz\Foolframe\Model\Preferences::load.result.public')
+ $this->preferences = Hook::forge('Foolz\FoolFrame\Model\Preferences::load#var.preferences')
->setObject($this)
->setParam('preferences', $this->preferences)
->execute()
@@ -124,7 +125,7 @@ public function get($setting, $fallback = null, $show_empty_string = false)
$identifier = array_shift($segments);
$query = implode('.', $segments);
- return $this->config->get($this->modules[$identifier], 'package', 'preferences.'.$query);
+ return $this->config->get($this->modules[$identifier]['namespace'], 'package', 'preferences.'.$query);
}
public function set($setting, $value, $reload = true)
diff --git a/src/Model/Schema.php b/src/Model/Schema.php
index 6679f242..8a7fa5e2 100755
--- a/src/Model/Schema.php
+++ b/src/Model/Schema.php
@@ -1,6 +1,6 @@
setObject($new)
->setParam('prefixes_ignored', $prefixes_ignored)
->execute()
@@ -78,7 +80,7 @@ public static function forge(\Doctrine\DBAL\Connection $connection, $prefix = ''
}
// get more tables ignored
- $tables = \Foolz\Plugin\Hook::forge('Foolz\Foolframe\Model\SchemaManager::forge.tables')
+ $tables = Hook::forge('Foolz\FoolFrame\Model\SchemaManager::forge#var.tables')
->setObject($new)
->setParam('tables', $tables)
->execute()
diff --git a/src/Model/Security.php b/src/Model/Security.php
index 665d8803..70c90610 100644
--- a/src/Model/Security.php
+++ b/src/Model/Security.php
@@ -1,7 +1,6 @@
setParam('environment', $environment)
->execute()
->get($environment);
diff --git a/src/Model/Uri.php b/src/Model/Uri.php
index 16e3101a..2c26b90c 100644
--- a/src/Model/Uri.php
+++ b/src/Model/Uri.php
@@ -1,11 +1,11 @@
isDir()) {
+ rmdir($file->getPathname());
+ } else {
+ unlink($file->getPathname());
+ }
+ }
+
+ rmdir($path);
+ } else {
+ unlink($path);
+ }
+ }
+
+ /**
+ * Copy a file or recursively copy a directories contents
+ *
+ * From: http://davidhancock.co/2012/11/useful-php-functions-for-dealing-with-the-file-system/
+ *
+ * @param string $source The path to the source file/directory
+ * @param string $dest The path to the destination directory
+ * @return void
+ */
+ public static function copy($source, $dest)
+ {
+ if (is_dir($source)) {
+ $iterator = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
+ RecursiveIteratorIterator::SELF_FIRST
+ );
+
+ foreach ($iterator as $file) {
+ if ($file->isDir()) {
+ mkdir($dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
+ } else {
+ copy($file, $dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
+ }
+ }
+ } else {
+ copy($source, $dest);
+ }
+ }
+
+ /**
+ * Return the size of a file or a directory and its contents in bytes
+ *
+ * NOTE: This function may return unexpected results for files larger than
+ * 2GB on 32bit hosts due to PHP's integer type being 32bit signed.
+ *
+ * From: http://davidhancock.co/2012/11/useful-php-functions-for-dealing-with-the-file-system/
+ *
+ * @param string $path The path to the file/directory to calculate the size of
+ * @return int
+ */
+ public static function getSize($path)
+ {
+ $size = 0;
+ if (is_dir($path)) {
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
+
+ foreach ($iterator as $file) {
+ $size += $file->getSize();
+ }
+ } else {
+ $size = filesize($path);
+ }
+
+ return $size;
+ }
}
diff --git a/src/Model/Validation/ActiveConstraint/ActiveConstraint.php b/src/Model/Validation/ActiveConstraint/ActiveConstraint.php
index d547361b..e0d95f92 100644
--- a/src/Model/Validation/ActiveConstraint/ActiveConstraint.php
+++ b/src/Model/Validation/ActiveConstraint/ActiveConstraint.php
@@ -1,14 +1,12 @@
compareValues($value, $constraint->value, $constraint)) {
$this->context->addViolation($constraint->message, [
'{{ field }}' => $constraint->field
diff --git a/src/Model/Validation/Validator.php b/src/Model/Validation/Validator.php
index 0fcd7e12..3b94c3e6 100644
--- a/src/Model/Validation/Validator.php
+++ b/src/Model/Validation/Validator.php
@@ -1,10 +1,10 @@
labels[$field_name] = $label;
$this->constraints[$field_name] = $constraints;
@@ -53,7 +54,8 @@ public function add($field_name, $label, $constraints) {
*
* @param array $data
*/
- public function validate(Array $data) {
+ public function validate(Array $data)
+ {
$this->original_values = $data;
$this->final_values = $data;
@@ -99,7 +101,8 @@ public function validate(Array $data) {
*
* @return array
*/
- public function getOriginalValues() {
+ public function getOriginalValues()
+ {
return $this->original_values;
}
@@ -107,7 +110,8 @@ public function getOriginalValues() {
* Gets the array of values after they were treated by the validation
* @return array
*/
- public function getFinalValues() {
+ public function getFinalValues()
+ {
return $this->final_values;
}
@@ -116,7 +120,8 @@ public function getFinalValues() {
*
* @return ViolationCollection
*/
- public function getViolations() {
+ public function getViolations()
+ {
return $this->violations;
}
@@ -238,8 +243,8 @@ public static function formValidate($form, $input)
foreach ($form as $name => $item) {
// not interested in data that is not related to database
if ($item['type'] != 'checkbox_array' &&
- (!isset($item['database']) || $item['database'] !== TRUE) &&
- (!isset($item['preferences']) || $item['preferences'] === FALSE)
+ (!isset($item['database']) || $item['database'] !== true) &&
+ (!isset($item['preferences']) || $item['preferences'] === false)
) {
continue;
}
@@ -259,7 +264,7 @@ public static function formValidate($form, $input)
$result[$name] = 0;
}
} else {
- if (isset($input[$name]) && $input[$name] !== FALSE) {
+ if (isset($input[$name]) && $input[$name] !== false) {
$result[$name] = $input[$name];
}
}
diff --git a/src/Model/Validation/Violation.php b/src/Model/Validation/Violation.php
index f468db90..2aed92a8 100644
--- a/src/Model/Validation/Violation.php
+++ b/src/Model/Validation/Violation.php
@@ -1,12 +1,12 @@
violations = $violations;
$this->field_name = $field_name;
$this->label = $label;
@@ -36,14 +37,16 @@ public function __construct(ConstraintViolationList $violations, $field_name, $l
/**
* @return ConstraintViolationList
*/
- public function getViolations() {
+ public function getViolations()
+ {
return $this->violations;
}
/**
* @return string
*/
- public function getViolationsString() {
+ public function getViolationsString()
+ {
$array = [];
foreach ($this->violations as $violation) {
/** @var $violation ConstraintViolation */
@@ -56,14 +59,16 @@ public function getViolationsString() {
/**
* @return string
*/
- public function getFieldName() {
+ public function getFieldName()
+ {
return $this->field_name;
}
/**
* @return string
*/
- public function getLabel() {
+ public function getLabel()
+ {
return $this->label;
}
-}
\ No newline at end of file
+}
diff --git a/src/Model/Validation/ViolationCollection.php b/src/Model/Validation/ViolationCollection.php
index cd2f7269..22788033 100644
--- a/src/Model/Validation/ViolationCollection.php
+++ b/src/Model/Validation/ViolationCollection.php
@@ -1,8 +1,8 @@
violations = $violations;
}
/**
* @return Violation[]
*/
- public function getArray() {
+ public function getArray()
+ {
return $this->violations;
}
+ public function getString()
+ {
+ $array = [];
+ foreach ($this->violations as $violation) {
+ $array[] = $violation->getLabel().': '.$violation->getViolationsString();
+ }
+
+ return $array;
+ }
+
/**
* @return int
*/
- public function count() {
+ public function count()
+ {
return count($this->violations);
}
/**
* @return string
*/
- public function getHtml() {
- $array = [];
- foreach ($this->violations as $violation) {
- $array[] = $violation->getLabel().': '.$violation->getViolationsString();
- }
-
- return implode('
', $array);
+ public function getHtml()
+ {
+ return implode('
', $this->getString());
}
/**
* @return string
*/
- public function getText() {
- $array = [];
- foreach ($this->violations as $violation) {
- $array[] = $violation->getLabel().': '.$violation->getViolationsString();
- }
-
- return implode("\n", $array);
+ public function getText()
+ {
+ return implode("\n", $this->getString());
}
-}
\ No newline at end of file
+}
diff --git a/src/View/View.php b/src/View/View.php
index 20124a02..0a8a303c 100644
--- a/src/View/View.php
+++ b/src/View/View.php
@@ -1,16 +1,16 @@