diff --git a/.gitignore b/.gitignore
index 13d06bef..5bac1cb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,11 +45,12 @@ crashlytics.properties
crashlytics-build.properties
fabric.properties
-backup/*
-config/*
+app/cache/*
+app/backup/*
+app/config/*
res/
tools/
-tmp/
-inc/Plugins/*
+app/temp/*
+app/modules/web/plugins/*
!.blank
\ No newline at end of file
diff --git a/ajax/ajax_accGetFiles.php b/ajax/ajax_accGetFiles.php
deleted file mode 100644
index 9369c364..00000000
--- a/ajax/ajax_accGetFiles.php
+++ /dev/null
@@ -1,55 +0,0 @@
-.
- */
-
-use SP\Controller\ItemListController;
-use SP\Core\Init;
-use SP\Core\SessionUtil;
-use SP\Http\Request;
-use SP\Http\Response;
-use SP\Util\Checks;
-
-define('APP_ROOT', dirname(__DIR__));
-
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
-
-Request::checkReferer('GET');
-
-if (!Init::isLoggedIn()) {
- return;
-}
-
-if (!Checks::fileIsEnabled()) {
- echo __('Gestión de archivos deshabilitada');
- return false;
-}
-
-$sk = Request::analyze('sk', false);
-
-if (!$sk || !SessionUtil::checkSessionKey($sk)) {
- Response::printHtmlError(__('CONSULTA INVÁLIDA'));
-}
-
-$Controller = new ItemListController();
-$Controller->getAccountFiles();
-$Controller->view();
\ No newline at end of file
diff --git a/ajax/ajax_accSearch.php b/ajax/ajax_accSearch.php
deleted file mode 100644
index 372a59c9..00000000
--- a/ajax/ajax_accSearch.php
+++ /dev/null
@@ -1,56 +0,0 @@
-.
- */
-
-use SP\Controller\AccountSearchController;
-use SP\Core\Init;
-use SP\Http\Request;
-use SP\Core\SessionUtil;
-use SP\Http\Response;
-
-define('APP_ROOT', dirname(__DIR__));
-
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
-
-Request::checkReferer('GET');
-
-if (!Init::isLoggedIn()) {
- Response::printJson(__('La sesión no se ha iniciado o ha caducado'), 10);
-}
-
-$sk = Request::analyze('sk', false);
-
-if (!$sk || !SessionUtil::checkSessionKey($sk)) {
- Response::printJson(__('CONSULTA INVÁLIDA'));
-}
-
-$Controller = new AccountSearchController();
-$Controller->setIsAjax(true);
-$Controller->getSearch();
-
-$data = [
- 'sk' => SessionUtil::getSessionKey(),
- 'html' => $Controller->render()
-];
-
-Response::printJson($data, 0);
\ No newline at end of file
diff --git a/ajax/ajax_checkConnection.php b/ajax/ajax_checkConnection.php
index f4276701..c583f55c 100644
--- a/ajax/ajax_checkConnection.php
+++ b/ajax/ajax_checkConnection.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
diff --git a/ajax/ajax_configSave.php b/ajax/ajax_configSave.php
index 79573b80..5e73aaad 100644
--- a/ajax/ajax_configSave.php
+++ b/ajax/ajax_configSave.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
diff --git a/ajax/ajax_eventlog.php b/ajax/ajax_eventlog.php
index 132c5d0c..d394c3bb 100644
--- a/ajax/ajax_eventlog.php
+++ b/ajax/ajax_eventlog.php
@@ -25,17 +25,15 @@
use SP\Controller\EventlogController;
use SP\Core\Init;
use SP\Http\Request;
+use SP\Util\Util;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
-if (!Init::isLoggedIn()) {
- \SP\Util\Util::logout();
-}
-
$Controller = new EventlogController();
+$Controller->checkLoggedIn();
$Controller->doAction();
$Controller->view();
\ No newline at end of file
diff --git a/ajax/ajax_filesMgmt.php b/ajax/ajax_filesMgmt.php
index 6cb26ef4..d59fc201 100644
--- a/ajax/ajax_filesMgmt.php
+++ b/ajax/ajax_filesMgmt.php
@@ -23,10 +23,8 @@
*/
use SP\Account\AccountUtil;
-use SP\Config\Config;
use SP\Core\ActionsInterface;
use SP\Core\Exceptions\SPException;
-use SP\Core\Init;
use SP\Core\SessionUtil;
use SP\DataModel\FileData;
use SP\Html\Html;
@@ -35,16 +33,15 @@ use SP\Http\Response;
use SP\Log\Log;
use SP\Mgmt\Files\File;
use SP\Mgmt\Files\FileUtil;
-use SP\Util\Checks;
use SP\Util\Util;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
-if (!Init::isLoggedIn()) {
+if (!Util::isLoggedIn($dic->get(\SP\Core\SessionFactory::class))) {
Util::logout();
}
@@ -54,7 +51,10 @@ if (!$sk || !SessionUtil::checkSessionKey($sk)) {
Response::printJson(__('CONSULTA INVÁLIDA'));
}
-if (!Checks::fileIsEnabled()) {
+/** @var \SP\Config\ConfigData $ConfigData */
+$ConfigData = $dic->get(\SP\Config\ConfigData::class);
+
+if (!$ConfigData->isFilesEnabled()) {
Response::printJson(__('Gestión de archivos deshabilitada'));
}
@@ -72,8 +72,8 @@ if ($actionId === ActionsInterface::ACTION_ACC_FILES_UPLOAD) {
$LogMessage->setAction(__('Subir Archivo', false));
- $allowedExts = Config::getConfig()->getFilesAllowedExts();
- $allowedSize = Config::getConfig()->getFilesAllowedSize();
+ $allowedExts = $ConfigData->getFilesAllowedExts();
+ $allowedSize = $ConfigData->getFilesAllowedSize();
if (count($allowedExts) === 0) {
$LogMessage->addDescription(__('No hay extensiones permitidas', false));
diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php
index 7240ab66..7bdc374d 100644
--- a/ajax/ajax_getContent.php
+++ b/ajax/ajax_getContent.php
@@ -2,8 +2,8 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
* @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
@@ -22,7 +22,6 @@
* along with sysPass. If not, see .
*/
-use SP\Config\Config;
use SP\Controller\AccountController;
use SP\Controller\AccountSearchController;
use SP\Controller\ConfigController;
@@ -31,9 +30,7 @@ use SP\Controller\ItemListController;
use SP\Controller\NoticesController;
use SP\Controller\UserPreferencesController;
use SP\Core\ActionsInterface;
-use SP\Core\DiFactory;
-use SP\Core\Init;
-use SP\Core\Session;
+use SP\Core\SessionFactory;
use SP\Core\Template;
use SP\Http\Request;
use SP\Http\Response;
@@ -41,11 +38,18 @@ use SP\Util\Util;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
-if (!Init::isLoggedIn()) {
+/** @var \SP\Storage\Database $db */
+$db = $dic->get(\SP\Storage\Database::class);
+/** @var SessionFactory $session */
+$session = $dic->get(SessionFactory::class);
+/** @var \SP\Core\UI\Theme $theme */
+$theme = $dic->get(\SP\Core\UI\Theme::class);
+
+if (!Util::isLoggedIn($session)) {
Util::logout();
}
@@ -58,7 +62,7 @@ if (!Request::analyze('actionId', 0, true)) {
$actionId = Request::analyze('actionId', 0);
$itemId = Request::analyze('itemId', 0);
-$UserData = Session::getUserData();
+$UserData = SessionFactory::getUserData();
$Tpl = new Template();
$Tpl->assign('actionId', $actionId);
@@ -69,7 +73,7 @@ $Tpl->assign('userId', $UserData->getUserId());
$Tpl->assign('userGroupId', $UserData->getUserGroupId());
$Tpl->assign('userIsAdminApp', $UserData->isUserIsAdminApp());
$Tpl->assign('userIsAdminAcc', $UserData->isUserIsAdminAcc());
-$Tpl->assign('themeUri', DiFactory::getTheme()->getThemeUri());
+$Tpl->assign('themeUri', $theme->getThemeUri());
switch ($actionId) {
case ActionsInterface::ACTION_ACC_SEARCH:
@@ -136,8 +140,11 @@ switch ($actionId) {
break;
}
+/** @var \SP\Config\ConfigData $ConfigData */
+$ConfigData = $dic->get(\SP\Config\ConfigData::class);
+
// Se comprueba si se debe de mostrar la vista de depuración
-if ($UserData->isUserIsAdminApp() && Config::getConfig()->isDebug()) {
+if ($UserData->isUserIsAdminApp() && $ConfigData->isDebug()) {
$Controller->getDebug();
}
diff --git a/ajax/ajax_getEnvironment.php b/ajax/ajax_getEnvironment.php
deleted file mode 100644
index 2b4ee9ac..00000000
--- a/ajax/ajax_getEnvironment.php
+++ /dev/null
@@ -1,66 +0,0 @@
-.
- */
-
-use SP\Auth\Browser\Browser;
-use SP\Config\Config;
-use SP\Core\CryptPKI;
-use SP\Core\Init;
-use SP\Core\Plugin\PluginUtil;
-use SP\Core\Session;
-use SP\Http\Cookies;
-use SP\Http\Request;
-use SP\Http\Response;
-use SP\Util\Checks;
-
-define('APP_ROOT', dirname(__DIR__));
-
-require APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
-require APP_ROOT . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'strings.js.php';
-
-Request::checkReferer('GET');
-
-$Config = Config::getConfig();
-
-$data = [
- 'lang' => $stringsJsLang,
- 'locale' => $Config->getSiteLang(),
- 'app_root' => Init::$WEBURI,
- 'pk' => '',
- 'max_file_size' => $Config->getFilesAllowedSize(),
- 'check_updates' => Session::getAuthCompleted() && ($Config->isCheckUpdates() || $Config->isChecknotices()) && (Session::getUserData()->isUserIsAdminApp() || Checks::demoIsEnabled()),
- 'timezone' => date_default_timezone_get(),
- 'debug' => DEBUG || $Config->isDebug(),
- 'cookies_enabled' => Cookies::checkCookies(),
- 'plugins' => PluginUtil::getEnabledPlugins(),
- 'loggedin' => Init::isLoggedIn(),
- 'authbasic_autologin' => Browser::getServerAuthUser() && Config::getConfig()->isAuthBasicAutoLoginEnabled()
-];
-
-try {
- $CryptPKI = new CryptPKI();
- $data['pk'] = Session::getPublicKey() ?: $CryptPKI->getPublicKey();
-} catch (Exception $e) {
-}
-
-Response::printJson($data, 0);
\ No newline at end of file
diff --git a/ajax/ajax_getItems.php b/ajax/ajax_getItems.php
index 6e3fab49..1d006bd5 100644
--- a/ajax/ajax_getItems.php
+++ b/ajax/ajax_getItems.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_install.php b/ajax/ajax_install.php
index 69443646..d0a97d50 100644
--- a/ajax/ajax_install.php
+++ b/ajax/ajax_install.php
@@ -32,7 +32,7 @@ use SP\Util\Json;
define('APP_ROOT', dirname(__DIR__));
define('IS_INSTALLER', 1);
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
diff --git a/ajax/ajax_itemSave.php b/ajax/ajax_itemSave.php
index 8bcc393f..7bbb8aaf 100644
--- a/ajax/ajax_itemSave.php
+++ b/ajax/ajax_itemSave.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
diff --git a/ajax/ajax_itemSearch.php b/ajax/ajax_itemSearch.php
index 59a2909c..d308e9c9 100644
--- a/ajax/ajax_itemSearch.php
+++ b/ajax/ajax_itemSearch.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_itemShow.php b/ajax/ajax_itemShow.php
index 769e6544..ec0da55a 100644
--- a/ajax/ajax_itemShow.php
+++ b/ajax/ajax_itemShow.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_noticeSearch.php b/ajax/ajax_noticeSearch.php
index 037acf47..6f5bebff 100644
--- a/ajax/ajax_noticeSearch.php
+++ b/ajax/ajax_noticeSearch.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_noticeShow.php b/ajax/ajax_noticeShow.php
index 8ee02abc..f4974c94 100644
--- a/ajax/ajax_noticeShow.php
+++ b/ajax/ajax_noticeShow.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_passReset.php b/ajax/ajax_passReset.php
index 7a4eadb8..b48a01eb 100644
--- a/ajax/ajax_passReset.php
+++ b/ajax/ajax_passReset.php
@@ -36,7 +36,7 @@ use SP\Util\Json;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
diff --git a/ajax/ajax_task.php b/ajax/ajax_task.php
index 9b4a37bf..7814b009 100644
--- a/ajax/ajax_task.php
+++ b/ajax/ajax_task.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
session_write_close();
diff --git a/ajax/ajax_upgrade.php b/ajax/ajax_upgrade.php
index 06e631bf..43e15c09 100644
--- a/ajax/ajax_upgrade.php
+++ b/ajax/ajax_upgrade.php
@@ -28,7 +28,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
define('IS_UPGRADE', 1);
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/ajax/ajax_userPrefsSave.php b/ajax/ajax_userPrefsSave.php
index f7c930dc..dcabce24 100644
--- a/ajax/ajax_userPrefsSave.php
+++ b/ajax/ajax_userPrefsSave.php
@@ -26,7 +26,7 @@ use Plugins\Authenticator\Authenticator;
use SP\Core\ActionsInterface;
use SP\Core\Init;
use SP\Core\Language;
-use SP\Core\Session;
+use SP\Core\SessionFactory;
use SP\Core\Exceptions\SPException;
use SP\Core\DiFactory;
use SP\Http\JsonResponse;
@@ -40,13 +40,20 @@ use SP\Util\Util;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('POST');
$Json = new JsonResponse();
-if (!Init::isLoggedIn()) {
+/** @var \SP\Storage\Database $db */
+$db = $dic->get(\SP\Storage\Database::class);
+/** @var SessionFactory $session */
+$session = $dic->get(SessionFactory::class);
+/** @var \SP\Core\UI\Theme $theme */
+$theme = $dic->get(\SP\Core\UI\Theme::class);
+
+if (!Util::isLoggedIn($session)) {
$Json->setStatus(10);
$Json->setDescription(__('La sesión no se ha iniciado o ha caducado'));
Json::returnJson($Json);
@@ -80,10 +87,10 @@ if ($actionId === ActionsInterface::ACTION_USR_PREFERENCES_GENERAL) {
UserPreferences::getItem($UserPreferencesData)->update();
// Forzar la detección del lenguaje tras actualizar
Language::setLanguage(true);
- DiFactory::getTheme()->initTheme(true);
+ $theme->initTheme(true);
// Actualizar las preferencias en la sesión y recargar la página
- Session::setUserPreferences($UserPreferencesData);
+ SessionFactory::setUserPreferences($UserPreferencesData);
Util::reload();
$Json->setStatus(0);
diff --git a/ajax/ajax_wiki.php b/ajax/ajax_wiki.php
index d3cc27d2..5530c738 100644
--- a/ajax/ajax_wiki.php
+++ b/ajax/ajax_wiki.php
@@ -27,7 +27,7 @@ use SP\Http\Request;
define('APP_ROOT', dirname(__DIR__));
-require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
Request::checkReferer('GET');
diff --git a/api.php b/api.php
index 361cc002..44455eaa 100644
--- a/api.php
+++ b/api.php
@@ -27,7 +27,7 @@ use SP\Log\Log;
define('APP_ROOT', '.');
-require APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
header('Content-type: application/json');
diff --git a/backup/.blank b/app/backup/.blank
similarity index 100%
rename from backup/.blank
rename to app/backup/.blank
diff --git a/config/.blank b/app/cache/.blank
similarity index 100%
rename from config/.blank
rename to app/cache/.blank
diff --git a/inc/Plugins/.blank b/app/config/.blank
similarity index 100%
rename from inc/Plugins/.blank
rename to app/config/.blank
diff --git a/app/config/config.php b/app/config/config.php
new file mode 100644
index 00000000..5c46bb4c
--- /dev/null
+++ b/app/config/config.php
@@ -0,0 +1,47 @@
+ 12,
+ 'account_link' => 1,
+ 'account_passtoimage' => false,
+ 'checknotices' => true,
+ 'checkupdates' => true,
+ 'config_hash' => '53489a9c67140c7a72d12b71cb1eefd5',
+ 'dbhost' => 'localhost',
+ 'dbname' => 'syspass',
+ 'dbpass' => 'ff6555bb87aa43d732346d2224736095',
+ 'dbuser' => 'sp_admin',
+ 'debug' => false,
+ 'demo_enabled' => false,
+ 'files_allowed_exts' => 'PDF,JPG,GIF,PNG,ODT,ODS,DOC,DOCX,XLS,XSL,VSD,TXT,CSV,BAK',
+ 'files_allowed_size' => 1024,
+ 'files_enabled' => true,
+ 'globalsearch' => false,
+ 'installed' => 1,
+ 'ldap_base' => '',
+ 'ldap_enabled' => false,
+ 'ldap_group' => '',
+ 'ldap_server' => '',
+ 'ldap_userattr' => '',
+ 'log_enabled' => true,
+ 'mail_enabled' => false,
+ 'mail_from' => '',
+ 'mail_server' => '',
+ 'passwordsalt' => 'b6417b24176faa7d6543dc05874ca6',
+ 'proxy_enabled' => false,
+ 'proxy_pass' => '',
+ 'proxy_port' => '',
+ 'proxy_server' => '',
+ 'proxy_user' => '',
+ 'resultsascards' => false,
+ 'session_timeout' => '300',
+ 'site_lang' => '',
+ 'sitetheme' => 'material-blue',
+ 'version' => '1316011001',
+ 'wiki_enabled' => false,
+ 'wiki_filter' => '',
+ 'wiki_pageurl' => '',
+ 'wiki_searchurl' => '',
+);
diff --git a/app/config/config.php.old b/app/config/config.php.old
new file mode 100644
index 00000000..5c46bb4c
--- /dev/null
+++ b/app/config/config.php.old
@@ -0,0 +1,47 @@
+ 12,
+ 'account_link' => 1,
+ 'account_passtoimage' => false,
+ 'checknotices' => true,
+ 'checkupdates' => true,
+ 'config_hash' => '53489a9c67140c7a72d12b71cb1eefd5',
+ 'dbhost' => 'localhost',
+ 'dbname' => 'syspass',
+ 'dbpass' => 'ff6555bb87aa43d732346d2224736095',
+ 'dbuser' => 'sp_admin',
+ 'debug' => false,
+ 'demo_enabled' => false,
+ 'files_allowed_exts' => 'PDF,JPG,GIF,PNG,ODT,ODS,DOC,DOCX,XLS,XSL,VSD,TXT,CSV,BAK',
+ 'files_allowed_size' => 1024,
+ 'files_enabled' => true,
+ 'globalsearch' => false,
+ 'installed' => 1,
+ 'ldap_base' => '',
+ 'ldap_enabled' => false,
+ 'ldap_group' => '',
+ 'ldap_server' => '',
+ 'ldap_userattr' => '',
+ 'log_enabled' => true,
+ 'mail_enabled' => false,
+ 'mail_from' => '',
+ 'mail_server' => '',
+ 'passwordsalt' => 'b6417b24176faa7d6543dc05874ca6',
+ 'proxy_enabled' => false,
+ 'proxy_pass' => '',
+ 'proxy_port' => '',
+ 'proxy_server' => '',
+ 'proxy_user' => '',
+ 'resultsascards' => false,
+ 'session_timeout' => '300',
+ 'site_lang' => '',
+ 'sitetheme' => 'material-blue',
+ 'version' => '1316011001',
+ 'wiki_enabled' => false,
+ 'wiki_filter' => '',
+ 'wiki_pageurl' => '',
+ 'wiki_searchurl' => '',
+);
diff --git a/app/config/config.xml b/app/config/config.xml
new file mode 100644
index 00000000..3227adc0
--- /dev/null
+++ b/app/config/config.xml
@@ -0,0 +1,103 @@
+
+
+ 12
+ 0
+ 1
+ 0
+ 1
+
+ 1
+ 36294f0e4218f177180b419cf2a853bf765b2f6d
+ 1
+ 0
+ 1505767472
+ c49414b14004c75fcd3b6578814941f9
+
+ 22017050101
+ syspass-db
+ syspass
+ G0fq^NjmQ2lr:e3o
+ 3306
+
+ sp_admin
+ 0
+ 0
+ 0
+
+
+
+
+
+ 0
+ 300049b78c19e759bc589f9a56dbb6473bf7cc9c
+
+ - PDF
+ - JPG
+ - GIF
+ - PNG
+ - ODT
+ - ODS
+ - DOC
+ - DOCX
+ - XLS
+ - XSL
+ - VSD
+ - TXT
+ - CSV
+ - BAK
+ - RDP
+ - KEY
+
+ 1024
+ 1
+ 1
+ 0
+ 1
+ 0
+ dc=demo1,dc=freeipa,dc=org
+ Secret123
+ uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org
+ 1
+ 1
+ 0
+
+
+ ipa.demo1.freeipa.org
+
+ 1
+ 1
+ 1
+ test@syspass.org
+ &J$wkt+1QheO
+ 25
+ 0
+
+ mail.syspass.org
+ test@syspass.org
+ 0
+ fcc85b56f961971ed30b2ca0073e9fde4fd2e7c893106da2963a5a2b5dcb
+ 0
+
+ 8080
+
+
+ 0
+ 0
+ 600
+ 3
+ 0
+ 900
+ en_US
+ material-blue
+ 0
+ 0
+ 0
+ 514
+ 0
+
+
+ 0
+
+
+
+
diff --git a/app/config/config.xml.orig b/app/config/config.xml.orig
new file mode 100644
index 00000000..3227adc0
--- /dev/null
+++ b/app/config/config.xml.orig
@@ -0,0 +1,103 @@
+
+
+ 12
+ 0
+ 1
+ 0
+ 1
+
+ 1
+ 36294f0e4218f177180b419cf2a853bf765b2f6d
+ 1
+ 0
+ 1505767472
+ c49414b14004c75fcd3b6578814941f9
+
+ 22017050101
+ syspass-db
+ syspass
+ G0fq^NjmQ2lr:e3o
+ 3306
+
+ sp_admin
+ 0
+ 0
+ 0
+
+
+
+
+
+ 0
+ 300049b78c19e759bc589f9a56dbb6473bf7cc9c
+
+ - PDF
+ - JPG
+ - GIF
+ - PNG
+ - ODT
+ - ODS
+ - DOC
+ - DOCX
+ - XLS
+ - XSL
+ - VSD
+ - TXT
+ - CSV
+ - BAK
+ - RDP
+ - KEY
+
+ 1024
+ 1
+ 1
+ 0
+ 1
+ 0
+ dc=demo1,dc=freeipa,dc=org
+ Secret123
+ uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org
+ 1
+ 1
+ 0
+
+
+ ipa.demo1.freeipa.org
+
+ 1
+ 1
+ 1
+ test@syspass.org
+ &J$wkt+1QheO
+ 25
+ 0
+
+ mail.syspass.org
+ test@syspass.org
+ 0
+ fcc85b56f961971ed30b2ca0073e9fde4fd2e7c893106da2963a5a2b5dcb
+ 0
+
+ 8080
+
+
+ 0
+ 0
+ 600
+ 3
+ 0
+ 900
+ en_US
+ material-blue
+ 0
+ 0
+ 0
+ 514
+ 0
+
+
+ 0
+
+
+
+
diff --git a/inc/themes/material-blue/views/main/sessionbar.inc b/app/config/key.pem
similarity index 100%
rename from inc/themes/material-blue/views/main/sessionbar.inc
rename to app/config/key.pem
diff --git a/app/config/pubkey.pem b/app/config/pubkey.pem
new file mode 100644
index 00000000..5831de08
--- /dev/null
+++ b/app/config/pubkey.pem
@@ -0,0 +1,6 @@
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCm3GrBV/VrnCzpClpnXKrh2P0J
+AY/DMf4h5bzod0G5UciVQVBZiXyjeIM4mNawkJZ94sl5KjmznmBYy7fXL1Bpvsjz
+hnegpbBo0rgJKrHXhnTzVSyMiCW03BUyBYosjex6ZNZTmyuvyrBiW+nWKEAuDqby
+z6TAMF9Z4TBiZE9mqQIDAQAB
+-----END PUBLIC KEY-----
\ No newline at end of file
diff --git a/inc/locales/ca_ES/LC_MESSAGES/messages.mo b/app/locales/ca_ES/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/ca_ES/LC_MESSAGES/messages.mo
rename to app/locales/ca_ES/LC_MESSAGES/messages.mo
diff --git a/inc/locales/ca_ES/LC_MESSAGES/messages.po b/app/locales/ca_ES/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/ca_ES/LC_MESSAGES/messages.po
rename to app/locales/ca_ES/LC_MESSAGES/messages.po
diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.mo b/app/locales/de_DE/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/de_DE/LC_MESSAGES/messages.mo
rename to app/locales/de_DE/LC_MESSAGES/messages.mo
diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.po b/app/locales/de_DE/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/de_DE/LC_MESSAGES/messages.po
rename to app/locales/de_DE/LC_MESSAGES/messages.po
diff --git a/inc/locales/en_US/LC_MESSAGES/messages.mo b/app/locales/en_US/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/en_US/LC_MESSAGES/messages.mo
rename to app/locales/en_US/LC_MESSAGES/messages.mo
diff --git a/inc/locales/en_US/LC_MESSAGES/messages.po b/app/locales/en_US/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/en_US/LC_MESSAGES/messages.po
rename to app/locales/en_US/LC_MESSAGES/messages.po
diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.mo b/app/locales/fr_FR/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/fr_FR/LC_MESSAGES/messages.mo
rename to app/locales/fr_FR/LC_MESSAGES/messages.mo
diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.po b/app/locales/fr_FR/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/fr_FR/LC_MESSAGES/messages.po
rename to app/locales/fr_FR/LC_MESSAGES/messages.po
diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.mo b/app/locales/hu_HU/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/hu_HU/LC_MESSAGES/messages.mo
rename to app/locales/hu_HU/LC_MESSAGES/messages.mo
diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.po b/app/locales/hu_HU/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/hu_HU/LC_MESSAGES/messages.po
rename to app/locales/hu_HU/LC_MESSAGES/messages.po
diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.mo b/app/locales/it_IT/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/it_IT/LC_MESSAGES/messages.mo
rename to app/locales/it_IT/LC_MESSAGES/messages.mo
diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.po b/app/locales/it_IT/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/it_IT/LC_MESSAGES/messages.po
rename to app/locales/it_IT/LC_MESSAGES/messages.po
diff --git a/inc/locales/nl_NL/LC_MESSAGES/messages.mo b/app/locales/nl_NL/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/nl_NL/LC_MESSAGES/messages.mo
rename to app/locales/nl_NL/LC_MESSAGES/messages.mo
diff --git a/inc/locales/nl_NL/LC_MESSAGES/messages.po b/app/locales/nl_NL/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/nl_NL/LC_MESSAGES/messages.po
rename to app/locales/nl_NL/LC_MESSAGES/messages.po
diff --git a/inc/locales/po_PO/LC_MESSAGES/messages.mo b/app/locales/po_PO/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/po_PO/LC_MESSAGES/messages.mo
rename to app/locales/po_PO/LC_MESSAGES/messages.mo
diff --git a/inc/locales/po_PO/LC_MESSAGES/messages.po b/app/locales/po_PO/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/po_PO/LC_MESSAGES/messages.po
rename to app/locales/po_PO/LC_MESSAGES/messages.po
diff --git a/inc/locales/pt_BR/LC_MESSAGES/messages.mo b/app/locales/pt_BR/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/pt_BR/LC_MESSAGES/messages.mo
rename to app/locales/pt_BR/LC_MESSAGES/messages.mo
diff --git a/inc/locales/pt_BR/LC_MESSAGES/messages.po b/app/locales/pt_BR/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/pt_BR/LC_MESSAGES/messages.po
rename to app/locales/pt_BR/LC_MESSAGES/messages.po
diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.mo b/app/locales/ru_RU/LC_MESSAGES/messages.mo
similarity index 100%
rename from inc/locales/ru_RU/LC_MESSAGES/messages.mo
rename to app/locales/ru_RU/LC_MESSAGES/messages.mo
diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.po b/app/locales/ru_RU/LC_MESSAGES/messages.po
similarity index 100%
rename from inc/locales/ru_RU/LC_MESSAGES/messages.po
rename to app/locales/ru_RU/LC_MESSAGES/messages.po
diff --git a/app/modules/web/Controllers/AccountController.php b/app/modules/web/Controllers/AccountController.php
new file mode 100644
index 00000000..195a6596
--- /dev/null
+++ b/app/modules/web/Controllers/AccountController.php
@@ -0,0 +1,373 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Controller\ControllerBase;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\SessionUtil;
+use SP\Http\Request;
+use SP\Http\Response;
+use SP\Mgmt\Files\FileUtil;
+use SP\Modules\Web\Controllers\Helpers\AccountHelper;
+use SP\Modules\Web\Controllers\Helpers\AccountSearchHelper;
+use SP\Mvc\Controller\CrudControllerInterface;
+
+/**
+ * Class AccountController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class AccountController extends ControllerBase implements CrudControllerInterface
+{
+ /**
+ * Index action
+ */
+ public function indexAction()
+ {
+ try {
+ $AccountSearchHelper = new AccountSearchHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountSearchHelper->getSearchBox();
+ $AccountSearchHelper->getSearch();
+
+ $this->eventDispatcher->notifyEvent('show.account.search', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Search action
+ */
+ public function searchAction()
+ {
+ try {
+ $AccountSearchHelper = new AccountSearchHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountSearchHelper->getSearch();
+
+ $this->eventDispatcher->notifyEvent('show.account.search', $this);
+
+ $data = [
+ 'sk' => SessionUtil::getSessionKey(),
+ 'html' => $this->render()
+ ];
+
+ Response::printJson($data, 0);
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * View action
+ *
+ * @param $id
+ */
+ public function viewAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountData($id, ActionsInterface::ACTION_ACC_VIEW);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleNormal',
+ 'name' => __('Detalles de Cuenta'),
+ 'icon' => $this->icons->getIconView()->getIcon()
+ ]
+ );
+
+ $this->view->assign('isView', true);
+
+ $AccountHelper->getAccount()->incrementViewCounter();
+ $AccountHelper->setCommonData();
+
+ $this->eventDispatcher->notifyEvent('show.account.view', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para la vista de archivos de una cuenta
+ *
+ * @param int $id
+ * @return bool|void
+ */
+ public function listFilesAction($id)
+ {
+ if (!$this->configData->isFilesEnabled()) {
+ die(__('Gestión de archivos deshabilitada'));
+ }
+
+ try {
+ $this->setAction(ActionsInterface::ACTION_ACC_FILES);
+
+ $this->view->addTemplate('files-list', 'account');
+
+ $this->view->assign('accountId', $id);
+ $this->view->assign('deleteEnabled', Request::analyze('del', 0));
+ $this->view->assign('files', FileUtil::getAccountFiles($id));
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+
+ if (!is_array($this->view->files) || count($this->view->files) === 0) {
+ return;
+ }
+
+ $this->eventDispatcher->notifyEvent('show.account.listfiles', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Create action
+ */
+ public function createAction()
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setActionId(ActionsInterface::ACTION_ACC_NEW);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleGreen',
+ 'name' => __('Nueva Cuenta'),
+ 'icon' => $this->icons->getIconAdd()->getIcon()
+ ]
+ );
+
+// SessionFactory::setLastAcountId(0);
+ $AccountHelper->setCommonData();
+
+ $this->eventDispatcher->notifyEvent('show.account.new', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Edit action
+ *
+ * @param $id
+ */
+ public function editAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountData($id, ActionsInterface::ACTION_ACC_EDIT);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleOrange',
+ 'name' => __('Editar Cuenta'),
+ 'icon' => $this->icons->getIconEdit()->getIcon()
+ ]
+ );
+
+ $AccountHelper->getAccount()->incrementViewCounter();
+ $AccountHelper->setCommonData();
+
+ $this->eventDispatcher->notifyEvent('show.account.edit', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Save or modify action
+ *
+ * @param $id
+ */
+ public function saveAction($id)
+ {
+ // TODO: Implement saveAction() method.
+ }
+
+ /**
+ * Delete action
+ *
+ * @param $id
+ */
+ public function deleteAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountData($id, ActionsInterface::ACTION_ACC_DELETE);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleRed',
+ 'name' => __('Eliminar Cuenta'),
+ 'icon' => $this->icons->getIconDelete()->getIcon()
+ ]
+ );
+
+ $AccountHelper->setCommonData();
+
+ $this->eventDispatcher->notifyEvent('show.account.delete', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para modificar la clave de cuenta
+ *
+ * @param $id
+ */
+ public function editPassAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountData($id, ActionsInterface::ACTION_ACC_EDIT_PASS);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account-editpass');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleOrange',
+ 'name' => __('Modificar Clave de Cuenta'),
+ 'icon' => $this->icons->getIconEditPass()->getIcon()
+ ]
+ );
+
+ $this->view->assign('accountPassDateChange', gmdate('Y-m-d', $AccountHelper->getAccount()->getAccountData()->getAccountPassDateChange()));
+
+ $this->eventDispatcher->notifyEvent('show.account.editpass', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para ver cuenta en fecha concreta
+ *
+ * @param $id
+ */
+ public function viewHistoryAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountDataHistory($id, ActionsInterface::ACTION_ACC_VIEW_HISTORY);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$AccountHelper->checkAccess($this)) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleNormal',
+ 'name' => __('Detalles de Cuenta'),
+ 'icon' => 'access_time'
+ ]
+ );
+
+ $this->view->assign('isView', true);
+ $AccountHelper->getAccount()->setAccountIsHistory(1);
+
+ $AccountHelper->setCommonData();
+
+ $this->eventDispatcher->notifyEvent('show.account.viewhistory', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface de solicitud de cambios en una cuenta
+ *
+ * @param $id
+ */
+ public function requestAccessAction($id)
+ {
+ try {
+ $AccountHelper = new AccountHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $AccountHelper->setAccountDataHistory($id, ActionsInterface::ACTION_ACC_REQUEST);
+
+ $this->view->addTemplate('request');
+
+ $this->eventDispatcher->notifyEvent('show.account.request', $this);
+
+ $this->view();
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Initialize class
+ */
+ protected function initialize()
+ {
+ $this->checkLoggedIn();
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/BootstrapController.php b/app/modules/web/Controllers/BootstrapController.php
new file mode 100644
index 00000000..88e7e780
--- /dev/null
+++ b/app/modules/web/Controllers/BootstrapController.php
@@ -0,0 +1,75 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use Exception;
+use SP\Auth\Browser\Browser;
+use SP\Bootstrap;
+use SP\Core\CryptPKI;
+use SP\Core\Plugin\PluginUtil;
+use SP\Core\SessionFactory;
+use SP\Http\Cookies;
+use SP\Http\Response;
+
+/**
+ * Class BootstrapController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class BootstrapController extends SimpleControllerBase
+{
+ /**
+ * Returns environment data
+ */
+ public function getEnvironmentAction()
+ {
+ $configData = $this->config->getConfigData();
+
+ $data = [
+ 'lang' => require PUBLIC_PATH . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'strings.js.php',
+ 'locale' => $configData->getSiteLang(),
+ 'app_root' => Bootstrap::$WEBURI,
+ 'pk' => '',
+ 'max_file_size' => $configData->getFilesAllowedSize(),
+ 'check_updates' => $this->session->getAuthCompleted()
+ && ($configData->isCheckUpdates() || $configData->isChecknotices())
+ && ($this->session->getUserData()->isUserIsAdminApp() || $configData->isDemoEnabled()),
+ 'timezone' => date_default_timezone_get(),
+ 'debug' => DEBUG || $configData->isDebug(),
+ 'cookies_enabled' => Cookies::checkCookies(),
+ 'plugins' => PluginUtil::getEnabledPlugins(),
+ 'loggedin' => $this->session->isLoggedIn(),
+ 'authbasic_autologin' => Browser::getServerAuthUser() && $configData->isAuthBasicAutoLoginEnabled()
+ ];
+
+ try {
+ $CryptPKI = new CryptPKI();
+ $data['pk'] = SessionFactory::getPublicKey() ?: $CryptPKI->getPublicKey();
+ } catch (Exception $e) {
+ }
+
+ Response::printJson($data, 0);
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/Helpers/AccountHelper.php b/app/modules/web/Controllers/Helpers/AccountHelper.php
new file mode 100644
index 00000000..007c9d66
--- /dev/null
+++ b/app/modules/web/Controllers/Helpers/AccountHelper.php
@@ -0,0 +1,288 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers\Helpers;
+
+use SP\Account\Account;
+use SP\Account\AccountAcl;
+use SP\Account\AccountHistory;
+use SP\Account\AccountUtil;
+use SP\Account\UserAccounts;
+use SP\Controller\ControllerBase;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Init;
+use SP\Core\SessionUtil;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CustomFieldData;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Groups\GroupAccountsUtil;
+use SP\Mgmt\PublicLinks\PublicLink;
+use SP\Mgmt\Tags\Tag;
+use SP\Mgmt\Users\UserPass;
+use SP\Mgmt\Users\UserUtil;
+use SP\Util\Json;
+
+/**
+ * Class AccountHelper
+ *
+ * @package SP\Modules\Web\Controllers\Helpers
+ */
+class AccountHelper extends HelperBase
+{
+ /** @var Acl */
+ protected $acl;
+ /**
+ * @var string
+ */
+ private $actionId;
+ /**
+ * @var AccountAcl
+ */
+ private $AccountAcl;
+ /**
+ * @var Account|AccountHistory instancia para el manejo de datos de una cuenta
+ */
+ private $Account;
+ /**
+ * @var int con el id de la cuenta
+ */
+ private $id;
+ /**
+ * @var AccountExtData
+ */
+ private $AccountData;
+
+ /**
+ * @param Acl $acl
+ */
+ public function inject(Acl $acl)
+ {
+ $this->acl = $acl;
+ }
+
+ /**
+ * Establecer las variables que contienen la información de la cuenta.
+ *
+ * @param $accountId
+ * @param $actionId
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function setAccountData($accountId, $actionId)
+ {
+ $this->id = $accountId;
+ $this->actionId = $actionId;
+
+ $Account = new Account(new AccountExtData($accountId));
+ $this->Account = $Account;
+ $this->AccountData = $Account->getData();
+
+ $this->view->assign('accountId', $this->id);
+ $this->view->assign('accountData', $this->AccountData);
+ $this->view->assign('gotData', $this->isGotData());
+ }
+
+ /**
+ * @return boolean
+ */
+ private function isGotData()
+ {
+ return $this->AccountData !== null;
+ }
+
+ /**
+ * Establecer las variables que contienen la información de la cuenta en una fecha concreta.
+ *
+ * @param $accountId
+ * @param $actionId
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function setAccountDataHistory($accountId, $actionId)
+ {
+ $this->id = $accountId;
+ $this->actionId = $actionId;
+
+ $Account = new AccountHistory(new AccountExtData());
+ $Account->setId($accountId);
+ $this->Account = $Account;
+ $this->AccountData = $Account->getData();
+
+ $this->view->assign('accountId', $this->AccountData->getAccountId());
+ $this->view->assign('accountData', $this->AccountData);
+ $this->view->assign('gotData', $this->isGotData());
+ $this->view->assign('accountHistoryId', $accountId);
+ }
+
+ /**
+ * @return AccountAcl
+ */
+ public function getAccountAcl()
+ {
+ return $this->AccountAcl;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Establecer variables comunes del formulario para todos los interfaces
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function setCommonData()
+ {
+ $userProfileData = $this->session->getUserProfile();
+
+ $this->getCustomFieldsForItem();
+
+ if ($this->isGotData()) {
+ $this->view->assign('accountIsHistory', $this->getAccount()->getAccountIsHistory());
+ $this->view->assign('accountOtherUsers', UserAccounts::getUsersInfoForAccount($this->id));
+ $this->view->assign('accountOtherGroups', GroupAccountsUtil::getGroupsInfoForAccount($this->id));
+ $this->view->assign('accountTagsJson', Json::getJson(array_keys($this->getAccount()->getAccountData()->getTags())));
+ $this->view->assign('historyData', AccountHistory::getAccountList($this->AccountData->getAccountId()));
+ $this->view->assign('isModified', strtotime($this->AccountData->getAccountDateEdit()) !== false);
+ $this->view->assign('maxFileSize', round($this->configData->getFilesAllowedSize() / 1024, 1));
+ $this->view->assign('filesAllowedExts', implode(',', $this->configData->getFilesAllowedExts()));
+
+ $PublicLinkData = PublicLink::getItem()->getHashForItem($this->id);
+
+ $publicLinkUrl = ($this->configData->isPublinksEnabled() && $PublicLinkData ? Init::$WEBURI . '/index.php?h=' . $PublicLinkData->getPublicLinkHash() . '&a=link' : null);
+ $this->view->assign('publicLinkUrl', $publicLinkUrl);
+ $this->view->assign('publicLinkId', $PublicLinkData ? $PublicLinkData->getPublicLinkId() : 0);
+
+ $this->view->assign('accountPassDate', date('Y-m-d H:i:s', $this->AccountData->getAccountPassDate()));
+ $this->view->assign('accountPassDateChange', date('Y-m-d', $this->AccountData->getAccountPassDateChange() ?: 0));
+ } else {
+ $this->view->assign('accountPassDateChange', date('Y-m-d', time() + 7776000));
+ }
+
+ $this->view->assign('actionId', Acl::getActionRoute($this->actionId));
+ $this->view->assign('categories', Category::getItem()->getItemsForSelect());
+ $this->view->assign('customers', Customer::getItem()->getItemsForSelectByUser());
+ $this->view->assign('otherUsers', UserUtil::getUsersLogin());
+ $this->view->assign('otherUsersJson', Json::getJson($this->view->otherUsers));
+ $this->view->assign('otherGroups', Group::getItem()->getItemsForSelect());
+ $this->view->assign('otherGroupsJson', Json::getJson($this->view->otherGroups));
+ $this->view->assign('tagsJson', Json::getJson(Tag::getItem()->getItemsForSelect()));
+ $this->view->assign('allowPrivate', $userProfileData->isAccPrivate());
+ $this->view->assign('allowPrivateGroup', $userProfileData->isAccPrivateGroup());
+ $this->view->assign('mailRequestEnabled', $this->configData->isMailRequestsEnabled());
+ $this->view->assign('passToImageEnabled', $this->configData->isAccountPassToImage());
+
+ $this->view->assign('otherAccounts', AccountUtil::getAccountsForUser($this->id, $this->session));
+ $this->view->assign('linkedAccounts', AccountUtil::getLinkedAccounts($this->id, $this->session));
+
+ $this->view->assign('addCustomerEnabled', $this->acl->checkUserAccess(ActionsInterface::ACTION_MGM_CUSTOMERS));
+ $this->view->assign('addCategoryEnabled', $this->acl->checkUserAccess(ActionsInterface::ACTION_MGM_CATEGORIES));
+
+ $this->view->assign('disabled', $this->view->isView ? 'disabled' : '');
+ $this->view->assign('readonly', $this->view->isView ? 'readonly' : '');
+
+ $this->view->assign('showViewCustomPass', $this->AccountAcl->isShowViewPass());
+ $this->view->assign('AccountAcl', $this->AccountAcl);
+ }
+
+ /**
+ * Obtener la lista de campos personalizados y sus valores
+ */
+ private function getCustomFieldsForItem()
+ {
+ $this->view->assign('customFields', CustomField::getItem(new CustomFieldData(ActionsInterface::ACTION_ACC))->getById($this->id));
+ }
+
+ /**
+ * @return \SP\Account\Account|AccountHistory
+ */
+ public function getAccount()
+ {
+ return $this->Account ?: new Account(new AccountExtData());
+ }
+
+ /**
+ * Comprobar si el usuario dispone de acceso al módulo
+ *
+ * @param ControllerBase $controller
+ * @return bool
+ */
+ public function checkAccess(ControllerBase $controller)
+ {
+ $this->view->assign('showLogo', false);
+
+ $Acl = new AccountAcl($this->Account, $this->actionId);
+ $this->AccountAcl = $Acl;
+
+ if (!$this->acl->checkUserAccess($this->actionId)) {
+ $controller->showError(ControllerBase::ERR_PAGE_NO_PERMISSION);
+ return false;
+ }
+
+ if (!UserPass::checkUserUpdateMPass($this->session->getUserData()->getUserId())) {
+ $controller->showError(ControllerBase::ERR_UPDATE_MPASS);
+ return false;
+ }
+
+ if ($this->id > 0) {
+ $this->AccountAcl = $Acl->getAcl();
+
+ if (!$this->AccountAcl->checkAccountAccess()) {
+ $controller->showError(ControllerBase::ERR_ACCOUNT_NO_PERMISSION);
+ return false;
+ }
+
+// SessionFactory::setAccountAcl($this->AccountAcl->save());
+ }
+
+ return true;
+ }
+
+ /**
+ * @param string $actionId
+ */
+ public function setActionId($actionId)
+ {
+ $this->actionId = $actionId;
+ }
+
+ /**
+ * Initialize
+ */
+ protected function initialize()
+ {
+ $this->view->assign('changesHash');
+ $this->view->assign('chkUserEdit');
+ $this->view->assign('chkGroupEdit');
+ $this->view->assign('gotData', $this->isGotData());
+ $this->view->assign('isView', false);
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/Helpers/AccountSearchHelper.php b/app/modules/web/Controllers/Helpers/AccountSearchHelper.php
new file mode 100644
index 00000000..c737e6f9
--- /dev/null
+++ b/app/modules/web/Controllers/Helpers/AccountSearchHelper.php
@@ -0,0 +1,383 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers\Helpers;
+
+use SP\Account\AccountSearch;
+use SP\Account\AccountsSearchItem;
+use SP\Core\ActionsInterface;
+use SP\Core\SessionUtil;
+use SP\Html\DataGrid\DataGrid;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridActionType;
+use SP\Html\DataGrid\DataGridData;
+use SP\Html\DataGrid\DataGridHeaderSort;
+use SP\Html\DataGrid\DataGridPager;
+use SP\Html\DataGrid\DataGridSort;
+use SP\Http\Request;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\Tags\Tag;
+
+/**
+ * Class AccountSearch
+ *
+ * @package SP\Modules\Web\Controllers\Helpers
+ */
+class AccountSearchHelper extends HelperBase
+{
+ /** @var bool Indica si el filtrado de cuentas está activo */
+ private $filterOn = false;
+ /** @var string */
+ private $sk;
+ /** @var int */
+ private $queryTimeStart = 0;
+ /** @var bool */
+ private $isAjax = false;
+ /** @var AccountSearch */
+ private $search;
+
+ /**
+ * @param boolean $isAjax
+ */
+ public function setIsAjax($isAjax)
+ {
+ $this->isAjax = $isAjax;
+ }
+
+ /**
+ * Obtener los datos para la caja de búsqueda
+ */
+ public function getSearchBox()
+ {
+ $this->view->addTemplate('search-searchbox');
+
+ $this->view->assign('customers', Customer::getItem()->getItemsForSelectByUser());
+ $this->view->assign('categories', Category::getItem()->getItemsForSelect());
+ $this->view->assign('tags', Tag::getItem()->getItemsForSelect());
+ }
+
+ /**
+ * Obtener los resultados de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ * @throws \ReflectionException
+ * @throws \Psr\Container\ContainerExceptionInterface
+ */
+ public function getSearch()
+ {
+ $this->view->addTemplate('search-index');
+
+ $this->view->assign('isAjax', $this->isAjax);
+
+ $this->filterOn = ($this->search->getSortKey() > 1
+ || $this->search->getCustomerId()
+ || $this->search->getCategoryId()
+ || $this->search->getTagsId()
+ || $this->search->getTxtSearch()
+ || $this->search->isSearchFavorites()
+ || $this->search->isSortViews());
+
+ $UserPreferences = $this->session->getUserPreferences();
+
+ AccountsSearchItem::$accountLink = $UserPreferences->isAccountLink();
+ AccountsSearchItem::$topNavbar = $UserPreferences->isTopNavbar();
+ AccountsSearchItem::$optionalActions = $UserPreferences->isOptionalActions();
+ AccountsSearchItem::$wikiEnabled = $this->configData->isWikiEnabled();
+ AccountsSearchItem::$dokuWikiEnabled = $this->configData->isDokuwikiEnabled();
+ AccountsSearchItem::$isDemoMode = $this->configData->isDemoEnabled();
+
+ if (AccountsSearchItem::$wikiEnabled) {
+ $wikiFilter = array_map(function ($value) {
+ return preg_quote($value, '/');
+ }, $this->configData->getWikiFilter());
+
+ $this->view->assign('wikiFilter', implode('|', $wikiFilter));
+ $this->view->assign('wikiPageUrl', $this->configData->getWikiPageurl());
+ }
+
+ $Grid = $this->getGrid();
+ $Grid->getData()->setData($this->search->processSearchResults());
+ $Grid->updatePager();
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+
+ // Establecer el filtro de búsqueda en la sesión como un objeto
+ $this->session->setSearchFilters($this->search);
+
+ $this->view->assign('data', $Grid);
+ }
+
+ /**
+ * Devuelve la matriz a utilizar en la vista
+ *
+ * @return DataGrid
+ * @throws \Psr\Container\ContainerExceptionInterface
+ * @throws \ReflectionException
+ */
+ private function getGrid()
+ {
+ $icons = $this->view->getTheme()->getIcons();
+
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(ActionsInterface::ACTION_ACC_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Detalles de Cuenta'));
+ $GridActionView->setTitle(__('Detalles de Cuenta'));
+ $GridActionView->setIcon($icons->getIconView());
+ $GridActionView->setReflectionFilter(AccountsSearchItem::class, 'isShowView');
+ $GridActionView->addData('action-id', 'account/view');
+ $GridActionView->addData('action-sk', $this->sk);
+ $GridActionView->addData('onclick', 'account/view');
+
+ $GridActionViewPass = new DataGridAction();
+ $GridActionViewPass->setId(ActionsInterface::ACTION_ACC_VIEW_PASS);
+ $GridActionViewPass->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionViewPass->setName(__('Ver Clave'));
+ $GridActionViewPass->setTitle(__('Ver Clave'));
+ $GridActionViewPass->setIcon($icons->getIconViewPass());
+ $GridActionViewPass->setReflectionFilter(AccountsSearchItem::class, 'isShowViewPass');
+ $GridActionViewPass->addData('action-id', 'account/showpass');
+ $GridActionViewPass->addData('action-full', 1);
+ $GridActionViewPass->addData('action-sk', $this->sk);
+ $GridActionViewPass->addData('onclick', 'account/showpass');
+
+ // Añadir la clase para usar el portapapeles
+ $ClipboardIcon = $icons->getIconClipboard()->setClass('clip-pass-button');
+
+ $GridActionCopyPass = new DataGridAction();
+ $GridActionCopyPass->setId(ActionsInterface::ACTION_ACC_VIEW_PASS);
+ $GridActionCopyPass->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionCopyPass->setName(__('Copiar Clave en Portapapeles'));
+ $GridActionCopyPass->setTitle(__('Copiar Clave en Portapapeles'));
+ $GridActionCopyPass->setIcon($ClipboardIcon);
+ $GridActionCopyPass->setReflectionFilter(AccountsSearchItem::class, 'isShowCopyPass');
+ $GridActionCopyPass->addData('action-id', 'account/showpass');
+ $GridActionCopyPass->addData('action-full', 0);
+ $GridActionCopyPass->addData('action-sk', $this->sk);
+ $GridActionCopyPass->addData('useclipboard', '1');
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(ActionsInterface::ACTION_ACC_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Cuenta'));
+ $GridActionEdit->setTitle(__('Editar Cuenta'));
+ $GridActionEdit->setIcon($icons->getIconEdit());
+ $GridActionEdit->setReflectionFilter(AccountsSearchItem::class, 'isShowEdit');
+ $GridActionEdit->addData('action-id', ActionsInterface::ACTION_ACC_EDIT);
+ $GridActionEdit->addData('action-sk', $this->sk);
+ $GridActionEdit->addData('onclick', 'account/edit');
+
+ $GridActionCopy = new DataGridAction();
+ $GridActionCopy->setId(ActionsInterface::ACTION_ACC_COPY);
+ $GridActionCopy->setType(DataGridActionType::NEW_ITEM);
+ $GridActionCopy->setName(__('Copiar Cuenta'));
+ $GridActionCopy->setTitle(__('Copiar Cuenta'));
+ $GridActionCopy->setIcon($icons->getIconCopy());
+ $GridActionCopy->setReflectionFilter(AccountsSearchItem::class, 'isShowCopy');
+ $GridActionCopy->addData('action-id', ActionsInterface::ACTION_ACC_COPY);
+ $GridActionCopy->addData('action-sk', $this->sk);
+ $GridActionCopy->addData('onclick', 'account/copy');
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(ActionsInterface::ACTION_ACC_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Cuenta'));
+ $GridActionDel->setTitle(__('Eliminar Cuenta'));
+ $GridActionDel->setIcon($icons->getIconDelete());
+ $GridActionDel->setReflectionFilter(AccountsSearchItem::class, 'isShowDelete');
+ $GridActionDel->addData('action-id', ActionsInterface::ACTION_ACC_DELETE);
+ $GridActionDel->addData('action-sk', $this->sk);
+ $GridActionDel->addData('onclick', 'account/delete');
+
+ $GridActionRequest = new DataGridAction();
+ $GridActionRequest->setId(ActionsInterface::ACTION_ACC_REQUEST);
+ $GridActionRequest->setName(__('Solicitar Modificación'));
+ $GridActionRequest->setTitle(__('Solicitar Modificación'));
+ $GridActionRequest->setIcon($icons->getIconEmail());
+ $GridActionRequest->setReflectionFilter(AccountsSearchItem::class, 'isShowRequest');
+ $GridActionRequest->addData('action-id', ActionsInterface::ACTION_ACC_REQUEST);
+ $GridActionRequest->addData('action-sk', $this->sk);
+ $GridActionRequest->addData('onclick', 'account/show');
+
+ $GridActionOptional = new DataGridAction();
+ $GridActionOptional->setId(0);
+ $GridActionOptional->setName(__('Más Acciones'));
+ $GridActionOptional->setTitle(__('Más Acciones'));
+ $GridActionOptional->setIcon($icons->getIconOptional());
+ $GridActionOptional->setReflectionFilter(AccountsSearchItem::class, 'isShowOptional');
+ $GridActionOptional->addData('onclick', 'account/menu');
+
+ $GridPager = new DataGridPager();
+ $GridPager->setIconPrev($icons->getIconNavPrev());
+ $GridPager->setIconNext($icons->getIconNavNext());
+ $GridPager->setIconFirst($icons->getIconNavFirst());
+ $GridPager->setIconLast($icons->getIconNavLast());
+ $GridPager->setSortKey($this->search->getSortKey());
+ $GridPager->setSortOrder($this->search->getSortOrder());
+ $GridPager->setLimitStart($this->search->getLimitStart());
+ $GridPager->setLimitCount($this->search->getLimitCount());
+ $GridPager->setOnClickFunction('account/sort');
+ $GridPager->setFilterOn($this->filterOn);
+ $GridPager->setSourceAction(new DataGridActionSearch(ActionsInterface::ACTION_ACC_SEARCH));
+
+ $UserPreferences = $this->session->getUserPreferences();
+
+ $showOptionalActions = $UserPreferences->isOptionalActions() || $UserPreferences->isResultsAsCards() || ($UserPreferences->getUserId() === 0 && $this->configData->isResultsAsCards());
+
+ $Grid = new DataGrid();
+ $Grid->setId('gridSearch');
+ $Grid->setDataHeaderTemplate('search-header', $this->view->getBase());
+ $Grid->setDataRowTemplate('search-rows', $this->view->getBase());
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($this->getHeaderSort());
+ $Grid->setDataActions($GridActionView);
+ $Grid->setDataActions($GridActionViewPass);
+ $Grid->setDataActions($GridActionCopyPass);
+ $Grid->setDataActions($GridActionEdit, !$showOptionalActions);
+ $Grid->setDataActions($GridActionCopy, !$showOptionalActions);
+ $Grid->setDataActions($GridActionDel, !$showOptionalActions);
+ $Grid->setDataActions($GridActionRequest);
+ $Grid->setPager($GridPager);
+ $Grid->setData(new DataGridData());
+
+ return $Grid;
+ }
+
+ /**
+ * Devolver la cabecera con los campos de ordenación
+ *
+ * @return DataGridHeaderSort
+ */
+ private function getHeaderSort()
+ {
+ $icons = $this->view->getTheme()->getIcons();
+
+ $GridSortCustomer = new DataGridSort();
+ $GridSortCustomer->setName(__('Cliente'))
+ ->setTitle(__('Ordenar por Cliente'))
+ ->setSortKey(AccountSearch::SORT_CUSTOMER)
+ ->setIconUp($icons->getIconUp())
+ ->setIconDown($icons->getIconDown());
+
+ $GridSortName = new DataGridSort();
+ $GridSortName->setName(__('Nombre'))
+ ->setTitle(__('Ordenar por Nombre'))
+ ->setSortKey(AccountSearch::SORT_NAME)
+ ->setIconUp($icons->getIconUp())
+ ->setIconDown($icons->getIconDown());
+
+ $GridSortCategory = new DataGridSort();
+ $GridSortCategory->setName(__('Categoría'))
+ ->setTitle(__('Ordenar por Categoría'))
+ ->setSortKey(AccountSearch::SORT_CATEGORY)
+ ->setIconUp($icons->getIconUp())
+ ->setIconDown($icons->getIconDown());
+
+ $GridSortLogin = new DataGridSort();
+ $GridSortLogin->setName(__('Usuario'))
+ ->setTitle(__('Ordenar por Usuario'))
+ ->setSortKey(AccountSearch::SORT_LOGIN)
+ ->setIconUp($icons->getIconUp())
+ ->setIconDown($icons->getIconDown());
+
+ $GridSortUrl = new DataGridSort();
+ $GridSortUrl->setName(__('URL / IP'))
+ ->setTitle(__('Ordenar por URL / IP'))
+ ->setSortKey(AccountSearch::SORT_URL)
+ ->setIconUp($icons->getIconUp())
+ ->setIconDown($icons->getIconDown());
+
+ $GridHeaderSort = new DataGridHeaderSort();
+ $GridHeaderSort->addSortField($GridSortCustomer)
+ ->addSortField($GridSortName)
+ ->addSortField($GridSortCategory)
+ ->addSortField($GridSortLogin)
+ ->addSortField($GridSortUrl);
+
+ return $GridHeaderSort;
+ }
+
+ /**
+ * Initialize
+ *
+ * @throws \Psr\Container\ContainerExceptionInterface
+ */
+ protected function initialize()
+ {
+ $this->queryTimeStart = microtime();
+ $this->sk = SessionUtil::getSessionKey(true);
+ $this->view->assign('sk', $this->sk);
+ $this->setVars();
+ }
+
+ /**
+ * Establecer las variables necesarias para las plantillas
+ */
+ private function setVars()
+ {
+ $userData = $this->session->getUserData();
+
+ $this->view->assign('isAdmin', $userData->isUserIsAdminApp() || $userData->isUserIsAdminAcc());
+ $this->view->assign('showGlobalSearch', $this->configData->isGlobalSearch() && $this->session->getUserProfile()->isAccGlobalSearch());
+
+ // Obtener el filtro de búsqueda desde la sesión
+ $this->search = $this->getFilters();
+
+ $this->view->assign('searchCustomer', $this->search->getCustomerId());
+ $this->view->assign('searchCategory', $this->search->getCategoryId());
+ $this->view->assign('searchTags', $this->search->getTagsId());
+ $this->view->assign('searchTxt', $this->search->getTxtSearch());
+ $this->view->assign('searchGlobal', $this->search->getGlobalSearch());
+ $this->view->assign('searchFavorites', $this->search->isSearchFavorites());
+ }
+
+ /**
+ * Set search filters
+ *
+ * @return AccountSearch
+ */
+ private function getFilters()
+ {
+ if (empty(Request::analyze('sk'))) {
+ // Obtener el filtro de búsqueda desde la sesión
+ return $this->session->getSearchFilters();
+ }
+
+ $this->search = new AccountSearch();
+ $this->search->setSortKey(Request::analyze('skey', 0));
+ $this->search->setSortOrder(Request::analyze('sorder', 0));
+ $this->search->setLimitStart(Request::analyze('start', 0));
+ $this->search->setLimitCount(Request::analyze('rpp', 0));
+ $this->search->setGlobalSearch(Request::analyze('gsearch', false));
+ $this->search->setCustomerId(Request::analyze('customer', 0));
+ $this->search->setCategoryId(Request::analyze('category', 0));
+ $this->search->setTagsId(Request::analyze('tags'));
+ $this->search->setSearchFavorites(Request::analyze('searchfav', false));
+ $this->search->setTxtSearch(Request::analyze('search'));
+
+ return $this->search;
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/Helpers/HelperBase.php b/app/modules/web/Controllers/Helpers/HelperBase.php
new file mode 100644
index 00000000..a6f52126
--- /dev/null
+++ b/app/modules/web/Controllers/Helpers/HelperBase.php
@@ -0,0 +1,81 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers\Helpers;
+
+use SP\Config\Config;
+use SP\Config\ConfigData;
+use SP\Core\Events\EventDispatcher;
+use SP\Core\Session\Session;
+use SP\Core\Template;
+use SP\Core\Traits\InjectableTrait;
+
+/**
+ * Class HelperBase
+ *
+ * @package SP\Modules\Web\Controllers\Helpers
+ */
+abstract class HelperBase
+{
+ use InjectableTrait;
+
+ /**
+ * @var Template
+ */
+ protected $view;
+ /**
+ * @var ConfigData
+ */
+ protected $configData;
+ /**
+ * @var Session
+ */
+ protected $session;
+ /**
+ * @var EventDispatcher
+ */
+ protected $eventDispatcher;
+
+ /**
+ * Constructor
+ *
+ * @param Template $template
+ * @param Config $config
+ * @param Session $session
+ * @param EventDispatcher $eventDispatcher
+ */
+ final public function __construct(Template $template, Config $config, Session $session, EventDispatcher $eventDispatcher)
+ {
+ $this->injectDependencies();
+
+ $this->view = $template;
+ $this->configData = $config->getConfigData();
+ $this->session = $session;
+ $this->eventDispatcher = $eventDispatcher;
+
+ if (method_exists($this, 'initialize')) {
+ $this->initialize();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/Helpers/LayoutHelper.php b/app/modules/web/Controllers/Helpers/LayoutHelper.php
new file mode 100644
index 00000000..b85b3481
--- /dev/null
+++ b/app/modules/web/Controllers/Helpers/LayoutHelper.php
@@ -0,0 +1,292 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers\Helpers;
+
+use SP\Bootstrap;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Language;
+use SP\Core\Plugin\PluginUtil;
+use SP\Core\SessionUtil;
+use SP\Core\UI\Theme;
+use SP\Core\UI\ThemeInterface;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Mgmt\Notices\Notice;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+/**
+ * Class LayoutHelper
+ *
+ * @package SP\Modules\Web\Controllers\Helpers
+ */
+class LayoutHelper extends HelperBase
+{
+ /** @var bool */
+ protected $loggedIn;
+ /** @var ThemeInterface */
+ protected $theme;
+
+ /**
+ * @param Theme $theme
+ */
+ public function inject(Theme $theme)
+ {
+ $this->theme = $theme;
+ }
+
+ /**
+ * Inicializar las variables para la vista principal de la aplicación
+ */
+ public function initBody()
+ {
+ $this->view->assign('startTime', microtime());
+
+ $this->view->addPartial('header');
+ $this->view->addPartial('body-start');
+
+ $this->view->assign('useLayout', true);
+ $this->view->assign('isInstalled', $this->configData->isInstalled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('appInfo', Util::getAppInfo());
+ $this->view->assign('appVersion', Util::getVersionString());
+ $this->view->assign('isDemoMode', $this->configData->isDemoEnabled());
+ $this->view->assign('icons', $this->theme->getIcons());
+ $this->view->assign('logoIcon', Bootstrap::$WEBURI . '/public/images/logo_icon.png');
+ $this->view->assign('logoNoText', Bootstrap::$WEBURI . '/public/images/logo_icon.svg');
+ $this->view->assign('logo', Bootstrap::$WEBURI . '/public/images/logo_full_bg.png');
+ $this->view->assign('logonobg', Bootstrap::$WEBURI . '/public/images/logo_full_nobg.png');
+ $this->view->assign('httpsEnabled', Checks::httpsEnabled());
+
+ $this->loggedIn = $this->session->isLoggedIn();
+
+ $this->view->assign('loggedIn', $this->loggedIn);
+ $this->view->assign('lang', $this->loggedIn ? Language::$userLang : Language::$globalLang);
+ $this->view->assign('loadApp', $this->session->getAuthCompleted());
+
+
+ try {
+ // Cargar la clave pública en la sesión
+ SessionUtil::loadPublicKey();
+ } catch (SPException $e) {
+ debugLog($e->getMessage(), true);
+ }
+
+ $this->getResourcesLinks();
+ $this->setResponseHeaders();
+ }
+
+ /**
+ * Obtener los datos para la cabcera de la página
+ */
+ protected function getResourcesLinks()
+ {
+ $version = Util::getVersionStringNormalized();
+
+ $jsVersionHash = md5($version);
+ $this->view->append('jsLinks', Bootstrap::$WEBROOT . '/public/js/js.php?v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Bootstrap::$WEBROOT . '/public/js/js.php?g=1&v=' . $jsVersionHash);
+
+ $themeInfo = $this->theme->getThemeInfo();
+
+ if (isset($themeInfo['js'])) {
+ $themeJsBase = urlencode($this->theme->getThemePath() . DIRECTORY_SEPARATOR . 'js');
+ $themeJsFiles = urlencode(implode(',', $themeInfo['js']));
+
+ $this->view->append('jsLinks', Bootstrap::$WEBROOT . '/public/js/js.php?f=' . $themeJsFiles . '&b=' . $themeJsBase . '&v=' . $jsVersionHash);
+ }
+
+ if ($this->loggedIn && $this->session->getUserPreferences()->getUserId() > 0) {
+ $resultsAsCards = $this->session->getUserPreferences()->isResultsAsCards();
+ } else {
+ $resultsAsCards = $this->configData->isResultsAsCards();
+ }
+
+ $cssVersionHash = md5($version . $resultsAsCards);
+ $this->view->append('cssLinks', Bootstrap::$WEBROOT . '/public/css/css.php?v=' . $cssVersionHash);
+
+ if (isset($themeInfo['css'])) {
+ if ($resultsAsCards) {
+ $themeInfo['css'][] = 'search-card.min.css';
+ } else {
+ $themeInfo['css'][] = 'search-grid.min.css';
+ }
+
+ if ($this->configData->isDokuwikiEnabled()) {
+ $themeInfo['css'][] = 'styles-wiki.min.css';
+ }
+
+ $themeCssBase = urlencode($this->theme->getThemePath() . DIRECTORY_SEPARATOR . 'css');
+ $themeCssFiles = urlencode(implode(',', $themeInfo['css']));
+
+ $this->view->append('cssLinks', Bootstrap::$WEBROOT . '/public/css/css.php?f=' . $themeCssFiles . '&b=' . $themeCssBase . '&v=' . $jsVersionHash);
+ }
+
+ // Cargar los recursos de los plugins
+ foreach (PluginUtil::getLoadedPlugins() as $Plugin) {
+ $base = str_replace(BASE_PATH, '', $Plugin->getBase());
+ $jsResources = $Plugin->getJsResources();
+ $cssResources = $Plugin->getCssResources();
+
+ if (count($jsResources) > 0) {
+ $this->view->append('jsLinks', Bootstrap::$WEBROOT . '/public/js/js.php?f=' . urlencode(implode(',', $jsResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'js') . '&v=' . $jsVersionHash);
+ }
+
+ if (count($cssResources) > 0) {
+ $this->view->append('cssLinks', Bootstrap::$WEBROOT . '/public/css/css.php?f=' . urlencode(implode(',', $cssResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'css') . '&v=' . $jsVersionHash);
+ }
+ }
+ }
+
+ /**
+ * Establecer las cabeceras HTTP
+ */
+ private function setResponseHeaders()
+ {
+ // UTF8 Headers
+ header('Content-Type: text/html; charset=UTF-8');
+
+ // Cache Control
+ header('Cache-Control: public, no-cache, max-age=0, must-revalidate');
+ header('Pragma: public; max-age=0');
+ }
+
+ /**
+ * Establecer la variable de página de la vista
+ *
+ * @param $page
+ */
+ public function setPage($page)
+ {
+ $this->view->assign('page', $page);
+ }
+
+ /**
+ * Obtener los datos para la mostrar la barra de sesión
+ */
+ public function getSessionBar()
+ {
+ $this->view->addPartial('sessionbar');
+
+ $userType = null;
+
+ $userData = $this->session->getUserData();
+ $icons = $this->theme->getIcons();
+
+ if ($userData->isUserIsAdminApp()) {
+ $userType = $icons->getIconAppAdmin();
+ } elseif ($userData->isUserIsAdminAcc()) {
+ $userType = $icons->getIconAccAdmin();
+ }
+
+ $this->view->assign('userType', $userType);
+ $this->view->assign('userId', $userData->getUserId());
+ $this->view->assign('userLogin', mb_strtoupper($userData->getUserLogin()));
+ $this->view->assign('userName', $userData->getUserName() ?: mb_strtoupper($this->view->userLogin));
+ $this->view->assign('userGroup', $userData->getUsergroupName());
+ $this->view->assign('showPassIcon', !($this->configData->isLdapEnabled() && $userData->isUserIsLdap()));
+ $this->view->assign('userNotices', count(Notice::getItem()->getAllActiveForUser()));
+ }
+
+ /**
+ * Obtener los datos para mostrar el menú de acciones
+ *
+ * @param Acl $acl
+ */
+ public function getMenu(Acl $acl)
+ {
+ $this->view->addPartial('body-header-menu');
+
+ $icons = $this->theme->getIcons();
+
+ $ActionSearch = new DataGridAction();
+ $ActionSearch->setId('account');
+ $ActionSearch->setTitle(__('Buscar'));
+ $ActionSearch->setIcon($icons->getIconSearch());
+ $ActionSearch->setData(['historyReset' => 1, 'view' => 'search']);
+
+ $this->view->append('actions', $ActionSearch);
+
+ if ($acl->checkUserAccess(ActionsInterface::ACTION_ACC_NEW)) {
+ $ActionNew = new DataGridAction();
+ $ActionNew->setId('account/create');
+ $ActionNew->setTitle(__('Nueva Cuenta'));
+ $ActionNew->setIcon($icons->getIconAdd());
+ $ActionNew->setData(['historyReset' => 0, 'view' => 'account']);
+
+ $this->view->append('actions', $ActionNew);
+ }
+
+ if ($acl->checkUserAccess(ActionsInterface::ACTION_USR)) {
+ $ActionUsr = new DataGridAction();
+ $ActionUsr->setId('users');
+ $ActionUsr->setTitle(__('Usuarios y Accesos'));
+ $ActionUsr->setIcon($icons->getIconAccount());
+ $ActionUsr->setData(['historyReset' => 0, 'view' => 'datatabs']);
+
+ $this->view->append('actions', $ActionUsr);
+ }
+
+ if ($acl->checkUserAccess(ActionsInterface::ACTION_MGM)) {
+ $ActionMgm = new DataGridAction();
+ $ActionMgm->setId('items');
+ $ActionMgm->setTitle(__('Elementos y Personalización'));
+ $ActionMgm->setIcon($icons->getIconGroup());
+ $ActionMgm->setData(['historyReset' => 0, 'view' => 'datatabs']);
+
+ $this->view->append('actions', $ActionMgm);
+ }
+
+ if ($acl->checkUserAccess(ActionsInterface::ACTION_CFG)) {
+ $ActionConfig = new DataGridAction();
+ $ActionConfig->setId('config');
+ $ActionConfig->setTitle(__('Configuración'));
+ $ActionConfig->setIcon($icons->getIconSettings());
+ $ActionConfig->setData(['historyReset' => 1, 'view' => 'config']);
+
+ $this->view->append('actions', $ActionConfig);
+ }
+
+ if ($acl->checkUserAccess(ActionsInterface::ACTION_EVL) && $this->configData->isLogEnabled()) {
+ $ActionEventlog = new DataGridAction();
+ $ActionEventlog->setId('eventlog');
+ $ActionEventlog->setTitle(__('Registro de Eventos'));
+ $ActionEventlog->setIcon($icons->getIconHeadline());
+ $ActionEventlog->setData(['historyReset' => 1, 'view' => 'eventlog']);
+
+ $this->view->append('actions', $ActionEventlog);
+ }
+ }
+
+ /**
+ * @param bool $loggedIn
+ */
+ protected function setLoggedIn($loggedIn)
+ {
+ $this->loggedIn = (bool)$loggedIn;
+ $this->view->assign('loggedIn', $this->loggedIn);
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/IndexController.php b/app/modules/web/Controllers/IndexController.php
new file mode 100644
index 00000000..9b5fa2ef
--- /dev/null
+++ b/app/modules/web/Controllers/IndexController.php
@@ -0,0 +1,108 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Controller\ControllerBase;
+use SP\Http\Response;
+use SP\Modules\Web\Controllers\Helpers\LayoutHelper;
+use SP\Util\Util;
+
+/**
+ * Class IndexController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class IndexController extends ControllerBase
+{
+ /**
+ * Index action
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function indexAction()
+ {
+ if (!$this->session->isLoggedIn()) {
+ Response::redirect('index.php?r=login');
+ } else {
+ $LayoutHelper = new LayoutHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $LayoutHelper->setPage('main');
+ $LayoutHelper->initBody();
+ $LayoutHelper->getSessionBar();
+ $LayoutHelper->getMenu($this->acl);
+
+ $this->view->addPartial('body-content');
+ $this->view->addPartial('body-footer');
+ $this->view->addPartial('body-end');
+
+ $this->view();
+ }
+ }
+
+ /**
+ * Updates checking action
+ */
+ public function checkUpdatesAction()
+ {
+ $this->checkLoggedIn();
+
+ $this->view->addTemplate('update');
+
+ $this->view->assign('hasUpdates', false);
+ $this->view->assign('updateStatus', null);
+
+ if ($this->configData->isCheckUpdates()) {
+ $updates = Util::checkUpdates();
+
+ if (is_array($updates)) {
+ $description = nl2br($updates['description']);
+ $version = $updates['version'];
+
+ $this->view->assign('hasUpdates', true);
+ $this->view->assign('title', $updates['title']);
+ $this->view->assign('url', $updates['url']);
+ $this->view->assign('description', sprintf('%s - %s %s', __('Descargar nueva versión'), $version, $description));
+ } else {
+ $this->view->assign('updateStatus', $updates);
+ }
+ }
+
+ if ($this->configData->isChecknotices()) {
+ $notices = Util::checkNotices();
+ $numNotices = count($notices);
+ $noticesTitle = '';
+
+ if ($notices !== false && $numNotices > 0) {
+ $noticesTitle = __('Avisos de sysPass') . ' ';
+
+ foreach ($notices as $notice) {
+ $noticesTitle .= ' ' . $notice[0];
+ }
+ }
+
+ $this->view->assign('numNotices', $numNotices);
+ $this->view->assign('noticesTitle', $noticesTitle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/ItemsController.php b/app/modules/web/Controllers/ItemsController.php
new file mode 100644
index 00000000..d5d698eb
--- /dev/null
+++ b/app/modules/web/Controllers/ItemsController.php
@@ -0,0 +1,95 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Account\AccountUtil;
+use SP\Controller\RequestControllerTrait;
+use SP\Core\SessionUtil;
+use SP\DataModel\DataModelInterface;
+use SP\Util\Json;
+
+/**
+ * Class ItemsController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class ItemsController
+{
+ use RequestControllerTrait;
+
+ /**
+ * ItemsController constructor.
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * Devolver las cuentas visubles por el usuario
+ *
+ * @param $accountId
+ */
+ public function accountsUserAction($accountId)
+ {
+ $outItems = [];
+
+ foreach (AccountUtil::getAccountsForUser($accountId, $this->session) as $account) {
+ $obj = new \stdClass();
+ $obj->id = $account->account_id;
+ $obj->name = $account->customer_name . ' - ' . $account->account_name;
+
+ $outItems[] = $obj;
+ }
+
+ $this->JsonResponse->setStatus(0);
+ $this->JsonResponse->setData($outItems);
+ $this->JsonResponse->setCsrf(SessionUtil::getSessionKey());
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Preparar los elementos para devolverlos
+ *
+ * @param array $items
+ * @return array
+ */
+ protected function prepareItems(array $items)
+ {
+ $outItems = [];
+
+ /** @var DataModelInterface $item */
+ foreach ($items as $item) {
+ $obj = new \stdClass();
+ $obj->id = $item->getId();
+ $obj->name = $item->getName();
+
+ $outItems[] = $obj;
+ }
+
+ return $outItems;
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/LoginController.php b/app/modules/web/Controllers/LoginController.php
new file mode 100644
index 00000000..30171cde
--- /dev/null
+++ b/app/modules/web/Controllers/LoginController.php
@@ -0,0 +1,129 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Controller\ControllerBase;
+use SP\Core\SessionFactory;
+use SP\Core\SessionUtil;
+use SP\Html\Html;
+use SP\Http\Response;
+use SP\Log\Log;
+use SP\Modules\Web\Controllers\Helpers\LayoutHelper;
+use SP\Services\LoginService;
+use SP\Util\Json;
+
+/**
+ * Class LoginController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class LoginController extends ControllerBase
+{
+ /**
+ * Login action
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function loginAction()
+ {
+ $LoginService = new LoginService($this->config, $this->session, $this->theme, $this->eventDispatcher);
+ return Json::returnJson($LoginService->doLogin());
+ }
+
+ /**
+ * Logout action
+ */
+ public function logoutAction()
+ {
+ if ($this->session->isLoggedIn()) {
+ $inactiveTime = abs(round((time() - SessionFactory::getLastActivity()) / 60, 2));
+ $totalTime = abs(round((time() - SessionFactory::getStartActivity()) / 60, 2));
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Finalizar sesión', false));
+ $LogMessage->addDetails(__('Usuario', false), SessionFactory::getUserData()->getUserLogin());
+ $LogMessage->addDetails(__('Tiempo inactivo', false), $inactiveTime . ' min.');
+ $LogMessage->addDetails(__('Tiempo total', false), $totalTime . ' min.');
+ $Log->writeLog();
+
+ SessionUtil::cleanSession();
+ SessionFactory::setLoggedOut(true);
+
+ $LayoutHelper = new LayoutHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $LayoutHelper->setPage('logout');
+ $LayoutHelper->initBody();
+
+ $this->view->addTemplate('logout');
+
+ $this->view->addPartial('body-footer');
+ $this->view->addPartial('body-end');
+ $this->view();
+ } else {
+ Response::redirect('index.php?r=login');
+ }
+ }
+
+ /**
+ * Index action
+ */
+ public function indexAction()
+ {
+ $LayoutHelper = new LayoutHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $LayoutHelper->setPage('login');
+ $LayoutHelper->initBody();
+
+ if (SessionFactory::getLoggedOut() === true) {
+ SessionFactory::setLoggedOut();
+
+ $this->view->assign('loggedOut', 1);
+ } else {
+ $this->view->assign('loggedOut', 0);
+ }
+
+ $this->view->addTemplate('login');
+
+ $this->view->addPartial('body-footer');
+ $this->view->addPartial('body-end');
+
+ $this->view->assign('useLayout', false);
+ $this->view->assign('mailEnabled', $this->configData->isMailEnabled());
+ $this->view->assign('updated', SessionFactory::getAppUpdated());
+
+ SessionFactory::setAppUpdated(false);
+
+ $getParams = [];
+
+ // Comprobar y parsear los parámetros GET para pasarlos como POST en los inputs
+ if (count($_GET) > 0) {
+ foreach ($_GET as $param => $value) {
+ $getParams['g_' . Html::sanitizeFull($param)] = Html::sanitizeFull($value);
+ }
+ }
+
+ $this->view->assign('getParams', $getParams);
+ $this->view();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/MainController.php b/app/modules/web/Controllers/MainController.php
similarity index 83%
rename from inc/SP/Controller/MainController.php
rename to app/modules/web/Controllers/MainController.php
index 008d6cc7..d1449489 100644
--- a/inc/SP/Controller/MainController.php
+++ b/app/modules/web/Controllers/MainController.php
@@ -2,8 +2,8 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
* @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
@@ -22,12 +22,13 @@
* along with sysPass. If not, see .
*/
-namespace SP\Controller;
+namespace SP\Modules\Web\Controllers;
defined('APP_ROOT') || die();
use SP\Account\AccountUtil;
-use SP\Config\Config;
+use SP\Controller\AccountController;
+use SP\Controller\ControllerBase;
use SP\Core\Acl;
use SP\Core\ActionsInterface;
use SP\Core\DiFactory;
@@ -36,7 +37,7 @@ use SP\Core\Init;
use SP\Core\Language;
use SP\Core\Messages\NoticeMessage;
use SP\Core\Plugin\PluginUtil;
-use SP\Core\Session;
+use SP\Core\SessionFactory;
use SP\Core\SessionUtil;
use SP\Core\Task;
use SP\Core\Template;
@@ -98,30 +99,29 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->addTemplate('body-start');
$this->view->assign('useLayout', true);
- $this->view->assign('isInstalled', Config::getConfig()->isInstalled());
+ $this->view->assign('isInstalled', $this->configData->isInstalled());
$this->view->assign('sk', SessionUtil::getSessionKey(true));
$this->view->assign('appInfo', Util::getAppInfo());
$this->view->assign('appVersion', Util::getVersionString());
- $this->view->assign('isDemoMode', Checks::demoIsEnabled());
- $this->view->assign('icons', DiFactory::getTheme()->getIcons());
- $this->view->assign('logoIcon', Init::$WEBURI . '/imgs/logo_icon.png');
- $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo_icon.svg');
- $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full_bg.png');
- $this->view->assign('logonobg', Init::$WEBURI . '/imgs/logo_full_nobg.png');
+ $this->view->assign('isDemoMode', $this->configData->isDemoEnabled());
+ $this->view->assign('icons', $this->theme->getIcons());
+ $this->view->assign('logoIcon', Init::$WEBURI . '/public/images/logo_icon.png');
+ $this->view->assign('logoNoText', Init::$WEBURI . '/public/images/logo_icon.svg');
+ $this->view->assign('logo', Init::$WEBURI . '/public/images/logo_full_bg.png');
+ $this->view->assign('logonobg', Init::$WEBURI . '/public/images/logo_full_nobg.png');
$this->view->assign('httpsEnabled', Checks::httpsEnabled());
- $this->view->assign('lang', Init::isLoggedIn() ? Language::$userLang : Language::$globalLang);
- $this->view->assign('loadApp', Session::getAuthCompleted());
+ $this->setLoggedIn(Util::isLoggedIn($this->session));
+
+ $this->view->assign('lang', $this->loggedIn ? Language::$userLang : Language::$globalLang);
+ $this->view->assign('loadApp', SessionFactory::getAuthCompleted());
- $this->setLoggedIn(Init::isLoggedIn());
try {
// Cargar la clave pública en la sesión
SessionUtil::loadPublicKey();
} catch (SPException $e) {
debugLog($e->getMessage(), true);
- } catch (\phpseclib\Exception\FileNotFoundException $e) {
- debugLog($e->getMessage(), true);
}
$this->getResourcesLinks();
@@ -134,29 +134,28 @@ class MainController extends ControllerBase implements ActionsInterface
public function getResourcesLinks()
{
$version = Util::getVersionStringNormalized();
- $theme = DiFactory::getTheme();
$jsVersionHash = md5($version);
- $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?v=' . $jsVersionHash);
- $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?g=1&v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Init::$WEBROOT . '/public/js/js.php?v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Init::$WEBROOT . '/public/js/js.php?g=1&v=' . $jsVersionHash);
- $themeInfo = $theme->getThemeInfo();
+ $themeInfo = $this->theme->getThemeInfo();
if (isset($themeInfo['js'])) {
- $themeJsBase = urlencode($theme->getThemePath() . DIRECTORY_SEPARATOR . 'js');
+ $themeJsBase = urlencode($this->theme->getThemePath() . DIRECTORY_SEPARATOR . 'js');
$themeJsFiles = urlencode(implode(',', $themeInfo['js']));
- $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?f=' . $themeJsFiles . '&b=' . $themeJsBase . '&v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Init::$WEBROOT . '/public/js/js.php?f=' . $themeJsFiles . '&b=' . $themeJsBase . '&v=' . $jsVersionHash);
}
- if (Init::isLoggedIn() && Session::getUserPreferences()->getUserId() > 0) {
- $resultsAsCards = Session::getUserPreferences()->isResultsAsCards();
+ if ($this->loggedIn && SessionFactory::getUserPreferences()->getUserId() > 0) {
+ $resultsAsCards = SessionFactory::getUserPreferences()->isResultsAsCards();
} else {
- $resultsAsCards = Checks::resultsCardsIsEnabled();
+ $resultsAsCards = $this->configData->isResultsAsCards();
}
$cssVersionHash = md5($version . $resultsAsCards);
- $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?v=' . $cssVersionHash);
+ $this->view->append('cssLinks', Init::$WEBROOT . '/public/css/css.php?v=' . $cssVersionHash);
if (isset($themeInfo['css'])) {
if ($resultsAsCards) {
@@ -165,28 +164,28 @@ class MainController extends ControllerBase implements ActionsInterface
$themeInfo['css'][] = 'search-grid.min.css';
}
- if (Checks::dokuWikiIsEnabled()) {
+ if ($this->configData->isDokuwikiEnabled()) {
$themeInfo['css'][] = 'styles-wiki.min.css';
}
- $themeCssBase = urlencode($theme->getThemePath() . DIRECTORY_SEPARATOR . 'css');
+ $themeCssBase = urlencode($this->theme->getThemePath() . DIRECTORY_SEPARATOR . 'css');
$themeCssFiles = urlencode(implode(',', $themeInfo['css']));
- $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?f=' . $themeCssFiles . '&b=' . $themeCssBase . '&v=' . $jsVersionHash);
+ $this->view->append('cssLinks', Init::$WEBROOT . '/public/css/css.php?f=' . $themeCssFiles . '&b=' . $themeCssBase . '&v=' . $jsVersionHash);
}
// Cargar los recursos de los plugins
foreach (PluginUtil::getLoadedPlugins() as $Plugin) {
- $base = str_replace(Init::$SERVERROOT, '', $Plugin->getBase());
+ $base = str_replace(BASE_PATH, '', $Plugin->getBase());
$jsResources = $Plugin->getJsResources();
$cssResources = $Plugin->getCssResources();
if (count($jsResources) > 0) {
- $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?f=' . urlencode(implode(',', $jsResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'js') . '&v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Init::$WEBROOT . '/public/js/js.php?f=' . urlencode(implode(',', $jsResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'js') . '&v=' . $jsVersionHash);
}
if (count($cssResources) > 0) {
- $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?f=' . urlencode(implode(',', $cssResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'css') . '&v=' . $jsVersionHash);
+ $this->view->append('cssLinks', Init::$WEBROOT . '/public/css/css.php?f=' . urlencode(implode(',', $cssResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'css') . '&v=' . $jsVersionHash);
}
}
}
@@ -221,6 +220,12 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->addTemplate('body-end');
}
+ public function indexAction()
+ {
+ $this->initialize();
+ $this->getMain();
+ }
+
/**
* Obtener los datos para la mostrar la barra de sesión
*
@@ -232,18 +237,18 @@ class MainController extends ControllerBase implements ActionsInterface
$userType = null;
- if ($this->UserData->isUserIsAdminApp()) {
+ if ($this->userData->isUserIsAdminApp()) {
$userType = $this->icons->getIconAppAdmin();
- } elseif ($this->UserData->isUserIsAdminAcc()) {
+ } elseif ($this->userData->isUserIsAdminAcc()) {
$userType = $this->icons->getIconAccAdmin();
}
$this->view->assign('userType', $userType);
- $this->view->assign('userId', $this->UserData->getUserId());
- $this->view->assign('userLogin', mb_strtoupper($this->UserData->getUserLogin()));
- $this->view->assign('userName', $this->UserData->getUserName() ?: mb_strtoupper($this->view->userLogin));
- $this->view->assign('userGroup', $this->UserData->getUsergroupName());
- $this->view->assign('showPassIcon', !(Config::getConfig()->isLdapEnabled() && $this->UserData->isUserIsLdap()));
+ $this->view->assign('userId', $this->userData->getUserId());
+ $this->view->assign('userLogin', mb_strtoupper($this->userData->getUserLogin()));
+ $this->view->assign('userName', $this->userData->getUserName() ?: mb_strtoupper($this->view->userLogin));
+ $this->view->assign('userGroup', $this->userData->getUsergroupName());
+ $this->view->assign('showPassIcon', !($this->configData->isLdapEnabled() && $this->userData->isUserIsLdap()));
$this->view->assign('userNotices', count(Notice::getItem()->getAllActiveForUser()));
}
@@ -302,7 +307,7 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->append('actions', $ActionConfig);
}
- if (Acl::checkUserAccess(self::ACTION_EVL) && Checks::logIsEnabled()) {
+ if (Acl::checkUserAccess(self::ACTION_EVL) && $this->configData->isLogEnabled()) {
$ActionEventlog = new DataGridAction();
$ActionEventlog->setId(self::ACTION_EVL);
$ActionEventlog->setTitle(__('Registro de Eventos'));
@@ -320,8 +325,8 @@ class MainController extends ControllerBase implements ActionsInterface
{
$this->setPage('login');
- if (Session::getLoggedOut() === true) {
- Session::setLoggedOut(false);
+ if (SessionFactory::getLoggedOut() === true) {
+ SessionFactory::setLoggedOut(false);
$this->view->assign('loggedOut', 1);
} else {
@@ -333,10 +338,10 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->addTemplate('body-end');
$this->view->assign('useLayout', false);
- $this->view->assign('mailEnabled', Checks::mailIsEnabled());
- $this->view->assign('updated', Session::getAppUpdated());
+ $this->view->assign('mailEnabled', $this->configData->isMailEnabled());
+ $this->view->assign('updated', SessionFactory::getAppUpdated());
- Session::setAppUpdated(false);
+ SessionFactory::setAppUpdated(false);
$getParams = [];
@@ -495,7 +500,7 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->assign('hasUpdates', false);
$this->view->assign('updateStatus', null);
- if (Config::getConfig()->isCheckUpdates()) {
+ if ($this->configData->isCheckUpdates()) {
$updates = Util::checkUpdates();
if (is_array($updates)) {
@@ -511,7 +516,7 @@ class MainController extends ControllerBase implements ActionsInterface
}
}
- if (Config::getConfig()->isChecknotices()) {
+ if ($this->configData->isChecknotices()) {
$notices = Util::checkNotices();
$numNotices = count($notices);
$noticesTitle = '';
@@ -533,7 +538,6 @@ class MainController extends ControllerBase implements ActionsInterface
* Realizar las acciones del controlador
*
* @param mixed $type Tipo de acción
- * @throws \phpmailer\phpmailerException
*/
public function doAction($type = null)
{
@@ -566,7 +570,7 @@ class MainController extends ControllerBase implements ActionsInterface
$this->view->addTemplate('body-header');
- if (Checks::mailIsEnabled() || Request::analyze('f', 0) === 1) {
+ if ($this->configData->isMailEnabled() || Request::analyze('f', 0) === 1) {
$this->view->addTemplate('passreset');
$this->view->assign('login', Request::analyze('login'));
@@ -592,7 +596,6 @@ class MainController extends ControllerBase implements ActionsInterface
* Obtener la vista para mostrar un enlace publicado
*
* @return bool
- * @throws \phpmailer\phpmailerException
* @throws \SP\Core\Exceptions\QueryException
* @throws \SP\Core\Exceptions\ConstraintException
* @throws \SP\Core\Exceptions\FileNotFoundException
@@ -622,7 +625,7 @@ class MainController extends ControllerBase implements ActionsInterface
$Message = new NoticeMessage();
$Message->setTitle(__('Enlace visualizado'));
$Message->addDescription(sprintf('%s : %s', __('Cuenta'), $PublicLink->getItemId()));
- $Message->addDescription(sprintf('%s : %s', __('Origen'), Checks::demoIsEnabled() ? '*.*.*.*' : HttpUtil::getClientAddress(true)));
+ $Message->addDescription(sprintf('%s : %s', __('Origen'), $this->configData->isDemoEnabled() ? '*.*.*.*' : HttpUtil::getClientAddress(true)));
$Message->addDescription(sprintf('%s : %s', __('Agente'), Request::getRequestHeaders('HTTP_USER_AGENT')));
$Message->addDescription(sprintf('HTTPS : %s', Checks::httpsEnabled() ? 'ON' : 'OFF'));
diff --git a/app/modules/web/Controllers/PassresetController.php b/app/modules/web/Controllers/PassresetController.php
new file mode 100644
index 00000000..6bdce0eb
--- /dev/null
+++ b/app/modules/web/Controllers/PassresetController.php
@@ -0,0 +1,69 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Controller\ControllerBase;
+use SP\Http\Request;
+use SP\Modules\Web\Controllers\Helpers\LayoutHelper;
+
+/**
+ * Class PassresetController
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+class PassresetController extends ControllerBase
+{
+ /**
+ * Password reset action
+ */
+ public function indexAction()
+ {
+ $LayoutHelper = new LayoutHelper($this->view, $this->config, $this->session, $this->eventDispatcher);
+ $LayoutHelper->initBody();
+ $LayoutHelper->setPage('passreset');
+
+ $this->view->addPartial('body-header');
+
+ if ($this->configData->isMailEnabled() || Request::analyze('f', 0) === 1) {
+ $this->view->addTemplate('passreset');
+
+ $this->view->assign('login', Request::analyze('login'));
+ $this->view->assign('email', Request::analyze('email'));
+
+ $this->view->assign('action', Request::analyze('a'));
+ $this->view->assign('hash', Request::analyze('h'));
+ $this->view->assign('time', Request::analyze('t'));
+
+ $this->view->assign('passReset', $this->view->action === 'passreset' && !empty($this->view->hash) && !empty($this->view->time));
+ } else {
+ $this->showError(self::ERR_UNAVAILABLE, false);
+ }
+
+ $this->view->addPartial('body-footer');
+ $this->view->addPartial('body-end');
+
+ $this->view();
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/Controllers/SimpleControllerBase.php b/app/modules/web/Controllers/SimpleControllerBase.php
new file mode 100644
index 00000000..ded87f4a
--- /dev/null
+++ b/app/modules/web/Controllers/SimpleControllerBase.php
@@ -0,0 +1,93 @@
+.
+ */
+
+namespace SP\Modules\Web\Controllers;
+
+use SP\Config\Config;
+use SP\Core\Acl;
+use SP\Core\Events\EventDispatcher;
+use SP\Core\Session\Session;
+use SP\Core\Traits\InjectableTrait;
+use SP\Core\UI\Theme;
+use SP\Storage\Database;
+
+/**
+ * Class SimpleControllerBase
+ *
+ * @package SP\Modules\Web\Controllers
+ */
+abstract class SimpleControllerBase
+{
+ use InjectableTrait;
+
+ /** @var int Módulo a usar */
+ protected $action;
+ /** @var string Nombre del controlador */
+ protected $controllerName;
+ /** @var EventDispatcher */
+ protected $eventDispatcher;
+ /** @var Config */
+ protected $config;
+ /** @var Session */
+ protected $session;
+ /** @var Database */
+ protected $db;
+ /** @var Theme */
+ protected $theme;
+ /** @var Acl */
+ protected $acl;
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->injectDependencies();
+
+ $class = static::class;
+ $this->controllerName = substr($class, strrpos($class, '\\') + 1, -strlen('Controller'));
+
+ if (method_exists($this, 'initialize')) {
+ $this->initialize();
+ }
+ }
+
+ /**
+ * @param Config $config
+ * @param Session $session
+ * @param Database $db
+ * @param Theme $theme
+ * @param EventDispatcher $ev
+ * @param Acl $acl
+ */
+ public function inject(Config $config, Session $session, Database $db, Theme $theme, EventDispatcher $ev, Acl $acl)
+ {
+ $this->config = $config;
+ $this->session = $session;
+ $this->db = $db;
+ $this->theme = $theme;
+ $this->eventDispatcher = $ev;
+ $this->acl = $acl;
+ }
+}
\ No newline at end of file
diff --git a/app/modules/web/module.php b/app/modules/web/module.php
new file mode 100644
index 00000000..9977044a
--- /dev/null
+++ b/app/modules/web/module.php
@@ -0,0 +1,27 @@
+.
+ */
+
+define('MODULE_PATH', __DIR__);
+define('VIEW_PATH', MODULE_PATH . DIRECTORY_SEPARATOR . 'themes');
+define('PLUGINS_PATH', MODULE_PATH . DIRECTORY_SEPARATOR . 'plugins');
diff --git a/app/modules/web/plugins/.blank b/app/modules/web/plugins/.blank
new file mode 100644
index 00000000..e69de29b
diff --git a/inc/themes/material-blue/css/LICENSE b/app/modules/web/themes/material-blue/css/LICENSE
similarity index 100%
rename from inc/themes/material-blue/css/LICENSE
rename to app/modules/web/themes/material-blue/css/LICENSE
diff --git a/inc/themes/material-blue/css/Roboto_300.woff2 b/app/modules/web/themes/material-blue/css/Roboto_300.woff2
similarity index 100%
rename from inc/themes/material-blue/css/Roboto_300.woff2
rename to app/modules/web/themes/material-blue/css/Roboto_300.woff2
diff --git a/inc/themes/material-blue/css/Roboto_400.woff2 b/app/modules/web/themes/material-blue/css/Roboto_400.woff2
similarity index 100%
rename from inc/themes/material-blue/css/Roboto_400.woff2
rename to app/modules/web/themes/material-blue/css/Roboto_400.woff2
diff --git a/inc/themes/material-blue/css/Roboto_500.woff2 b/app/modules/web/themes/material-blue/css/Roboto_500.woff2
similarity index 100%
rename from inc/themes/material-blue/css/Roboto_500.woff2
rename to app/modules/web/themes/material-blue/css/Roboto_500.woff2
diff --git a/inc/themes/material-blue/css/Roboto_600.woff2 b/app/modules/web/themes/material-blue/css/Roboto_600.woff2
similarity index 100%
rename from inc/themes/material-blue/css/Roboto_600.woff2
rename to app/modules/web/themes/material-blue/css/Roboto_600.woff2
diff --git a/inc/themes/material-blue/css/_base.scss b/app/modules/web/themes/material-blue/css/_base.scss
similarity index 97%
rename from inc/themes/material-blue/css/_base.scss
rename to app/modules/web/themes/material-blue/css/_base.scss
index aa91fd41..b5fa041c 100644
--- a/inc/themes/material-blue/css/_base.scss
+++ b/app/modules/web/themes/material-blue/css/_base.scss
@@ -14,6 +14,7 @@ $color-bluegrey-fg: #607d8b;
$color-blue-bg: #e3f2fd;
$color-blue-fg: #2196f3;
$color-grey: #555;
+$public-path: '../../../../../../public';
@mixin box-shadow() {
-webkit-box-shadow: 2px 2px 3px -3px rgba(0, 0, 0, 0.14);
diff --git a/inc/themes/material-blue/css/_elements.scss b/app/modules/web/themes/material-blue/css/_elements.scss
similarity index 100%
rename from inc/themes/material-blue/css/_elements.scss
rename to app/modules/web/themes/material-blue/css/_elements.scss
diff --git a/inc/themes/material-blue/css/_login.scss b/app/modules/web/themes/material-blue/css/_login.scss
similarity index 93%
rename from inc/themes/material-blue/css/_login.scss
rename to app/modules/web/themes/material-blue/css/_login.scss
index 03879296..3ef3d97b 100644
--- a/inc/themes/material-blue/css/_login.scss
+++ b/app/modules/web/themes/material-blue/css/_login.scss
@@ -1,7 +1,7 @@
#login-container {
width: 40em;
margin: 0 auto;
- background: transparent url("../imgs/logo_full_bg.png") no-repeat top left;
+ background: transparent url("../../../../public/images/logo_full_bg.png") no-repeat top left;
background-size: auto 10em;
#boxSpacer {
height: 11em;
diff --git a/inc/themes/material-blue/css/fonts.css b/app/modules/web/themes/material-blue/css/fonts.css
similarity index 100%
rename from inc/themes/material-blue/css/fonts.css
rename to app/modules/web/themes/material-blue/css/fonts.css
diff --git a/inc/themes/material-blue/css/fonts.min.css b/app/modules/web/themes/material-blue/css/fonts.min.css
similarity index 100%
rename from inc/themes/material-blue/css/fonts.min.css
rename to app/modules/web/themes/material-blue/css/fonts.min.css
diff --git a/inc/themes/material-blue/css/material-custom.css b/app/modules/web/themes/material-blue/css/material-custom.css
similarity index 100%
rename from inc/themes/material-blue/css/material-custom.css
rename to app/modules/web/themes/material-blue/css/material-custom.css
diff --git a/inc/themes/material-blue/css/material-custom.min.css b/app/modules/web/themes/material-blue/css/material-custom.min.css
similarity index 100%
rename from inc/themes/material-blue/css/material-custom.min.css
rename to app/modules/web/themes/material-blue/css/material-custom.min.css
diff --git a/inc/themes/material-blue/css/material.min.css b/app/modules/web/themes/material-blue/css/material.min.css
similarity index 100%
rename from inc/themes/material-blue/css/material.min.css
rename to app/modules/web/themes/material-blue/css/material.min.css
diff --git a/inc/themes/material-blue/css/mdl-datetimepicker.css b/app/modules/web/themes/material-blue/css/mdl-datetimepicker.css
similarity index 100%
rename from inc/themes/material-blue/css/mdl-datetimepicker.css
rename to app/modules/web/themes/material-blue/css/mdl-datetimepicker.css
diff --git a/inc/themes/material-blue/css/mdl-datetimepicker.css.map b/app/modules/web/themes/material-blue/css/mdl-datetimepicker.css.map
similarity index 100%
rename from inc/themes/material-blue/css/mdl-datetimepicker.css.map
rename to app/modules/web/themes/material-blue/css/mdl-datetimepicker.css.map
diff --git a/inc/themes/material-blue/css/mdl-datetimepicker.min.css b/app/modules/web/themes/material-blue/css/mdl-datetimepicker.min.css
similarity index 100%
rename from inc/themes/material-blue/css/mdl-datetimepicker.min.css
rename to app/modules/web/themes/material-blue/css/mdl-datetimepicker.min.css
diff --git a/inc/themes/material-blue/css/mdl-datetimepicker.scss b/app/modules/web/themes/material-blue/css/mdl-datetimepicker.scss
similarity index 100%
rename from inc/themes/material-blue/css/mdl-datetimepicker.scss
rename to app/modules/web/themes/material-blue/css/mdl-datetimepicker.scss
diff --git a/inc/themes/material-blue/css/mdl-jquery-modal-dialog.css b/app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.css
similarity index 100%
rename from inc/themes/material-blue/css/mdl-jquery-modal-dialog.css
rename to app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.css
diff --git a/inc/themes/material-blue/css/mdl-jquery-modal-dialog.css.map b/app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.css.map
similarity index 100%
rename from inc/themes/material-blue/css/mdl-jquery-modal-dialog.css.map
rename to app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.css.map
diff --git a/inc/themes/material-blue/css/mdl-jquery-modal-dialog.min.css b/app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.min.css
similarity index 100%
rename from inc/themes/material-blue/css/mdl-jquery-modal-dialog.min.css
rename to app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.min.css
diff --git a/inc/themes/material-blue/css/mdl-jquery-modal-dialog.scss b/app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.scss
similarity index 100%
rename from inc/themes/material-blue/css/mdl-jquery-modal-dialog.scss
rename to app/modules/web/themes/material-blue/css/mdl-jquery-modal-dialog.scss
diff --git a/inc/themes/material-blue/css/search-card.css b/app/modules/web/themes/material-blue/css/search-card.css
similarity index 100%
rename from inc/themes/material-blue/css/search-card.css
rename to app/modules/web/themes/material-blue/css/search-card.css
diff --git a/inc/themes/material-blue/css/search-card.css.map b/app/modules/web/themes/material-blue/css/search-card.css.map
similarity index 100%
rename from inc/themes/material-blue/css/search-card.css.map
rename to app/modules/web/themes/material-blue/css/search-card.css.map
diff --git a/inc/themes/material-blue/css/search-card.min.css b/app/modules/web/themes/material-blue/css/search-card.min.css
similarity index 100%
rename from inc/themes/material-blue/css/search-card.min.css
rename to app/modules/web/themes/material-blue/css/search-card.min.css
diff --git a/inc/themes/material-blue/css/search-card.scss b/app/modules/web/themes/material-blue/css/search-card.scss
similarity index 100%
rename from inc/themes/material-blue/css/search-card.scss
rename to app/modules/web/themes/material-blue/css/search-card.scss
diff --git a/inc/themes/material-blue/css/search-grid.css b/app/modules/web/themes/material-blue/css/search-grid.css
similarity index 100%
rename from inc/themes/material-blue/css/search-grid.css
rename to app/modules/web/themes/material-blue/css/search-grid.css
diff --git a/inc/themes/material-blue/css/search-grid.css.map b/app/modules/web/themes/material-blue/css/search-grid.css.map
similarity index 100%
rename from inc/themes/material-blue/css/search-grid.css.map
rename to app/modules/web/themes/material-blue/css/search-grid.css.map
diff --git a/inc/themes/material-blue/css/search-grid.min.css b/app/modules/web/themes/material-blue/css/search-grid.min.css
similarity index 100%
rename from inc/themes/material-blue/css/search-grid.min.css
rename to app/modules/web/themes/material-blue/css/search-grid.min.css
diff --git a/inc/themes/material-blue/css/search-grid.scss b/app/modules/web/themes/material-blue/css/search-grid.scss
similarity index 100%
rename from inc/themes/material-blue/css/search-grid.scss
rename to app/modules/web/themes/material-blue/css/search-grid.scss
diff --git a/inc/themes/material-blue/css/selectize-custom.css b/app/modules/web/themes/material-blue/css/selectize-custom.css
similarity index 100%
rename from inc/themes/material-blue/css/selectize-custom.css
rename to app/modules/web/themes/material-blue/css/selectize-custom.css
diff --git a/inc/themes/material-blue/css/selectize-custom.css.map b/app/modules/web/themes/material-blue/css/selectize-custom.css.map
similarity index 100%
rename from inc/themes/material-blue/css/selectize-custom.css.map
rename to app/modules/web/themes/material-blue/css/selectize-custom.css.map
diff --git a/inc/themes/material-blue/css/selectize-custom.min.css b/app/modules/web/themes/material-blue/css/selectize-custom.min.css
similarity index 100%
rename from inc/themes/material-blue/css/selectize-custom.min.css
rename to app/modules/web/themes/material-blue/css/selectize-custom.min.css
diff --git a/inc/themes/material-blue/css/selectize-custom.scss b/app/modules/web/themes/material-blue/css/selectize-custom.scss
similarity index 100%
rename from inc/themes/material-blue/css/selectize-custom.scss
rename to app/modules/web/themes/material-blue/css/selectize-custom.scss
diff --git a/inc/themes/material-blue/css/selectize.custom.css b/app/modules/web/themes/material-blue/css/selectize.custom.css
similarity index 100%
rename from inc/themes/material-blue/css/selectize.custom.css
rename to app/modules/web/themes/material-blue/css/selectize.custom.css
diff --git a/inc/themes/material-blue/css/selectize.custom.min.css b/app/modules/web/themes/material-blue/css/selectize.custom.min.css
similarity index 100%
rename from inc/themes/material-blue/css/selectize.custom.min.css
rename to app/modules/web/themes/material-blue/css/selectize.custom.min.css
diff --git a/inc/themes/material-blue/css/styles-wiki.css b/app/modules/web/themes/material-blue/css/styles-wiki.css
similarity index 100%
rename from inc/themes/material-blue/css/styles-wiki.css
rename to app/modules/web/themes/material-blue/css/styles-wiki.css
diff --git a/inc/themes/material-blue/css/styles-wiki.css.map b/app/modules/web/themes/material-blue/css/styles-wiki.css.map
similarity index 100%
rename from inc/themes/material-blue/css/styles-wiki.css.map
rename to app/modules/web/themes/material-blue/css/styles-wiki.css.map
diff --git a/inc/themes/material-blue/css/styles-wiki.min.css b/app/modules/web/themes/material-blue/css/styles-wiki.min.css
similarity index 100%
rename from inc/themes/material-blue/css/styles-wiki.min.css
rename to app/modules/web/themes/material-blue/css/styles-wiki.min.css
diff --git a/inc/themes/material-blue/css/styles-wiki.scss b/app/modules/web/themes/material-blue/css/styles-wiki.scss
similarity index 100%
rename from inc/themes/material-blue/css/styles-wiki.scss
rename to app/modules/web/themes/material-blue/css/styles-wiki.scss
diff --git a/inc/themes/material-blue/css/styles.css b/app/modules/web/themes/material-blue/css/styles.css
similarity index 99%
rename from inc/themes/material-blue/css/styles.css
rename to app/modules/web/themes/material-blue/css/styles.css
index b6351968..6d755b90 100644
--- a/inc/themes/material-blue/css/styles.css
+++ b/app/modules/web/themes/material-blue/css/styles.css
@@ -966,7 +966,7 @@ fieldset.warning {
margin-bottom: 30px;
color: #607d8b;
align-items: center;
- background: url("../imgs/logo_full_bg.png") left no-repeat;
+ background: url("../../../../../../public/images/logo_full_bg.png") left no-repeat;
background-size: auto 150px;
height: 150px; }
#actions #page-title {
@@ -1040,7 +1040,7 @@ fieldset.warning {
#login-container {
width: 40em;
margin: 0 auto;
- background: transparent url("../imgs/logo_full_bg.png") no-repeat top left;
+ background: transparent url("../../../../public/images/logo_full_bg.png") no-repeat top left;
background-size: auto 10em; }
#login-container #boxSpacer {
height: 11em;
diff --git a/inc/themes/material-blue/css/styles.css.map b/app/modules/web/themes/material-blue/css/styles.css.map
similarity index 77%
rename from inc/themes/material-blue/css/styles.css.map
rename to app/modules/web/themes/material-blue/css/styles.css.map
index ca95580c..2d2fb8ed 100644
--- a/inc/themes/material-blue/css/styles.css.map
+++ b/app/modules/web/themes/material-blue/css/styles.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
-"mappings": "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",
+"mappings": "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",
"sources": ["_elements.scss","_base.scss","styles.scss","_login.scss"],
"names": [],
"file": "styles.css"
diff --git a/inc/themes/material-blue/css/styles.min.css b/app/modules/web/themes/material-blue/css/styles.min.css
similarity index 80%
rename from inc/themes/material-blue/css/styles.min.css
rename to app/modules/web/themes/material-blue/css/styles.min.css
index 463dc916..cbbb3ced 100644
--- a/inc/themes/material-blue/css/styles.min.css
+++ b/app/modules/web/themes/material-blue/css/styles.min.css
@@ -1 +1 @@
-html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:block}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.login{padding-top:5%}#container.error,#container.install,#container.passreset{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content .pager{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content .pager>div{display:inline-block;width:49%}#content .pager .pager-left{text-align:left}#content .pager .pager-right{text-align:right}#content #title{width:50%;padding:7px;margin:auto;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.3em;text-align:center}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:30em;padding:1em;border:2px dashed #26a69a;text-align:center}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions fieldset{border:1px solid #c9c9c9;padding:1em}#content .data .account-permissions legend{font-weight:bold;color:#999;padding:.2em 0}#content .data .account-permissions fieldset>span{font-weight:bold;color:#999;padding:.2em 0;display:inline-block;width:100px;text-align:right}#content span.tag{margin:0 3px 3px 0;padding:.2em;background:#5c6bc0;color:#fff;border:0 solid transparent;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-wrap:wrap;justify-content:flex-start;margin:0}#content .data-header-minimal li{display:inline-flex;min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#box-popup .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates{min-width:10em;text-align:center;cursor:pointer}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{margin:1em auto}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.passLevel{width:20px;height:20px;display:inline-block;position:relative;top:2px}.passLevel.strongest{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;font-weight:bold}.passLevel.strongest:hover{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;font-weight:bold}.passLevel.strong{color:#2196f3;background-color:#e3f2fd;border:1px solid #2196f3;font-weight:bold}.passLevel.strong:hover{color:#2196f3;background-color:#e3f2fd;border:1px solid #2196f3;font-weight:bold}.passLevel.good{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;font-weight:bold}.passLevel.good:hover{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;font-weight:bold}.passLevel.weak{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350;font-weight:bold}.passLevel.weak:hover{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350;font-weight:bold}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:20em}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("../imgs/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}#login-container{width:40em;margin:0 auto;background:transparent url("../imgs/logo_full_bg.png") no-repeat top left;background-size:auto 10em}#login-container #boxSpacer{height:11em;background-color:transparent}#login-container #boxLogin{position:relative;margin:0 auto;width:100%;min-height:14em;padding:1em;background-color:#fff}#login-container #boxLogin #boxData{height:100%;min-height:14em;text-align:left;background-color:transparent}#login-container #boxLogin #boxData i{margin-right:.5em;opacity:.5}#login-container #boxLogin #boxData .extra-hidden{display:none}#login-container #boxLogin #boxButton{position:absolute;top:2em;right:2em}#login-container #boxLogin #boxActions{width:100%;text-align:right}#login-container #boxLogin #boxActions a{color:#c9c9c9}#login-container #boxLogout{margin-top:4em;width:100%}#login-container #boxLogout>div{margin:0 auto;width:250px;font-size:14px;padding:.5em;text-align:center;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#login-container #boxUpdated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#login-container #demo-info{margin:3em auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;padding:.5em}#login-container #demo-info ul{display:flex;justify-content:space-around;list-style:none}#login-container #demo-info ul li span{margin:0 2em}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}#content .data-container #title,#content .tab-data #title{width:90%}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-container,#content .tab-data{width:100%}#content .data-container #title,#content .tab-data #title{width:90%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#box-popup h2>.btn-popup-close{display:inline-block}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}}
\ No newline at end of file
+html,body{margin:0;padding:0;text-align:left;background-color:#f5f5f5;color:#555;font-size:12px;font-weight:normal;box-sizing:border-box}*{font-family:"Roboto Regular",Verdana,Tahoma,sans-serif;box-sizing:inherit}*:before,*:after{box-sizing:inherit}table{font-size:11px;border-spacing:0}table th{border-bottom:2px solid transparent;vertical-align:middle}table th .icon{width:24px;height:24px}table tr{height:20px}table tr.odd{background-color:#f9f9f9}table tr.even>td,table tr.odd>td{border-bottom:1px solid #d9d9d9 !important}table tr.even:hover,table tr.odd:hover{background-color:#e8ff99}table td{padding:3px}table td.txtCliente{font-weight:bold;text-align:center}form{font-size:11px;margin:0}input.inputImg,img.inputImg{background-color:transparent !important;width:24px !important;height:24px !important;border:0;vertical-align:middle;margin:0 .5em}input.txtFile{width:200px}input.txtLong{width:300px}textarea{width:350px}select.files{width:250px}input.spinner{width:5em}img{margin:0;padding:0;border:0;cursor:pointer}img.inputImgMini{background-color:transparent !important;width:16px !important;height:16px !important;margin:0 5px 0 5px;border:0;vertical-align:middle}i{cursor:pointer}form .form-field{display:flex;justify-content:space-between}form .form-field>label{min-width:12em;padding:.5em 0;font-size:16px;align-self:center}form .form-field>div{width:100%;align-self:center}a{text-decoration:none;color:#536dfe}a:visited{text-decoration:none;color:#536dfe}a:hover,a:active,a:focus{text-decoration:none;cursor:pointer}pre,code,samp,kbd{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;font-size:1em;direction:ltr;text-align:left;background-color:#fbfaf9;color:#333;box-shadow:inset 0 0 .3em #ccc;border-radius:2px}#nojs{width:80%;text-align:center;vertical-align:middle;margin:10px auto;padding:3px;background-color:#ef5350;color:white;font-weight:bold;font-size:14px}#wrap{height:auto !important;min-height:100%;width:100%;background-color:#f5f5f5}#wrap-loading{position:fixed;z-index:9999;top:50%;left:50%;padding:1em;background-color:rgba(255,255,255,0.8);display:none;border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}#wrap-loading.overlay-full{top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.5)}#wrap-loading.overlay-full #loading{position:absolute;top:50%;left:50%}#wrap-loading.overlay-full #taskStatus{display:block}#wrap-loading #taskStatus{display:none;position:absolute;left:0;top:55%;width:100%;text-align:center;color:white;background-color:rgba(0,0,0,0.5);padding:1em 0}#container{margin:auto;width:100%}#container.login{padding-top:5%}#container.error,#container.install,#container.passreset{width:100%}#container .logo{height:64px}#container #actions-bar{z-index:100;display:flex;justify-content:space-between;position:fixed;border:0 none;top:0;left:0;width:100%;padding:1em 0;background-color:transparent}#container #actions-bar-icons{flex-grow:1;text-align:center}#container #actions-bar-logo{display:none;padding:0 .5em}#container #actions-bar-logo img{display:inline-block;width:50px;opacity:.75}#container #content{width:95%;margin:2em auto 8em auto}#container #content.public-link{width:70%;min-height:0;margin:5em auto}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;border-right:1px solid #d9d9d9;color:#999;font-size:12px;font-weight:bold}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:none;width:100%;color:#607d8b;font-size:12px}#content .pager{width:100%;margin-top:15px;padding:.5em;vertical-align:middle;font-size:11px;color:#999;background-color:#fcfcfc}#content .pager img{margin-left:5px;vertical-align:middle}#content .pager a{margin-left:5px;font-size:12px;color:#999}#content .pager>div{display:inline-block;width:49%}#content .pager .pager-left{text-align:left}#content .pager .pager-right{text-align:right}#content #title{width:50%;padding:7px;margin:auto;background-color:#d9d9d9;color:#fff;font-size:17px;letter-spacing:.3em;text-align:center}#content #title.titleNormal{background-color:#607d8b;color:#fff}#content .data-container{width:75%;margin:0 auto}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>div{display:none}#content fieldset.data>div table{width:100%}#content .data{width:100%;padding:10px;margin:0 auto;background-color:#fff;-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .dropzone{width:30em;padding:1em;border:2px dashed #26a69a;text-align:center}#content .data .dropzone img{vertical-align:middle}#content .data .file-upload{display:none}#content .data .account-permissions{width:100%}#content .data .account-permissions fieldset{border:1px solid #c9c9c9;padding:1em}#content .data .account-permissions legend{font-weight:bold;color:#999;padding:.2em 0}#content .data .account-permissions fieldset>span{font-weight:bold;color:#999;padding:.2em 0;display:inline-block;width:100px;text-align:right}#content span.tag{margin:0 3px 3px 0;padding:.2em;background:#5c6bc0;color:#fff;border:0 solid transparent;border-radius:3px !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important}#content .extra-info{margin-top:20px}#content #tabs fieldset{border:1px solid #c9c9c9}#content #tabs #frmConfig label{float:left}#content .tblConfig{margin-bottom:2em}#content .tblConfig td.descField{width:35%;font-size:11px;font-weight:bold}#content .tblConfig td.rowHeader{padding:5px 0 5px 0;background-color:#f5f5f5;text-align:center;font-weight:bold;border-top:15px solid #f9f9f9;border-bottom:3px solid #a9c1d7;letter-spacing:.5em;color:#696969}#content .tblConfig input.checkbox{width:15px;text-align:left;padding:0}#content .tblConfig .option-disabled{text-align:center;background-color:#fff8e1;color:#ffca28;font-weight:bold}#content h2{width:100%;height:1.5em;font-size:18px;color:white;background-color:#a9c1d7;margin:0;padding-top:.1em}#content .section{margin-top:2.5em;border-bottom:1px solid #d9d9d9;text-align:left;font-size:14px;font-weight:bold;color:#5c6bc0}#content .row_even>td{background-color:#f5f5f5}#content .row_odd>td{background-color:white}#content .data-header ul{list-style:none;width:100%;margin:0 0 10px 0;padding:0}#content .data-header li{display:inline-block;padding:.2em .5em;font-weight:bold;letter-spacing:.2em;color:#fff;text-align:center}#content .data-header li a{color:#777}#content .data-header li img{float:right;width:24px;height:24px;vertical-align:middle}#content .data-header-minimal{border-bottom:1px solid #dfdfdf}#content .data-header-minimal ul{display:flex;flex-wrap:wrap;justify-content:flex-start;margin:0}#content .data-header-minimal li{display:inline-flex;min-width:10em;font-weight:normal;letter-spacing:normal}#content .data-header-minimal li a{color:#b9b9b9;padding:.3em .8em}#content .data-table{width:100%}#content .data-table td:first-of-type,#content .data-table th:first-of-type{width:5em}#content .data-table thead th{background-color:#607d8b;color:#fff}#content .data-table tbody td.cell-data{text-align:left}#content .data-table tbody td.cell-nodata{padding:0 .5em;text-align:left}#content .data-table tbody td.cell-actions{text-align:right}#content .data-table tbody td.cell-actions i{opacity:.5}#content .data-table tbody td.cell-actions i:hover{opacity:1}#content .data-rows ul{display:table;list-style:none;width:100%;margin:0 0 10px 0;padding:0;background-color:#fcfcfc}#content .data-rows li{float:left;display:block;padding:1em;color:#696969;text-align:center;min-height:2em}#content .data-rows li.cell-nodata{padding:1em 0;min-height:2em;text-align:left}#content .data-rows li.cell-actions{float:right;min-height:2em;padding:1em 0;text-align:left;background-color:#fcfcfc;width:15em}#content .data-rows li.cell-nodata img,#content .data-rows li.cell-actions img{width:24px;height:24px;margin:0 .5em}#content #resEventLog .data{width:100%}#content #resEventLog thead{text-align:center}#content #resEventLog tbody{width:100%;height:500px;overflow:auto}#content #resEventLog td{border-bottom:1px solid #d9d9d9}#content #resEventLog .cell{text-align:center}#content #resEventLog .cell-description{width:60%}#content #searchbox{background-color:#fcfcfc;vertical-align:middle;position:relative;height:auto;padding:.5em 1em;margin-bottom:2em}#content #searchbox form{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;text-align:left}#content #searchbox .search-filters>*{margin:0 .5em}#content #searchbox .search-filters .filter-buttons{display:inline-block}#content #searchbox .search-filters .filter-slider{width:10em}#content #searchbox .search-filters-tags{display:none;flex-grow:2}#content .btn-clear{opacity:.35;filter:alpha(opacity=35)}#content .btn-clear:hover{opacity:1;filter:alpha(opacity=100)}#content .actions-optional{display:none}#content .error{width:350px;padding:15px;margin:0 auto;text-align:center;font-size:16px;line-height:1.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#box-popup .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#content .data .list-wrap ul,#box-popup .list-wrap ul{list-style-type:none;margin:0;padding:0}#content .data .list-wrap li,#box-popup .list-wrap li{display:flex;background:#f2f2f2;padding:.5em;font-size:1em;margin-bottom:.5em}#content .data .list-wrap li:hover,#box-popup .list-wrap li:hover{background:#e8eaf6;color:#000}#content .data .list-wrap div.files-item-info,#box-popup .list-wrap div.files-item-info{flex-grow:2}#content .data .list-wrap div.files-item-info img,#box-popup .list-wrap div.files-item-info img{margin:0 .5em}#content .data .list-wrap div.files-item-actions,#box-popup .list-wrap div.files-item-actions{padding:.3em 0}#box-popup{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:30em}#box-popup>h2{position:relative;width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0;padding:.5em 0;line-height:1em}#box-popup>h2 .btn-popup-close{display:none;position:absolute;right:.5em;top:.2em}#box-popup>table{width:100%;padding-bottom:1em}#box-popup select{width:220px}#box-popup #resFancyAccion{display:none}#box-popup #resCheck{display:inline-block;width:80%;height:4em;padding:1em 0}#box-popup.image{background-color:transparent;max-width:100%;margin:0 auto;border-radius:0 !important;-moz-border-radius:0 !important;-webkit-border-radius:0 !important}#box-popup.image img{width:auto;margin:0 auto}#box-popup.image>div.title{background-color:#607d8b;color:#fff;padding:.5em}#box-popup.help{min-height:100px;background-color:#f5f5f5}#box-popup.help p{font-size:14px;text-align:justify;line-height:2em}#box-complexity>div{text-align:justify;line-height:1.5em;margin-top:1em}#debug{float:left;text-align:left}#debuginfo{width:100%;min-height:10em;padding:1em;background-color:#fff8e1;text-align:left;line-height:1.5em}#debuginfo H3{text-align:center}.popup-data{width:100%;min-width:400px;border:0;text-align:left;margin:0;padding:1em .5em}.popup-data .descField{min-width:100px}footer{display:flex;justify-content:space-between;position:fixed;bottom:0;z-index:100;width:100%;padding:.5em 0;background-color:#f5f5f5;color:#b9b9b9;font-size:1em;-webkit-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);-moz-box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14);box-shadow:0 -3px 2px -2px rgba(0,0,0,0.14)}footer .footer-parts{display:flex;justify-content:space-between}footer #footer-left{width:50%;margin:0 1em}footer #footer-right{width:50%;margin:0 1em;justify-content:flex-end;text-align:right}footer #updates{min-width:10em;text-align:center;cursor:pointer}footer #status{margin:0 1em}footer #status>div{display:inline-block}footer #status .status-info{padding:.5em}footer #session{text-align:left;color:#999;font-size:.8em}footer a{color:#b9b9b9}footer a:visited{color:#b9b9b9}footer #project a:hover{color:#a9c1d7;border-bottom:1px solid #a9c1d7}footer #updates a:hover{color:#a9c1d7}footer img{border:0;width:16px;height:16px;vertical-align:middle}.round,.round5{border-radius:5px !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important}.midround{border-radius:0 0 10px 10px !important;-moz-border-radius:0 0 10px 10px !important;-webkit-border-radius:0 0 10px 10px !important}.midroundup{border-radius:10px 10px 0 0 !important;-moz-border-radius:10px 10px 0 0 !important;-webkit-border-radius:10px 10px 0 0 !important}.fullround{border-radius:50% !important;-moz-border-radius:50% !important;-webkit-border-radius:50% !important}.iconMini{width:16px !important;height:16px !important;vertical-align:middle}.hide{display:none !important}.btn-checks{padding:5px;margin:.2em 0;width:30em;border-bottom:1px solid #c9c9c9}.shadow{-webkit-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);-moz-box-shadow:2px 2px 3px -3px rgba(0,0,0,0.14);box-shadow:1px 1px 2px rgba(0,0,0,0.14)}.noRes{width:60%;padding:15px;background-color:#f9f9f9;color:#a9a9a9;border:#c9c9c9 1px solid;margin:20px auto;text-align:center;font-size:16px}.header-grey{background-color:#607d8b;color:#fff;min-height:2em}.no-background{background:none !important}.action-in-box{padding:1em;text-align:right}.action-in-box ul{list-style:none;margin:0;padding:0}.tab-data{margin:2em auto 0;width:75%}.item-actions{margin:1em auto}.tab-actions{margin:2em 0}.item-actions>ul,.tab-actions>ul{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;list-style:none;margin:0;padding:0}.item-actions>ul>li,.tab-actions>ul>li{width:auto;min-width:2em;margin-left:.5em}.item-actions>ul>li.datagrid-action-search,.tab-actions>ul>li.datagrid-action-search{min-width:5em}.item-actions>ul>li.datagrid-action-search form,.tab-actions>ul>li.datagrid-action-search form{width:100%}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;padding:.3em 1em}.global-on{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;padding:.3em 1em}.opacity50{filter:alpha(opacity=50);opacity:.5}.custom-combobox{position:relative;display:inline-block}.custom-combobox input{width:80%}.custom-combobox-toggle{position:absolute;top:0;bottom:0;margin-left:-1px;padding:0;*height:1.7em;*top:.1em}.custom-combobox-input{margin:0;padding:.3em}.passLevel{width:20px;height:20px;display:inline-block;position:relative;top:2px}.passLevel.strongest{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;font-weight:bold}.passLevel.strongest:hover{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a;font-weight:bold}.passLevel.strong{color:#2196f3;background-color:#e3f2fd;border:1px solid #2196f3;font-weight:bold}.passLevel.strong:hover{color:#2196f3;background-color:#e3f2fd;border:1px solid #2196f3;font-weight:bold}.passLevel.good{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;font-weight:bold}.passLevel.good:hover{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;font-weight:bold}.passLevel.weak{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350;font-weight:bold}.passLevel.weak:hover{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350;font-weight:bold}#alert #alert-text{margin:15px auto;font-size:14px;font-weight:bold}#alert #alert-pass{width:50%;padding:10px;margin:15px auto;border:1px solid #c9c9c9;color:#555;font-weight:bold}.dialog-text,.dialog-user-text,.dialog-pass-text{font-family:Consolas,"Andale Mono WT","Andale Mono","Bitstream Vera Sans Mono","Nimbus Mono L",Monaco,"Courier New",monospace;padding:.5em;text-align:center;min-width:200px}.dialog-user-text{border-bottom:#d9d9d9 1px solid;color:#a9a9a9}.dialog-pass-text{border:transparent 1px solid;letter-spacing:.2em}.dialog-buttons{text-align:center;padding:.5em;border-top:1px solid #c9c9c9;line-height:2.5em}.dialog-clip-copy{color:#26a69a;background-color:#e0f2f1}.help-box{display:none;background-color:#fff !important;color:#607d8b}.help-box>*{font-weight:bold}.help-text{text-align:justify;line-height:1.5em;margin-top:1em}.tooltip{width:300px;max-width:300px;background-color:#777;color:#fff;z-index:101}.cursor-pointer{cursor:pointer}.password-actions{display:inline-block;width:12em}.password-actions>span,.password-actions i{margin-right:.6em}.custom-input-color{width:3em;height:1em;display:inline-block}.account-pass-image{height:32px;width:auto}.select-box{min-width:20em}fieldset.warning{padding:8px;border-radius:5px;color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}fieldset.warning legend{color:#ef5350 !important}fieldset.warning a{color:#ef5350 !important;font-weight:bold}#actions{width:100%;line-height:2em;margin-bottom:5em}#actions #logo{display:flex;width:100%;margin-bottom:30px;color:#607d8b;align-items:center;background:url("../../../../../../public/images/logo_full_bg.png") left no-repeat;background-size:auto 150px;height:150px}#actions #page-title{width:100%;color:#607d8b;text-align:center}#actions #page-title h1{font-weight:bold;font-size:24px;letter-spacing:3px}#actions ul.errors{max-width:40vw;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:3px;padding:1em .5em}#actions ul.errors>li.msg-critical{color:#ef5350;background-color:#ffebee;border:1px solid #ef5350}#actions ul.errors>li.msg-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28;color:#555}#actions ul.errors>li.msg-ok{color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#actions ul.errors>li>p.hint{color:#555;font-size:12px}#actions ul.errors>li>p.hint i{margin-right:.5em}#actions form{width:450px;margin:0 auto;text-align:left}#actions form fieldset{margin-bottom:2em}#actions form fieldset legend{width:100%;color:#fff;font-size:14px;font-weight:bold;text-align:center;background-color:#607d8b;margin:1em 0;letter-spacing:.2em;padding:.2em 0}#actions div.buttons{margin-top:2em;text-align:center}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !important}.opacity50{opacity:.5 !important}#login-container{width:40em;margin:0 auto;background:transparent url("../../../../public/images/logo_full_bg.png") no-repeat top left;background-size:auto 10em}#login-container #boxSpacer{height:11em;background-color:transparent}#login-container #boxLogin{position:relative;margin:0 auto;width:100%;min-height:14em;padding:1em;background-color:#fff}#login-container #boxLogin #boxData{height:100%;min-height:14em;text-align:left;background-color:transparent}#login-container #boxLogin #boxData i{margin-right:.5em;opacity:.5}#login-container #boxLogin #boxData .extra-hidden{display:none}#login-container #boxLogin #boxButton{position:absolute;top:2em;right:2em}#login-container #boxLogin #boxActions{width:100%;text-align:right}#login-container #boxLogin #boxActions a{color:#c9c9c9}#login-container #boxLogout{margin-top:4em;width:100%}#login-container #boxLogout>div{margin:0 auto;width:250px;font-size:14px;padding:.5em;text-align:center;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#login-container #boxUpdated{width:350px;margin:3em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#e0f2f1;border:1px solid #26a69a}#login-container #demo-info{margin:3em auto;color:#c9c9c9;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;padding:.5em}#login-container #demo-info ul{display:flex;justify-content:space-around;list-style:none}#login-container #demo-info ul li span{margin:0 2em}@media screen and (max-width:1000px){#content #searchbox .search-filters>*{margin:.5em 1em .5em 0}#content .data-container #title,#content .tab-data #title{width:90%}footer{display:none;justify-content:space-between;flex-wrap:wrap}footer .footer-parts{justify-content:space-between;flex-wrap:wrap}footer #footer-left,footer #footer-right{width:100%}footer .footer-parts>div{width:100%;padding:.5em 0}}@media screen and (max-width:600px){#content input,#box-popup input{width:100%}#content .mdl-textfield,#box-popup .mdl-textfield{width:100%}#content td.descField,#box-popup td.descField{display:none}#content td.valField .lowres-title,#box-popup td.valField .lowres-title{display:block}#content #searchbox .mdl-textfield{width:90%}#content #searchbox .search-text{width:90%}#content #searchbox .search-filters .selectize-control{width:100%}#content .data-container,#content .tab-data{width:100%}#content .data-container #title,#content .tab-data #title{width:90%}#content .data-container .selectize-control,#content .tab-data .selectize-control{width:100%}#box-popup h2>.btn-popup-close{display:inline-block}.mdl-data-table{table-layout:fixed;width:100%}.table-responsive td,.table-responsive th{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.table-responsive .cell-actions i{display:block !important}}
\ No newline at end of file
diff --git a/inc/themes/material-blue/css/styles.scss b/app/modules/web/themes/material-blue/css/styles.scss
similarity index 99%
rename from inc/themes/material-blue/css/styles.scss
rename to app/modules/web/themes/material-blue/css/styles.scss
index 6dc3d992..24ac66eb 100644
--- a/inc/themes/material-blue/css/styles.scss
+++ b/app/modules/web/themes/material-blue/css/styles.scss
@@ -1030,7 +1030,7 @@ fieldset.warning {
margin-bottom: 30px;
color: $color-bluegrey-fg;
align-items: center;
- background: url("../imgs/logo_full_bg.png") left no-repeat;
+ background: url($public-path + "/images/logo_full_bg.png") left no-repeat;
background-size: auto 150px;
height: 150px;
}
diff --git a/inc/themes/material-blue/css/toastr.css b/app/modules/web/themes/material-blue/css/toastr.css
similarity index 100%
rename from inc/themes/material-blue/css/toastr.css
rename to app/modules/web/themes/material-blue/css/toastr.css
diff --git a/inc/themes/material-blue/css/toastr.css.map b/app/modules/web/themes/material-blue/css/toastr.css.map
similarity index 100%
rename from inc/themes/material-blue/css/toastr.css.map
rename to app/modules/web/themes/material-blue/css/toastr.css.map
diff --git a/inc/themes/material-blue/css/toastr.min.css b/app/modules/web/themes/material-blue/css/toastr.min.css
similarity index 100%
rename from inc/themes/material-blue/css/toastr.min.css
rename to app/modules/web/themes/material-blue/css/toastr.min.css
diff --git a/inc/themes/material-blue/css/toastr.scss b/app/modules/web/themes/material-blue/css/toastr.scss
similarity index 100%
rename from inc/themes/material-blue/css/toastr.scss
rename to app/modules/web/themes/material-blue/css/toastr.scss
diff --git a/inc/themes/material-blue/inc/Icons.php b/app/modules/web/themes/material-blue/inc/Icons.php
similarity index 100%
rename from inc/themes/material-blue/inc/Icons.php
rename to app/modules/web/themes/material-blue/inc/Icons.php
diff --git a/inc/themes/material-blue/index.php b/app/modules/web/themes/material-blue/index.php
similarity index 98%
rename from inc/themes/material-blue/index.php
rename to app/modules/web/themes/material-blue/index.php
index 2e0a8981..df2eed2f 100644
--- a/inc/themes/material-blue/index.php
+++ b/app/modules/web/themes/material-blue/index.php
@@ -23,7 +23,7 @@
*
*/
-$themeInfo = [
+return [
'name' => 'Material Blue',
'creator' => 'nuxsmin',
'version' => '2.0',
diff --git a/inc/themes/material-blue/js/LICENSE b/app/modules/web/themes/material-blue/js/LICENSE
similarity index 100%
rename from inc/themes/material-blue/js/LICENSE
rename to app/modules/web/themes/material-blue/js/LICENSE
diff --git a/inc/themes/material-blue/js/app-theme.js b/app/modules/web/themes/material-blue/js/app-theme.js
similarity index 100%
rename from inc/themes/material-blue/js/app-theme.js
rename to app/modules/web/themes/material-blue/js/app-theme.js
diff --git a/inc/themes/material-blue/js/app-theme.min.js b/app/modules/web/themes/material-blue/js/app-theme.min.js
similarity index 100%
rename from inc/themes/material-blue/js/app-theme.min.js
rename to app/modules/web/themes/material-blue/js/app-theme.min.js
diff --git a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.js b/app/modules/web/themes/material-blue/js/bootstrap-material-datetimepicker.js
similarity index 100%
rename from inc/themes/material-blue/js/bootstrap-material-datetimepicker.js
rename to app/modules/web/themes/material-blue/js/bootstrap-material-datetimepicker.js
diff --git a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js b/app/modules/web/themes/material-blue/js/bootstrap-material-datetimepicker.min.js
similarity index 100%
rename from inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js
rename to app/modules/web/themes/material-blue/js/bootstrap-material-datetimepicker.min.js
diff --git a/inc/themes/material-blue/js/material.js b/app/modules/web/themes/material-blue/js/material.js
similarity index 100%
rename from inc/themes/material-blue/js/material.js
rename to app/modules/web/themes/material-blue/js/material.js
diff --git a/inc/themes/material-blue/js/material.min.js b/app/modules/web/themes/material-blue/js/material.min.js
similarity index 100%
rename from inc/themes/material-blue/js/material.min.js
rename to app/modules/web/themes/material-blue/js/material.min.js
diff --git a/inc/themes/material-blue/js/mdl-jquery-modal-dialog.js b/app/modules/web/themes/material-blue/js/mdl-jquery-modal-dialog.js
similarity index 100%
rename from inc/themes/material-blue/js/mdl-jquery-modal-dialog.js
rename to app/modules/web/themes/material-blue/js/mdl-jquery-modal-dialog.js
diff --git a/inc/themes/material-blue/js/mdl-jquery-modal-dialog.min.js b/app/modules/web/themes/material-blue/js/mdl-jquery-modal-dialog.min.js
similarity index 100%
rename from inc/themes/material-blue/js/mdl-jquery-modal-dialog.min.js
rename to app/modules/web/themes/material-blue/js/mdl-jquery-modal-dialog.min.js
diff --git a/inc/themes/material-blue/views/main/body-content.inc b/app/modules/web/themes/material-blue/views/_partials/body-content.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-content.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-content.inc
diff --git a/inc/themes/material-blue/views/main/body-end.inc b/app/modules/web/themes/material-blue/views/_partials/body-end.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-end.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-end.inc
diff --git a/inc/themes/material-blue/views/main/body-footer.inc b/app/modules/web/themes/material-blue/views/_partials/body-footer.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-footer.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-footer.inc
diff --git a/inc/themes/material-blue/views/main/body-header-menu.inc b/app/modules/web/themes/material-blue/views/_partials/body-header-menu.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-header-menu.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-header-menu.inc
diff --git a/inc/themes/material-blue/views/main/body-header.inc b/app/modules/web/themes/material-blue/views/_partials/body-header.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-header.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-header.inc
diff --git a/inc/themes/material-blue/views/main/body-start.inc b/app/modules/web/themes/material-blue/views/_partials/body-start.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/body-start.inc
rename to app/modules/web/themes/material-blue/views/_partials/body-start.inc
diff --git a/inc/themes/material-blue/views/main/error-list.inc b/app/modules/web/themes/material-blue/views/_partials/error-list.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/error-list.inc
rename to app/modules/web/themes/material-blue/views/_partials/error-list.inc
diff --git a/inc/SP/Config/ConfigUtil.php b/app/modules/web/themes/material-blue/views/_partials/error.inc
similarity index 60%
rename from inc/SP/Config/ConfigUtil.php
rename to app/modules/web/themes/material-blue/views/_partials/error.inc
index 19402672..62a56e1c 100644
--- a/inc/SP/Config/ConfigUtil.php
+++ b/app/modules/web/themes/material-blue/views/_partials/error.inc
@@ -22,30 +22,19 @@
* along with sysPass. If not, see .
*/
-namespace SP\Config;
-
/**
- * Class ConfigUtil
- * @package Config
+ * @var $icons \SP\Core\UI\ThemeIconsBase
+ * @var \SP\Core\Template $this
*/
-class ConfigUtil
-{
- /**
- * Adaptador para convertir una cadena de extensiones a un array
- *
- * @param $filesAllowedExts
- * @return array
- */
- public static function filesExtsAdapter(&$filesAllowedExts)
- {
- $exts = explode(',', $filesAllowedExts);
+?>
+
+ includePartial('error-list'); ?>
- array_walk($exts, function (&$value) {
- if (preg_match('/[^a-z0-9_-]+/i', $value)) {
- $value = null;
- }
- });
-
- return $exts;
- }
-}
\ No newline at end of file
+
+
+ getIconBack()->getIcon(); ?>
+
+
+
+
diff --git a/inc/themes/material-blue/views/main/header.inc b/app/modules/web/themes/material-blue/views/_partials/header.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/header.inc
rename to app/modules/web/themes/material-blue/views/_partials/header.inc
diff --git a/app/modules/web/themes/material-blue/views/_partials/sessionbar.inc b/app/modules/web/themes/material-blue/views/_partials/sessionbar.inc
new file mode 100644
index 00000000..e69de29b
diff --git a/inc/themes/material-blue/views/account/account-editpass.inc b/app/modules/web/themes/material-blue/views/account/account-editpass.inc
similarity index 100%
rename from inc/themes/material-blue/views/account/account-editpass.inc
rename to app/modules/web/themes/material-blue/views/account/account-editpass.inc
diff --git a/inc/themes/material-blue/views/account/account-link.inc b/app/modules/web/themes/material-blue/views/account/account-link.inc
similarity index 100%
rename from inc/themes/material-blue/views/account/account-link.inc
rename to app/modules/web/themes/material-blue/views/account/account-link.inc
diff --git a/inc/themes/material-blue/views/account/account-permissions.inc b/app/modules/web/themes/material-blue/views/account/account-permissions.inc
similarity index 100%
rename from inc/themes/material-blue/views/account/account-permissions.inc
rename to app/modules/web/themes/material-blue/views/account/account-permissions.inc
diff --git a/inc/themes/material-blue/views/account/account.inc b/app/modules/web/themes/material-blue/views/account/account.inc
similarity index 97%
rename from inc/themes/material-blue/views/account/account.inc
rename to app/modules/web/themes/material-blue/views/account/account.inc
index 6eb85fdd..45e8e155 100644
--- a/inc/themes/material-blue/views/account/account.inc
+++ b/app/modules/web/themes/material-blue/views/account/account.inc
@@ -63,7 +63,7 @@
value="id; ?>" id == $accountData->getAccountCustomerId()) ? 'selected' : ''; ?>>name; ?>
-
+
id == $accountData->getAccountCategoryId()) ? 'selected' : ''; ?>>name; ?>
-
+
data-sk=""
- data-item-type=""
+ data-item-type="accountsUser"
data-item-id=""
data-selected-id="getAccountParentId() : ''; ?>">
diff --git a/inc/themes/material-blue/views/account/actions.inc b/app/modules/web/themes/material-blue/views/account/actions.inc
similarity index 98%
rename from inc/themes/material-blue/views/account/actions.inc
rename to app/modules/web/themes/material-blue/views/account/actions.inc
index 1939edf3..8bca383c 100644
--- a/inc/themes/material-blue/views/account/actions.inc
+++ b/app/modules/web/themes/material-blue/views/account/actions.inc
@@ -1,4 +1,5 @@
getIconViewPass()->getIcon(); ?>
-
+
getIconEdit()->getIcon(); ?>
- isShowEdit() && $actionId == \SP\Core\ActionsInterface::ACTION_ACC_VIEW && Checks::mailrequestIsEnabled()): ?>
+ isShowEdit() && $actionId == \SP\Core\ActionsInterface::ACTION_ACC_VIEW && $mailRequestEnabled): ?>
CONFIG FILE:
-
+
diff --git a/inc/themes/material-blue/views/common/errorfancy.inc b/app/modules/web/themes/material-blue/views/common/errorfancy.inc
similarity index 100%
rename from inc/themes/material-blue/views/common/errorfancy.inc
rename to app/modules/web/themes/material-blue/views/common/errorfancy.inc
diff --git a/inc/themes/material-blue/views/common/tabs-end.inc b/app/modules/web/themes/material-blue/views/common/tabs-end.inc
similarity index 100%
rename from inc/themes/material-blue/views/common/tabs-end.inc
rename to app/modules/web/themes/material-blue/views/common/tabs-end.inc
diff --git a/inc/themes/material-blue/views/common/tabs-start.inc b/app/modules/web/themes/material-blue/views/common/tabs-start.inc
similarity index 100%
rename from inc/themes/material-blue/views/common/tabs-start.inc
rename to app/modules/web/themes/material-blue/views/common/tabs-start.inc
diff --git a/inc/themes/material-blue/views/config/accounts.inc b/app/modules/web/themes/material-blue/views/config/accounts.inc
similarity index 94%
rename from inc/themes/material-blue/views/config/accounts.inc
rename to app/modules/web/themes/material-blue/views/config/accounts.inc
index 335c6249..230c6cb4 100644
--- a/inc/themes/material-blue/views/config/accounts.inc
+++ b/app/modules/web/themes/material-blue/views/config/accounts.inc
@@ -29,7 +29,7 @@
+ value="getAccountCount(); ?>" required/>
@@ -49,7 +49,7 @@
isAccountLink() ? 'checked' : ''; ?>/>
+ name="account_link" isAccountLink() ? 'checked' : ''; ?>/>
@@ -68,7 +68,7 @@
isGlobalSearch() ? 'checked' : ''; ?>/>
+ name="globalsearch" isGlobalSearch() ? 'checked' : ''; ?>/>
@@ -92,7 +92,7 @@
isAccountPassToImage() ? 'checked' : ''; ?>/>
+ isAccountPassToImage() ? 'checked' : ''; ?>/>
@@ -112,7 +112,7 @@
isResultsAsCards() ? 'checked' : ''; ?>/>
+ isResultsAsCards() ? 'checked' : ''; ?>/>
@@ -135,7 +135,7 @@
isAccountFullGroupAccess() ? 'checked' : ''; ?>/>
+ isAccountFullGroupAccess() ? 'checked' : ''; ?>/>
@@ -170,7 +170,7 @@
isPublinksEnabled() ? 'checked' : ''; ?>/>
+ isPublinksEnabled() ? 'checked' : ''; ?>/>
@@ -184,7 +184,7 @@
+ value="getPublinksMaxTime() / 60; ?>"/>
@@ -199,7 +199,7 @@
+ value="getPublinksMaxViews(); ?>"/>
@@ -220,7 +220,7 @@
isPublinksImageEnabled() ? 'checked' : ''; ?>/>
+ isPublinksImageEnabled() ? 'checked' : ''; ?>/>
@@ -247,7 +247,7 @@
isFilesEnabled() ? 'checked' : ''; ?>/>
+ isFilesEnabled() ? 'checked' : ''; ?>/>
@@ -275,7 +275,7 @@
+ value="getFilesAllowedExts()); ?>"/>
@@ -298,7 +298,7 @@
+ value="getFilesAllowedSize(); ?>"/>
diff --git a/inc/themes/material-blue/views/config/backup.inc b/app/modules/web/themes/material-blue/views/config/backup.inc
similarity index 100%
rename from inc/themes/material-blue/views/config/backup.inc
rename to app/modules/web/themes/material-blue/views/config/backup.inc
diff --git a/inc/themes/material-blue/views/config/encryption.inc b/app/modules/web/themes/material-blue/views/config/encryption.inc
similarity index 100%
rename from inc/themes/material-blue/views/config/encryption.inc
rename to app/modules/web/themes/material-blue/views/config/encryption.inc
diff --git a/inc/themes/material-blue/views/config/general-auth.inc b/app/modules/web/themes/material-blue/views/config/general-auth.inc
similarity index 90%
rename from inc/themes/material-blue/views/config/general-auth.inc
rename to app/modules/web/themes/material-blue/views/config/general-auth.inc
index 72f25970..f72db714 100644
--- a/inc/themes/material-blue/views/config/general-auth.inc
+++ b/app/modules/web/themes/material-blue/views/config/general-auth.inc
@@ -9,7 +9,7 @@
isAuthBasicEnabled() ? 'checked' : ''; ?>/>
+ isAuthBasicEnabled() ? 'checked' : ''; ?>/>
@@ -21,7 +21,7 @@
isAuthBasicAutoLoginEnabled() ? 'checked' : ''; ?>/>
+ isAuthBasicAutoLoginEnabled() ? 'checked' : ''; ?>/>
@@ -41,7 +41,7 @@
+ maxlength="128" value="getAuthBasicDomain(); ?>">
@@ -66,7 +66,7 @@
id === $Config->getSsoDefaultGroup() ? 'selected' : ''; ?>>name; ?>
+ value="id; ?>" id === $ConfigData->getSsoDefaultGroup() ? 'selected' : ''; ?>>name; ?>
@@ -90,7 +90,7 @@
id === $Config->getSsoDefaultProfile()) ? 'selected' : ''; ?>>name; ?>
+ value="id; ?>" id === $ConfigData->getSsoDefaultProfile()) ? 'selected' : ''; ?>>name; ?>
diff --git a/inc/themes/material-blue/views/config/general-events.inc b/app/modules/web/themes/material-blue/views/config/general-events.inc
similarity index 88%
rename from inc/themes/material-blue/views/config/general-events.inc
rename to app/modules/web/themes/material-blue/views/config/general-events.inc
index cd8d9826..04f90737 100644
--- a/inc/themes/material-blue/views/config/general-events.inc
+++ b/app/modules/web/themes/material-blue/views/config/general-events.inc
@@ -17,7 +17,7 @@
isLogEnabled() ? 'checked' : ''; ?>/>
+ isLogEnabled() ? 'checked' : ''; ?>/>
@@ -28,7 +28,7 @@
isSyslogEnabled() ? 'checked' : ''; ?>/>
+ isSyslogEnabled() ? 'checked' : ''; ?>/>
@@ -39,7 +39,7 @@
isSyslogRemoteEnabled() ? 'checked' : ''; ?>/>
+ isSyslogRemoteEnabled() ? 'checked' : ''; ?>/>
@@ -52,7 +52,7 @@
+ value="getSyslogServer(); ?>"/>
@@ -66,7 +66,7 @@
+ value="getSyslogPort(); ?>"/>
diff --git a/inc/themes/material-blue/views/config/general-proxy.inc b/app/modules/web/themes/material-blue/views/config/general-proxy.inc
similarity index 94%
rename from inc/themes/material-blue/views/config/general-proxy.inc
rename to app/modules/web/themes/material-blue/views/config/general-proxy.inc
index 64bb9232..900167e1 100644
--- a/inc/themes/material-blue/views/config/general-proxy.inc
+++ b/app/modules/web/themes/material-blue/views/config/general-proxy.inc
@@ -9,7 +9,7 @@
isProxyEnabled() ? 'checked' : ''; ?>/>
+ isProxyEnabled() ? 'checked' : ''; ?>/>
@@ -22,7 +22,7 @@
+ maxlength="128" value="getProxyServer(); ?>">
@@ -36,7 +36,7 @@
+ maxlength="128" value="getProxyPort(); ?>">
@@ -50,7 +50,7 @@
+ maxlength="128" value="getProxyUser(); ?>">
@@ -64,7 +64,7 @@
+ maxlength="128" value="getProxyPass(); ?>">
diff --git a/inc/themes/material-blue/views/config/general-site.inc b/app/modules/web/themes/material-blue/views/config/general-site.inc
similarity index 91%
rename from inc/themes/material-blue/views/config/general-site.inc
rename to app/modules/web/themes/material-blue/views/config/general-site.inc
index 56d03c54..f4643e70 100644
--- a/inc/themes/material-blue/views/config/general-site.inc
+++ b/app/modules/web/themes/material-blue/views/config/general-site.inc
@@ -26,7 +26,7 @@
$langValue): ?>
Config->getSiteLang() === $langValue) ? 'SELECTED' : ''; ?>>
+ value='' getSiteLang() === $langValue) ? 'SELECTED' : ''; ?>>
@@ -49,7 +49,7 @@
class="select-box sel-chosen-ns" >
$themeName): ?>
Config->getSiteTheme() === $themeDir) ? "SELECTED" : ""; ?>>
+ value='' getSiteTheme() === $themeDir) ? "SELECTED" : ""; ?>>
@@ -62,7 +62,7 @@
+ value="getSessionTimeout(); ?>" required/>
@@ -82,7 +82,7 @@
isHttpsEnabled() ? 'checked' : ''; ?>/>
+ isHttpsEnabled() ? 'checked' : ''; ?>/>
@@ -100,7 +100,7 @@
isDebug() ? 'checked' : ''; ?>/>
+ isDebug() ? 'checked' : ''; ?>/>
@@ -118,7 +118,7 @@
isMaintenance() ? 'checked' : ''; ?>/>
+ isMaintenance() ? 'checked' : ''; ?>/>
@@ -136,7 +136,7 @@
isCheckUpdates() ? 'checked' : ''; ?>/>
+ isCheckUpdates() ? 'checked' : ''; ?>/>
@@ -154,7 +154,7 @@
isChecknotices() ? 'checked' : ''; ?>/>
+ isChecknotices() ? 'checked' : ''; ?>/>
@@ -175,7 +175,7 @@
isEncryptSession() ? 'checked' : ''; ?>/>
+ isEncryptSession() ? 'checked' : ''; ?>/>
diff --git a/inc/themes/material-blue/views/config/general.inc b/app/modules/web/themes/material-blue/views/config/general.inc
similarity index 100%
rename from inc/themes/material-blue/views/config/general.inc
rename to app/modules/web/themes/material-blue/views/config/general.inc
diff --git a/inc/themes/material-blue/views/config/import.inc b/app/modules/web/themes/material-blue/views/config/import.inc
similarity index 98%
rename from inc/themes/material-blue/views/config/import.inc
rename to app/modules/web/themes/material-blue/views/config/import.inc
index f67040fa..822bffe3 100644
--- a/inc/themes/material-blue/views/config/import.inc
+++ b/app/modules/web/themes/material-blue/views/config/import.inc
@@ -1,5 +1,5 @@
+use SP\Core\SessionFactory; ?>
@@ -28,7 +28,7 @@ use SP\Core\Session; ?>
id === Session::getUserData()->getUserId()) ? 'selected' : ''; ?>>
+ value="id; ?>" id === SessionFactory::getUserData()->getUserId()) ? 'selected' : ''; ?>>
name; ?>
diff --git a/inc/themes/material-blue/views/config/info.inc b/app/modules/web/themes/material-blue/views/config/info.inc
similarity index 100%
rename from inc/themes/material-blue/views/config/info.inc
rename to app/modules/web/themes/material-blue/views/config/info.inc
diff --git a/inc/themes/material-blue/views/config/ldap.inc b/app/modules/web/themes/material-blue/views/config/ldap.inc
similarity index 96%
rename from inc/themes/material-blue/views/config/ldap.inc
rename to app/modules/web/themes/material-blue/views/config/ldap.inc
index 277b096d..3661c1ca 100644
--- a/inc/themes/material-blue/views/config/ldap.inc
+++ b/app/modules/web/themes/material-blue/views/config/ldap.inc
@@ -32,7 +32,7 @@
isLdapEnabled() ? 'checked' : ''; ?>/>
+ isLdapEnabled() ? 'checked' : ''; ?>/>
@@ -52,7 +52,7 @@
isLdapAds() ? 'checked' : ''; ?>/>
+ isLdapAds() ? 'checked' : ''; ?>/>
@@ -82,7 +82,7 @@
+ maxlength="128" value="getLdapServer(); ?>"/>
@@ -112,7 +112,7 @@
+ maxlength="128" value="getLdapBindUser(); ?>"/>
@@ -133,7 +133,7 @@
+ maxlength="128" value="getLdapBindPass(); ?>"/>
@@ -163,7 +163,7 @@
+ maxlength="128" value="getLdapBase(); ?>"/>
@@ -197,7 +197,7 @@
+ maxlength="128" value="getLdapGroup(); ?>"/>
@@ -221,7 +221,7 @@
id === $Config->getLdapDefaultGroup() ? 'selected' : ''; ?>>name; ?>
+ value="id; ?>" id === $ConfigData->getLdapDefaultGroup() ? 'selected' : ''; ?>>name; ?>
@@ -245,7 +245,7 @@
id === $Config->getLdapDefaultProfile()) ? 'selected' : ''; ?>>name; ?>
+ value="id; ?>" id === $ConfigData->getLdapDefaultProfile()) ? 'selected' : ''; ?>>name; ?>
diff --git a/inc/themes/material-blue/views/config/mail.inc b/app/modules/web/themes/material-blue/views/config/mail.inc
similarity index 93%
rename from inc/themes/material-blue/views/config/mail.inc
rename to app/modules/web/themes/material-blue/views/config/mail.inc
index d48d03b9..0ca3911c 100644
--- a/inc/themes/material-blue/views/config/mail.inc
+++ b/app/modules/web/themes/material-blue/views/config/mail.inc
@@ -17,7 +17,7 @@
isMailEnabled() ? 'checked' : ''; ?>/>
+ isMailEnabled() ? 'checked' : ''; ?>/>
@@ -30,7 +30,7 @@
+ maxlength="128" value="getMailServer(); ?>"/>
@@ -43,7 +43,7 @@
+ value="getMailPort(); ?>"/>
@@ -54,7 +54,7 @@
isMailAuthenabled() ? 'checked' : ''; ?>/>
+ name="mail_authenabled" isMailAuthenabled() ? 'checked' : ''; ?>/>
@@ -67,7 +67,7 @@
+ maxlength="50" value="getMailUser(); ?>"/>
@@ -80,7 +80,7 @@
+ maxlength="128" value="getMailPass(); ?>"/>
@@ -96,7 +96,7 @@
getMailSecurity() == $security) ? 'selected' : ''; ?>>
+ value="" getMailSecurity() == $security) ? 'selected' : ''; ?>>
@@ -109,7 +109,7 @@
+ maxlength="128" value="getMailFrom(); ?>"/>
@@ -129,7 +129,7 @@
isMailRequestsEnabled() ? 'checked' : ''; ?>/>
+ name="mail_requestsenabled" isMailRequestsEnabled() ? 'checked' : ''; ?>/>
diff --git a/inc/themes/material-blue/views/config/wiki.inc b/app/modules/web/themes/material-blue/views/config/wiki.inc
similarity index 96%
rename from inc/themes/material-blue/views/config/wiki.inc
rename to app/modules/web/themes/material-blue/views/config/wiki.inc
index 9684e8df..a6945aaa 100644
--- a/inc/themes/material-blue/views/config/wiki.inc
+++ b/app/modules/web/themes/material-blue/views/config/wiki.inc
@@ -26,7 +26,7 @@
isWikiEnabled() ? 'checked' : ''; ?>/>
+ isWikiEnabled() ? 'checked' : ''; ?>/>
@@ -58,7 +58,7 @@
+ maxlength="255" value="getWikiSearchurl(); ?>">
@@ -91,7 +91,7 @@
+ maxlength="255" value="getWikiPageurl(); ?>">
@@ -115,7 +115,7 @@
-
+
@@ -143,7 +143,7 @@
isDokuwikiEnabled() ? 'checked' : ''; ?>/>
+ isDokuwikiEnabled() ? 'checked' : ''; ?>/>
@@ -171,7 +171,7 @@
+ maxlength="255" value="getDokuwikiUrl(); ?>"/>
@@ -198,7 +198,7 @@
+ maxlength="255" value="getDokuwikiUrlBase(); ?>"/>
@@ -219,7 +219,7 @@
+ maxlength="128" value="getDokuwikiUser(); ?>"/>
@@ -232,7 +232,7 @@
+ maxlength="128" value="getDokuwikiPass(); ?>"/>
@@ -253,7 +253,7 @@
+ value="getDokuwikiNamespace(); ?>"/>
diff --git a/inc/themes/material-blue/views/eventlog/eventlog.inc b/app/modules/web/themes/material-blue/views/eventlog/eventlog.inc
similarity index 100%
rename from inc/themes/material-blue/views/eventlog/eventlog.inc
rename to app/modules/web/themes/material-blue/views/eventlog/eventlog.inc
diff --git a/inc/themes/material-blue/views/grid/datagrid-nav-full.inc b/app/modules/web/themes/material-blue/views/grid/datagrid-nav-full.inc
similarity index 100%
rename from inc/themes/material-blue/views/grid/datagrid-nav-full.inc
rename to app/modules/web/themes/material-blue/views/grid/datagrid-nav-full.inc
diff --git a/inc/themes/material-blue/views/grid/datagrid-rows.inc b/app/modules/web/themes/material-blue/views/grid/datagrid-rows.inc
similarity index 100%
rename from inc/themes/material-blue/views/grid/datagrid-rows.inc
rename to app/modules/web/themes/material-blue/views/grid/datagrid-rows.inc
diff --git a/inc/themes/material-blue/views/grid/datagrid-table.inc b/app/modules/web/themes/material-blue/views/grid/datagrid-table.inc
similarity index 100%
rename from inc/themes/material-blue/views/grid/datagrid-table.inc
rename to app/modules/web/themes/material-blue/views/grid/datagrid-table.inc
diff --git a/inc/themes/material-blue/views/grid/datatabs-grid.inc b/app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc
similarity index 100%
rename from inc/themes/material-blue/views/grid/datatabs-grid.inc
rename to app/modules/web/themes/material-blue/views/grid/datatabs-grid.inc
diff --git a/inc/themes/material-blue/views/itemshow/categories.inc b/app/modules/web/themes/material-blue/views/itemshow/categories.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/categories.inc
rename to app/modules/web/themes/material-blue/views/itemshow/categories.inc
diff --git a/inc/themes/material-blue/views/itemshow/customers.inc b/app/modules/web/themes/material-blue/views/itemshow/customers.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/customers.inc
rename to app/modules/web/themes/material-blue/views/itemshow/customers.inc
diff --git a/inc/themes/material-blue/views/itemshow/customfields.inc b/app/modules/web/themes/material-blue/views/itemshow/customfields.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/customfields.inc
rename to app/modules/web/themes/material-blue/views/itemshow/customfields.inc
diff --git a/inc/themes/material-blue/views/itemshow/groups.inc b/app/modules/web/themes/material-blue/views/itemshow/groups.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/groups.inc
rename to app/modules/web/themes/material-blue/views/itemshow/groups.inc
diff --git a/inc/themes/material-blue/views/itemshow/plugins.inc b/app/modules/web/themes/material-blue/views/itemshow/plugins.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/plugins.inc
rename to app/modules/web/themes/material-blue/views/itemshow/plugins.inc
diff --git a/inc/themes/material-blue/views/itemshow/profiles.inc b/app/modules/web/themes/material-blue/views/itemshow/profiles.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/profiles.inc
rename to app/modules/web/themes/material-blue/views/itemshow/profiles.inc
diff --git a/inc/themes/material-blue/views/itemshow/publiclinks.inc b/app/modules/web/themes/material-blue/views/itemshow/publiclinks.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/publiclinks.inc
rename to app/modules/web/themes/material-blue/views/itemshow/publiclinks.inc
diff --git a/inc/themes/material-blue/views/itemshow/tags.inc b/app/modules/web/themes/material-blue/views/itemshow/tags.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/tags.inc
rename to app/modules/web/themes/material-blue/views/itemshow/tags.inc
diff --git a/inc/themes/material-blue/views/itemshow/tokens.inc b/app/modules/web/themes/material-blue/views/itemshow/tokens.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/tokens.inc
rename to app/modules/web/themes/material-blue/views/itemshow/tokens.inc
diff --git a/inc/themes/material-blue/views/itemshow/users.inc b/app/modules/web/themes/material-blue/views/itemshow/users.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/users.inc
rename to app/modules/web/themes/material-blue/views/itemshow/users.inc
diff --git a/inc/themes/material-blue/views/itemshow/userspass.inc b/app/modules/web/themes/material-blue/views/itemshow/userspass.inc
similarity index 100%
rename from inc/themes/material-blue/views/itemshow/userspass.inc
rename to app/modules/web/themes/material-blue/views/itemshow/userspass.inc
diff --git a/inc/themes/material-blue/views/main/login.inc b/app/modules/web/themes/material-blue/views/login/login.inc
similarity index 98%
rename from inc/themes/material-blue/views/main/login.inc
rename to app/modules/web/themes/material-blue/views/login/login.inc
index 4b1ccb4c..b5c3462d 100644
--- a/inc/themes/material-blue/views/main/login.inc
+++ b/app/modules/web/themes/material-blue/views/login/login.inc
@@ -72,7 +72,7 @@
diff --git a/inc/themes/material-blue/views/main/logout.inc b/app/modules/web/themes/material-blue/views/login/logout.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/logout.inc
rename to app/modules/web/themes/material-blue/views/login/logout.inc
diff --git a/inc/themes/material-blue/views/main/install.inc b/app/modules/web/themes/material-blue/views/main/install.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/install.inc
rename to app/modules/web/themes/material-blue/views/main/install.inc
diff --git a/inc/themes/material-blue/views/main/update.inc b/app/modules/web/themes/material-blue/views/main/update.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/update.inc
rename to app/modules/web/themes/material-blue/views/main/update.inc
diff --git a/inc/themes/material-blue/views/main/upgrade.inc b/app/modules/web/themes/material-blue/views/main/upgrade.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/upgrade.inc
rename to app/modules/web/themes/material-blue/views/main/upgrade.inc
diff --git a/inc/themes/material-blue/views/noticeshow/notices.inc b/app/modules/web/themes/material-blue/views/noticeshow/notices.inc
similarity index 100%
rename from inc/themes/material-blue/views/noticeshow/notices.inc
rename to app/modules/web/themes/material-blue/views/noticeshow/notices.inc
diff --git a/inc/themes/material-blue/views/main/passreset.inc b/app/modules/web/themes/material-blue/views/passreset/passreset.inc
similarity index 100%
rename from inc/themes/material-blue/views/main/passreset.inc
rename to app/modules/web/themes/material-blue/views/passreset/passreset.inc
diff --git a/inc/themes/material-blue/views/userpreferences/preferences-site.inc b/app/modules/web/themes/material-blue/views/userpreferences/preferences-site.inc
similarity index 100%
rename from inc/themes/material-blue/views/userpreferences/preferences-site.inc
rename to app/modules/web/themes/material-blue/views/userpreferences/preferences-site.inc
diff --git a/inc/themes/material-blue/views/wiki/wikipage.inc b/app/modules/web/themes/material-blue/views/wiki/wikipage.inc
similarity index 100%
rename from inc/themes/material-blue/views/wiki/wikipage.inc
rename to app/modules/web/themes/material-blue/views/wiki/wikipage.inc
diff --git a/app/temp/.blank b/app/temp/.blank
new file mode 100644
index 00000000..e69de29b
diff --git a/composer.json b/composer.json
index 9961ecb5..3ced2863 100644
--- a/composer.json
+++ b/composer.json
@@ -22,14 +22,17 @@
"defuse/php-encryption": "~2.1",
"phpmailer/phpmailer": "~6.0",
"ademarre/binary-to-text-php": "dev-master",
- "phpseclib/phpseclib": "~2.0"
+ "phpseclib/phpseclib": "~2.0",
+ "pimple/pimple": "v3.2.2",
+ "klein/klein": "v2.1.2"
},
"autoload": {
"psr-4": {
- "SP\\": "inc/"
+ "SP\\": "lib/SP/",
+ "SP\\Modules\\Web\\": "app/modules/web/"
}
},
"config": {
- "classmap-authoritative": true
+ "classmap-authoritative": false
}
}
diff --git a/composer.lock b/composer.lock
index 28204c38..2d90b5fe 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "a5cfc4b45a24e6a518c075b48dd49b74",
+ "content-hash": "ae3f225c6b3ff061f4b93887065ac822",
"packages": [
{
"name": "ademarre/binary-to-text-php",
@@ -115,17 +115,73 @@
"time": "2017-05-18T21:28:48+00:00"
},
{
- "name": "paragonie/random_compat",
- "version": "v2.0.10",
+ "name": "klein/klein",
+ "version": "v2.1.2",
"source": {
"type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d"
+ "url": "https://github.com/klein/klein.php.git",
+ "reference": "6549676cc831b9417332b3d9485c64bbf7bac728"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d",
- "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d",
+ "url": "https://api.github.com/repos/klein/klein.php/zipball/6549676cc831b9417332b3d9485c64bbf7bac728",
+ "reference": "6549676cc831b9417332b3d9485c64bbf7bac728",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/php-code-coverage": "^2.2",
+ "phpunit/phpunit": "^4.8",
+ "squizlabs/php_codesniffer": "1.4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Klein\\": "src/Klein/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris O'Hara",
+ "email": "cohara87@gmail.com",
+ "homepage": "http://chris6f.com/",
+ "role": "Creator/Developer"
+ },
+ {
+ "name": "Trevor Suarez",
+ "email": "rican7@gmail.com",
+ "homepage": "https://trevorsuarez.com/",
+ "role": "Contributor/Developer"
+ }
+ ],
+ "description": "A lightning fast router for PHP",
+ "homepage": "https://github.com/klein/klein.php",
+ "keywords": [
+ "boilerplate",
+ "router",
+ "routing",
+ "sinatra"
+ ],
+ "time": "2017-02-01T23:08:58+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v2.0.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8",
+ "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8",
"shasum": ""
},
"require": {
@@ -160,7 +216,7 @@
"pseudorandom",
"random"
],
- "time": "2017-03-13T16:27:32+00:00"
+ "time": "2017-09-27T21:40:39+00:00"
},
{
"name": "phpmailer/phpmailer",
@@ -318,6 +374,105 @@
"x509"
],
"time": "2017-06-05T06:31:10+00:00"
+ },
+ {
+ "name": "pimple/pimple",
+ "version": "v3.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silexphp/Pimple.git",
+ "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silexphp/Pimple/zipball/4d45fb62d96418396ec58ba76e6f065bca16e10a",
+ "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/container": "^1.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Pimple": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Pimple, a simple Dependency Injection Container",
+ "homepage": "http://pimple.sensiolabs.org",
+ "keywords": [
+ "container",
+ "dependency injection"
+ ],
+ "time": "2017-07-23T07:32:15+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2017-02-14T16:28:37+00:00"
}
],
"packages-dev": [],
diff --git a/inc/Base.php b/inc/Base.php
deleted file mode 100644
index e799ec88..00000000
--- a/inc/Base.php
+++ /dev/null
@@ -1,53 +0,0 @@
-.
- */
-
-use SP\Core\Init;
-
-defined('APP_ROOT') || die();
-
-// Please, notice that this file should be outside the webserver root. You can move it and then update this path
-define('XML_CONFIG_FILE', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.xml');
-
-define('BASE_DIR', __DIR__);
-define('CONFIG_FILE', APP_ROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php');
-define('VENDOR_PATH', APP_ROOT . DIRECTORY_SEPARATOR . 'vendor');
-define('LOG_FILE', APP_ROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'syspass.log');
-define('MODEL_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'SP');
-define('VIEW_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'themes');
-define('EXTENSIONS_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'Exts');
-define('PLUGINS_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'Plugins');
-define('LOCALES_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'locales');
-define('SQL_PATH', BASE_DIR . DIRECTORY_SEPARATOR . 'sql');
-
-define('DEBUG', true);
-
-require VENDOR_PATH . DIRECTORY_SEPARATOR . 'autoload.php';
-require __DIR__ . DIRECTORY_SEPARATOR . 'SplClassLoader.php';
-require __DIR__ . DIRECTORY_SEPARATOR . 'BaseFunctions.php';
-
-// Empezar a calcular la memoria utilizada
-$memInit = memory_get_usage();
-
-// Inicializar sysPass
-Init::start();
\ No newline at end of file
diff --git a/inc/BaseFunctions.php b/inc/BaseFunctions.php
deleted file mode 100644
index 83b928d2..00000000
--- a/inc/BaseFunctions.php
+++ /dev/null
@@ -1,103 +0,0 @@
-.
- */
-
-/**
- * Función para enviar mensajes al log de errores
- *
- * @param mixed $data
- * @param bool $printLastCaller
- */
-function debugLog($data, $printLastCaller = false)
-{
- $useOwn = true;
- $line = date('Y-m-d H:i:s') . ' - ' . print_r($data, true) . PHP_EOL;
-
- if (!error_log($line, 3, LOG_FILE)) {
- $useOwn = false;
- error_log(print_r($data, true));
- }
-
- if ($printLastCaller === true) {
- $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
- $n = count($backtrace);
-
- for ($i = 1; $i <= $n - 1; $i++) {
- $class = isset($backtrace[$i]['class']) ? $backtrace[$i]['class'] : '';
- $btLine = sprintf('Caller %d: %s\%s' . PHP_EOL, $i, $class, $backtrace[$i]['function']);
-
- if ($useOwn === true) {
- error_log($btLine, 3, LOG_FILE);
- } else {
- error_log($btLine);
- }
- }
- }
-}
-
-/**
- * Alias gettext function
- *
- * @param string $message
- * @param bool $translate Si es necesario traducir
- * @return string
- */
-function __($message, $translate = true)
-{
- return $translate === true && $message !== '' && mb_strlen($message) < 4096 ? gettext($message) : $message;
-}
-
-/**
- * Alias para obtener las locales de un dominio
- *
- * @param string $domain
- * @param string $message
- * @param bool $translate
- * @return string
- */
-function _t($domain, $message, $translate = true)
-{
- return $translate === true && $message !== '' && mb_strlen($message) < 4096 ? dgettext($domain, $message) : $message;
-}
-
-/**
- * Capitalización de cadenas multi byte
- *
- * @param $string
- * @return string
- */
-function mb_ucfirst($string)
-{
- return mb_strtoupper(mb_substr($string, 0, 1));
-}
-
-/**
- * Devuelve el tiempo actual en coma flotante.
- * Esta función se utiliza para calcular el tiempo de renderizado con coma flotante
- *
- * @returns float con el tiempo actual
- */
-function getElapsedTime()
-{
- return microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
-}
\ No newline at end of file
diff --git a/inc/themes/material-blue/views/main/error.inc b/inc/themes/material-blue/views/main/error.inc
deleted file mode 100644
index 56e4f8aa..00000000
--- a/inc/themes/material-blue/views/main/error.inc
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- includeTemplate('error-list', 'main'); ?>
-
-
-
- getIconBack()->getIcon(); ?>
-
-
-
-
diff --git a/index.php b/index.php
index 8625b831..9cb1039b 100644
--- a/index.php
+++ b/index.php
@@ -2,8 +2,8 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
* @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
@@ -22,16 +22,17 @@
* along with sysPass. If not, see .
*/
-use SP\Controller\MainController;
use SP\Core\Init;
-use SP\Core\Session;
+use SP\Core\SessionFactory;
+use SP\Modules\Web\Controllers\MainController;
define('APP_ROOT', __DIR__);
+define('APP_MODULE', 'web');
-require APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+require APP_ROOT . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'Base.php';
-if (!Init::checkPostLoginActions() && Session::getAuthCompleted()) {
- $Controller = new MainController();
- $Controller->getMain();
- $Controller->view();
-}
\ No newline at end of file
+//if (!Init::checkPostLoginActions() && Session::getAuthCompleted()) {
+// $Controller = new MainController();
+// $Controller->getMain();
+// $Controller->view();
+//}
\ No newline at end of file
diff --git a/js/app-actions.min.js b/js/app-actions.min.js
deleted file mode 100644
index 4f7f9776..00000000
--- a/js/app-actions.min.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var $jscomp={scope:{},findInternal:function(c,d,k){c instanceof String&&(c=String(c));for(var f=c.length,g=0;g