diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..57872d0f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/vendor/
diff --git a/.idea/School Accounts Manager.iml b/.idea/School Accounts Manager.iml
index 5830d76c..5b32a4d6 100644
--- a/.idea/School Accounts Manager.iml
+++ b/.idea/School Accounts Manager.iml
@@ -4,6 +4,7 @@
+
diff --git a/.idea/php.xml b/.idea/php.xml
index c3c0acc9..9147d5db 100644
--- a/.idea/php.xml
+++ b/.idea/php.xml
@@ -28,6 +28,7 @@
+
diff --git a/app/api/ad/ADConnection.php b/app/api/ad/ADConnection.php
index bfd55019..2de93e55 100644
--- a/app/api/ad/ADConnection.php
+++ b/app/api/ad/ADConnection.php
@@ -12,6 +12,7 @@
use Adldap\Adldap\Auth\PasswordRequiredException;
use Adldap\Adldap\Auth\UsernameRequiredException;
+use Adldap\AdldapException;
use Adldap\Connections\Provider;
use Adldap\Connections\ProviderInterface;
use App\Models\Database\DistrictDatabase;
@@ -75,17 +76,20 @@ public function __construct(array $configuration = [])
}
}
-
- $this->addProvider($configuration);
try {
+ $this->addProvider($configuration);
+
set_error_handler([$this, 'handleError']);
- if ($configuration["username"] !== '' && $configuration["password"] !== '') {
+ if ($configuration["username"] !== '' && $configuration["password"] !== '' && $configuration["base_dn"] !== '') {
$this->connection = $this->connect();
} else {
throw new AppException("Missing username or password");
}
new AppErrorHandler();
+ } catch (AdldapException $exception) {
+ $this->ldapLogger->warning($exception);
+
} catch (Exception $exception) {
self::$lastError = $exception->getMessage();
@@ -116,6 +120,7 @@ public static function isConnected(): bool
* Now check if connection is legit
*/
if (self::$instance->connection instanceof Provider === false) {
+ self::$logger->info("AD not connected");
return false;
}
/**
@@ -123,9 +128,12 @@ public static function isConnected(): bool
*/
self::$logger->debug(self::$instance->connection->getConnection()->getLastError());
if (!self::$instance->connection->getConnection()->getLastError()) {
+ self::$logger->info("AD not connected");
+
return false;
}
+ self::$logger->info("AD connected");
return true;
}
diff --git a/app/app/App.php b/app/app/App.php
index 617411c7..c4b26d95 100644
--- a/app/app/App.php
+++ b/app/app/App.php
@@ -48,6 +48,7 @@
use System\App\Error\AppErrorHandler;
use System\App\UserLogger;
use System\App\ControllerFactory;
+use System\Core;
use System\Request;
use System\App\Router;
use App\Models\User\User;
@@ -151,10 +152,7 @@ private function setErrorMode(): void
public function inDebugMode(): bool
{
- if (AppDatabase::getDebugMode()) {
- return true;
- }
- return false;
+ return Core::inDebugMode();
}
diff --git a/app/views/layouts/navbar.php b/app/views/layouts/navbar.php
index c5bb8cff..94f99534 100644
--- a/app/views/layouts/navbar.php
+++ b/app/views/layouts/navbar.php
@@ -108,8 +108,6 @@
Settings
Setup
- About
@@ -130,7 +128,9 @@
-
Create New District
+
Create New Domain
addElementToCurrentRow($name)
->addElementToNewRow($createButton);
echo $form->print();
diff --git a/app/views/settings/email.php b/app/views/settings/email.php
index 39c28e82..0c806249 100644
--- a/app/views/settings/email.php
+++ b/app/views/settings/email.php
@@ -51,9 +51,6 @@
$smtpPassword = new FormText("SMTP Password", 'SMTP Auth password',
'smtpPassword', $email->getSMTPPassword());
-$useSMTPSSL = new FormRadio('Use SMTP over SSL', 'Sends emails securly', 'useSMTPSSL');
-$useSMTPSSL->addOption('False', 0, !$email->getUseSMTPSSL());
-$useSMTPSSL->addOption('True', 1, $email->getUseSMTPSSL());
$useEncryption = new FormSlider('Use Encryption', 'Sends emails securly', 'useEncryption');
$useEncryption->addOption('False', 0, !$email->getUseSMTPEncryption());
diff --git a/composer.json b/composer.json
index 236fa067..a4537ba0 100644
--- a/composer.json
+++ b/composer.json
@@ -6,6 +6,7 @@
"visualappeal/php-auto-update": "^0.12.3",
"ext-zip": "*",
"ext-json": "*",
- "ext-pdo": "*"
+ "ext-pdo": "*",
+ "directorytree/ldaprecord": "^1.7"
}
}
diff --git a/composer.lock b/composer.lock
index 2a654e83..fef26e74 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "35ce1c0500f0820008273c4320561be7",
+ "content-hash": "b0f9ff269c7b3e7a97a9c6c33f143efa",
"packages": [
{
"name": "adldap2/adldap2",
@@ -182,6 +182,72 @@
],
"time": "2017-01-18T12:58:33+00:00"
},
+ {
+ "name": "directorytree/ldaprecord",
+ "version": "v1.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/DirectoryTree/LdapRecord.git",
+ "reference": "9ec289149bb94908821e17758c6a27eca755d29f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/9ec289149bb94908821e17758c6a27eca755d29f",
+ "reference": "9ec289149bb94908821e17758c6a27eca755d29f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-ldap": "*",
+ "illuminate/contracts": "^5.0|^6.0|^7.0",
+ "nesbot/carbon": "^1.0|^2.0",
+ "php": ">=7.2",
+ "psr/log": "^1.0",
+ "psr/simple-cache": "^1.0",
+ "tightenco/collect": "^5.0|^6.0|^7.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "LdapRecord\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Steve Bauman",
+ "email": "steven_bauman@outlook.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fully-featured LDAP ORM.",
+ "homepage": "https://www.ldaprecord.com",
+ "keywords": [
+ "active directory",
+ "ad",
+ "adLDAP",
+ "adldap2",
+ "directory",
+ "ldap",
+ "ldaprecord",
+ "orm",
+ "windows"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/stevebauman",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-26T20:11:45+00:00"
+ },
{
"name": "guzzlehttp/guzzle",
"version": "5.3.4",
@@ -460,6 +526,89 @@
],
"time": "2017-06-19T01:22:40+00:00"
},
+ {
+ "name": "nesbot/carbon",
+ "version": "2.35.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "4b9bd835261ef23d36397a46a76b496a458305e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4b9bd835261ef23d36397a46a76b496a458305e5",
+ "reference": "4b9bd835261ef23d36397a46a76b496a458305e5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1.8 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "doctrine/orm": "^2.7",
+ "friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
+ "kylekatarnls/multi-tester": "^1.1",
+ "phpmd/phpmd": "^2.8",
+ "phpstan/phpstan": "^0.11",
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev",
+ "dev-3.x": "3.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "http://nesbot.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "http://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "http://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "funding": [
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-24T18:27:52+00:00"
+ },
{
"name": "phpmailer/phpmailer",
"version": "v6.1.6",
@@ -867,6 +1016,169 @@
],
"time": "2020-05-12T16:47:27+00:00"
},
+ {
+ "name": "symfony/translation",
+ "version": "v5.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2",
+ "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.15",
+ "symfony/translation-contracts": "^2"
+ },
+ "conflict": {
+ "symfony/config": "<4.4",
+ "symfony/dependency-injection": "<5.0",
+ "symfony/http-kernel": "<5.0",
+ "symfony/twig-bundle": "<5.0",
+ "symfony/yaml": "<4.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "^4.4|^5.0",
+ "symfony/console": "^4.4|^5.0",
+ "symfony/dependency-injection": "^5.0",
+ "symfony/finder": "^4.4|^5.0",
+ "symfony/http-kernel": "^5.0",
+ "symfony/intl": "^4.4|^5.0",
+ "symfony/service-contracts": "^1.1.2|^2",
+ "symfony/yaml": "^4.4|^5.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Translation Component",
+ "homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-30T20:35:19+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v2.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e",
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "suggest": {
+ "symfony/translation-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-20T17:43:50+00:00"
+ },
{
"name": "symfony/var-dumper",
"version": "v5.1.0",
@@ -1059,7 +1371,11 @@
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
- "platform": [],
+ "platform": {
+ "ext-zip": "*",
+ "ext-json": "*",
+ "ext-pdo": "*"
+ },
"platform-dev": [],
"plugin-api-version": "1.1.0"
}
diff --git a/public/css/style2.css b/public/css/style2.css
index 708c5ce0..43eb9d61 100644
--- a/public/css/style2.css
+++ b/public/css/style2.css
@@ -114,26 +114,26 @@ and open the template in the editor.
}
.form-element {
- margin-bottom: 2em !important;
+ margin-bottom: 2em;
}
@media only screen and (min-width: 576px) {
.form-element {
- margin-bottom: 2em !important;
+ margin-bottom: 2em;
}
}
@media only screen and (min-width: 768px) {
.form-element {
- margin-bottom: 1em !important;
+ margin-bottom: 1em;
}
}
@media only screen and (min-width: 992px) {
.form-element {
- margin-bottom: 1em !important;
+ margin-bottom: 1em;
}
}
diff --git a/system/app/forms/FormSlider.php b/system/app/forms/FormSlider.php
index bd61d375..7dcd8b60 100644
--- a/system/app/forms/FormSlider.php
+++ b/system/app/forms/FormSlider.php
@@ -36,8 +36,28 @@
class FormSlider extends FormRadio
{
+ /**
+ * FormSlider constructor.
+ *
+ * @param string $label
+ * @param string $subLabel
+ * @param string $name
+ * @param string $value
+ */
+ public function __construct($label = '', $subLabel = '', $name = '', $value = '')
+ {
+ parent::__construct($label, $subLabel, $name, $value);
+ $this->addElementClasses('mb-4');
+ }
+
+
public function getElementHTML()
{
+ $disable = '';
+ if ($this->isDisabled()) {
+ $disable = ' disabled ';
+
+ }
/* @var $option FormRadioOption */
$selectedOption = new FormRadioOption('');
@@ -62,7 +82,8 @@ public function getElementHTML()
$function .= '}'
. '$("#' . $outputId . '").html(output);';
$this->setScript(Javascript::on($this->getId(), $function, 'click touch'));
- $html = '
';
+ $width = 50 * (count($this->getOptions()) - 1);
+ $html = '
';
$html .= '
' . $selectedOption->getLabel() . '
';
return $html;
}