From 7f99b6eb2b6677dc497b8021f1cdf4d4d0c310ed Mon Sep 17 00:00:00 2001 From: nuxsmin Date: Tue, 3 Jan 2017 15:02:07 +0100 Subject: [PATCH] * [DEV] New Plugin infraestructure (work in progress). --- css/toastr.min.css | 1 + .../Authenticator/ActionController.class.php | 117 ++++++++++++++++++ .../Authenticator/AuthenticatorData.class.php | 74 +++++++++++ .../AuthenticatorPlugin.class.php | 5 + .../PreferencesController.class.php | 18 ++- .../Authenticator/ajax/ajax_prefsSave.php | 36 ++++++ inc/Plugins/Authenticator/js/plugin.js | 27 ++-- inc/Plugins/Authenticator/js/plugin.min.js | 2 +- .../userpreferences/preferences-security.inc | 2 +- inc/SP/Controller/Grids.class.php | 73 +++++++++++ .../Controller/ItemActionController.class.php | 32 +++++ .../Controller/ItemListController.class.php | 22 ++++ .../Controller/ItemSearchController.class.php | 35 +++++- .../Controller/ItemShowController.class.php | 29 ++++- .../UserPreferencesController.class.php | 21 +--- inc/SP/Core/ActionsInterface.class.php | 6 + inc/SP/Core/Plugin/PluginBase.class.php | 6 +- inc/SP/Core/Plugin/PluginUtil.class.php | 67 ++++++++++ inc/SP/Core/UI/ThemeIconsBase.class.php | 18 +++ .../DataGrid/DataGridActionBase.class.php | 9 +- .../DataGridActionInterface.class.php | 20 ++- .../Html/DataGrid/DataGridDataBase.class.php | 7 +- .../DataGrid/DataGridDataInterface.class.php | 4 +- inc/SP/Mgmt/Plugins/Plugin.class.php | 40 +++++- inc/SP/Mgmt/Plugins/PluginSearch.class.php | 3 +- inc/SP/Util/ArrayUtil.class.php | 54 ++++++++ inc/sql/1.3.16011001.sql | 4 +- inc/sql/1.3.16100601.sql | 2 +- inc/sql/dbstructure.sql | 14 +-- .../css/selectize.bootstrap3.min.css | 2 +- inc/themes/material-blue/css/styles.min.css | 2 +- inc/themes/material-blue/inc/Icons.class.php | 1 + inc/themes/material-blue/js/app-theme.min.js | 2 +- .../js/bootstrap-material-datetimepicker.js | 1 + .../bootstrap-material-datetimepicker.min.js | 2 +- .../views/grid/datagrid-rows.inc | 32 ++--- .../material-blue/views/itemshow/plugins.inc | 82 ++++++++++++ js/app-actions.js | 32 ++++- js/app-actions.min.js | 63 +++++----- js/app-main.min.js | 2 +- js/app-requests.min.js | 2 +- js/app-triggers.min.js | 2 +- js/moment-timezone.js | 1 + js/selectize.js | 1 + js/selectize.min.js | 2 +- 45 files changed, 856 insertions(+), 121 deletions(-) create mode 100644 css/toastr.min.css create mode 100644 inc/Plugins/Authenticator/ActionController.class.php create mode 100644 inc/Plugins/Authenticator/AuthenticatorData.class.php create mode 100644 inc/Plugins/Authenticator/ajax/ajax_prefsSave.php create mode 100644 inc/SP/Util/ArrayUtil.class.php create mode 100644 inc/themes/material-blue/views/itemshow/plugins.inc diff --git a/css/toastr.min.css b/css/toastr.min.css new file mode 100644 index 00000000..c174f8f3 --- /dev/null +++ b/css/toastr.min.css @@ -0,0 +1 @@ +.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:alpha(opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:alpha(opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-0.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:alpha(opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:alpha(opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=")!important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")!important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==")!important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=")!important}#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:alpha(opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}#toast-container .rtl .toast-close-button{left:-0.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}#toast-container .rtl .toast-close-button{left:-0.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}} \ No newline at end of file diff --git a/inc/Plugins/Authenticator/ActionController.class.php b/inc/Plugins/Authenticator/ActionController.class.php new file mode 100644 index 00000000..0c90cba0 --- /dev/null +++ b/inc/Plugins/Authenticator/ActionController.class.php @@ -0,0 +1,117 @@ +. + */ + +namespace Plugins\Authenticator; + +use SP\Controller\ItemControllerInterface; +use SP\Controller\RequestControllerTrait; +use SP\Core\Exceptions\SPException; +use SP\Core\Plugin\PluginUtil; +use SP\Core\Session; +use SP\DataModel\PluginData; +use SP\Http\Request; +use SP\Mgmt\Plugins\Plugin; +use SP\Util\Json; + +/** + * Class ActionController + * + * @package Plugins\Authenticator + */ +class ActionController implements ItemControllerInterface +{ + const ACTION_TWOFA_SAVE = 1; + const ACTION_TWOFA_CHECK = 1; + + use RequestControllerTrait; + + /** + * @var AuthenticatorPlugin + */ + protected $Plugin; + + public function __construct() + { + $this->Plugin = PluginUtil::getPluginData('Authenticator'); + + $this->init(); + } + + /** + * Guardar los datos del plugin + */ + protected function save() + { + $pin = Request::analyze('security_pin', 0); + + $twoFa = new Authenticator($this->itemId, Session::getUserData()->getUserLogin()); + + if (!$twoFa->verifyKey($pin)) { + $this->jsonResponse->setDescription(_('Código incorrecto')); + Json::returnJson($this->jsonResponse); + } + + try { + $data = $this->Plugin->getData(); + + if (!isset($data[$this->itemId])) { + $data[$this->itemId] = new AuthenticatorData(); + } + + /** @var AuthenticatorData $AuthenticatorData */ + $AuthenticatorData = $data[$this->itemId]; + $AuthenticatorData->setUserId($this->itemId); + $AuthenticatorData->setTwofaEnabled(Request::analyze('security_2faenabled', 0, false, 1)); + + $PluginData = new PluginData(); + $PluginData->setPluginName($this->Plugin->getName()); + $PluginData->setPluginEnabled(1); + $PluginData->setPluginData(serialize($data)); + + Plugin::getItem($PluginData)->update(); + + $this->jsonResponse->setStatus(0); + $this->jsonResponse->setDescription(_('Preferencias actualizadas')); + } catch (SPException $e) { + $this->jsonResponse->setDescription($e->getMessage()); + } + + Json::returnJson($this->jsonResponse); + } + + /** + * Realizar la acción solicitada en la la petición HTTP + */ + public function doAction() + { + switch ($this->actionId) { + case ActionController::ACTION_TWOFA_SAVE: + $this->save(); + break; + case ActionController::ACTION_TWOFA_CHECK: + break; + default: + } + } +} \ No newline at end of file diff --git a/inc/Plugins/Authenticator/AuthenticatorData.class.php b/inc/Plugins/Authenticator/AuthenticatorData.class.php new file mode 100644 index 00000000..552825fd --- /dev/null +++ b/inc/Plugins/Authenticator/AuthenticatorData.class.php @@ -0,0 +1,74 @@ +. + */ + +namespace Plugins\Authenticator; + +/** + * Class AuthenticatorData + * + * @package Plugins\Authenticator + */ +class AuthenticatorData +{ + /** + * @var + */ + public $userId; + /** + * @var int + */ + public $twofaEnabled = 0; + + /** + * @return mixed + */ + public function getUserId() + { + return (int)$this->userId; + } + + /** + * @param mixed $userId + */ + public function setUserId($userId) + { + $this->userId = (int)$userId; + } + + /** + * @return bool + */ + public function isTwofaEnabled() + { + return (bool)$this->twofaEnabled; + } + + /** + * @param int $twofaEnabled + */ + public function setTwofaEnabled($twofaEnabled) + { + $this->twofaEnabled = (int)$twofaEnabled; + } +} \ No newline at end of file diff --git a/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php b/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php index d3061062..c696ffa7 100644 --- a/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php +++ b/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php @@ -35,6 +35,11 @@ use SplSubject; */ class AuthenticatorPlugin extends PluginBase { + /** + * @var AuthenticatorData[] + */ + protected $data = []; + /** * Receive update from subject * diff --git a/inc/Plugins/Authenticator/PreferencesController.class.php b/inc/Plugins/Authenticator/PreferencesController.class.php index 1a7ace4b..c1a93312 100644 --- a/inc/Plugins/Authenticator/PreferencesController.class.php +++ b/inc/Plugins/Authenticator/PreferencesController.class.php @@ -26,8 +26,8 @@ namespace Plugins\Authenticator; use InvalidArgumentException; use SP\Controller\TabControllerBase; -use SP\Core\ActionsInterface; use SP\Core\Plugin\PluginBase; +use SP\Util\ArrayUtil; /** * Class Controller @@ -49,7 +49,7 @@ class PreferencesController * Controller constructor. * * @param TabControllerBase $Controller - * @param PluginBase $Plugin + * @param PluginBase $Plugin */ public function __construct(TabControllerBase $Controller, PluginBase $Plugin) { @@ -64,19 +64,27 @@ class PreferencesController { $base = $this->Plugin->getThemeDir() . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'userpreferences'; + // Datos del plugin + $pluginData = $this->Plugin->getData(); + + // Datos del usuario de la sesión $UserData = $this->Controller->getUserData(); + // Buscar al usuario en los datos del plugin + /** @var AuthenticatorData $AuthenticatorData */ + $AuthenticatorData = ArrayUtil::searchInObject($pluginData, 'userId', $UserData->getUserId(), new AuthenticatorData()); + $this->Controller->view->addTemplate('preferences-security', $base); try { $twoFa = new Authenticator($UserData->getUserId(), $UserData->getUserLogin()); - $this->Controller->view->assign('qrCode', !$UserData->getUserPreferences()->isUse2Fa() ? $twoFa->getUserQRCode() : ''); + $this->Controller->view->assign('qrCode', !$AuthenticatorData->isTwofaEnabled() ? $twoFa->getUserQRCode() : ''); $this->Controller->view->assign('userId', $UserData->getUserId()); - $this->Controller->view->assign('chk2FAEnabled', $UserData->getUserPreferences()->isUse2Fa()); + $this->Controller->view->assign('chk2FAEnabled', $AuthenticatorData->isTwofaEnabled()); $this->Controller->view->assign('tabIndex', $this->Controller->addTab(_('Seguridad')), 'security'); - $this->Controller->view->assign('actionId', ActionsInterface::ACTION_USR_PREFERENCES_SECURITY, 'security'); + $this->Controller->view->assign('actionId', ActionController::ACTION_TWOFA_SAVE, 'security'); } catch (InvalidArgumentException $e) { } } diff --git a/inc/Plugins/Authenticator/ajax/ajax_prefsSave.php b/inc/Plugins/Authenticator/ajax/ajax_prefsSave.php new file mode 100644 index 00000000..b1099228 --- /dev/null +++ b/inc/Plugins/Authenticator/ajax/ajax_prefsSave.php @@ -0,0 +1,36 @@ +. + * + */ + +use Plugins\Authenticator\ActionController; +use SP\Http\Request; + +define('APP_ROOT', '../../../..'); + +require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php'; + +Request::checkReferer('POST'); + +$Controller = new ActionController(); +$Controller->doAction(); \ No newline at end of file diff --git a/inc/Plugins/Authenticator/js/plugin.js b/inc/Plugins/Authenticator/js/plugin.js index 50d094c8..7d11a866 100644 --- a/inc/Plugins/Authenticator/js/plugin.js +++ b/inc/Plugins/Authenticator/js/plugin.js @@ -27,18 +27,27 @@ sysPass.Plugin.Authenticator = function (Common) { var log = Common.log; var base = "/inc/Plugins/Authenticator"; - var twofa = function ($obj) { - log.info("Authenticator:twofa"); + var twofa = { + check: function ($obj) { + }, + save: function ($obj) { + log.info("Authenticator:twofa"); - var opts = Common.appRequests().getRequestOpts(); - opts.url = base + "/ajax/ajax_save.php"; - opts.data = $obj.serialize(); + var opts = Common.appRequests().getRequestOpts(); + opts.url = base + "/ajax/ajax_prefsSave.php"; + opts.data = $obj.serialize(); - Common.appRequests().getActionCall(opts, function (json) { - Common.msg.out(json); + Common.appRequests().getActionCall(opts, function (json) { + Common.msg.out(json); - Common.appActions().doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); - }); + if (json.status === 0) { + Common.appActions().doAction({ + actionId: $obj.data("nextaction-id"), + itemId: $obj.data("activetab") + }); + } + }); + } }; var init = function () { diff --git a/inc/Plugins/Authenticator/js/plugin.min.js b/inc/Plugins/Authenticator/js/plugin.min.js index 626a9fed..f05d2d56 100644 --- a/inc/Plugins/Authenticator/js/plugin.min.js +++ b/inc/Plugins/Authenticator/js/plugin.min.js @@ -1 +1 @@ -sysPass.Plugin.Authenticator=function(a){var d=a.log;return{twofa:function(c){d.info("Authenticator:twofa");var b=a.appRequests().getRequestOpts();b.url="/inc/Plugins/Authenticator/ajax/ajax_save.php";b.data=c.serialize();a.appRequests().getActionCall(b,function(b){a.msg.out(b);a.appActions().doAction({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})}}}; +sysPass.Plugin.Authenticator=function(a){var d=a.log;return{twofa:{check:function(a){},save:function(c){d.info("Authenticator:twofa");var b=a.appRequests().getRequestOpts();b.url="/inc/Plugins/Authenticator/ajax/ajax_prefsSave.php";b.data=c.serialize();a.appRequests().getActionCall(b,function(b){a.msg.out(b);0===b.status&&a.appActions().doAction({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})}}}}; diff --git a/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc b/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc index e6f286c4..838bd4b4 100644 --- a/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc +++ b/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc @@ -8,7 +8,7 @@
diff --git a/inc/SP/Controller/Grids.class.php b/inc/SP/Controller/Grids.class.php index af383171..d1f23299 100644 --- a/inc/SP/Controller/Grids.class.php +++ b/inc/SP/Controller/Grids.class.php @@ -954,6 +954,79 @@ class Grids implements ActionsInterface return $Grid; } + /** + * @return DataGridTab + * @throws \InvalidArgumentException + */ + public function getPluginsGrid() + { + // Grid Header + $GridHeaders = new DataGridHeader(); + $GridHeaders->addHeader(_('Plugin')); + $GridHeaders->addHeader(_('Estado')); + + // Grid Data + $GridData = new DataGridData(); + $GridData->setDataRowSourceId('plugin_id'); + $GridData->addDataRowSource('plugin_name'); + $GridData->addDataRowSourceWithIcon('plugin_enabled', $this->icons->getIconEnabled()); + $GridData->addDataRowSourceWithIcon('plugin_enabled', $this->icons->getIconDisabled(), 0); + + // Grid + $Grid = new DataGridTab(); + $Grid->setId('tblPlugins'); + $Grid->setDataRowTemplate('datagrid-rows', 'grid'); + $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid'); + $Grid->setHeader($GridHeaders); + $Grid->setData($GridData); + $Grid->setTitle(_('Plugins')); + $Grid->setTime(round(microtime() - $this->queryTimeStart, 5)); + + // Grid Actions + $GridActionSearch = new DataGridActionSearch(); + $GridActionSearch->setId(self::ACTION_MGM_PLUGINS_SEARCH); + $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM); + $GridActionSearch->setName('frmSearchPlugin'); + $GridActionSearch->setTitle(_('Buscar Plugin')); + $GridActionSearch->setOnSubmitFunction('appMgmt/search'); + + $Grid->setDataActions($GridActionSearch); + $Grid->setPager($this->getPager($GridActionSearch)); + + // Grid item's actions + $GridActionView = new DataGridAction(); + $GridActionView->setId(self::ACTION_MGM_PLUGINS_VIEW); + $GridActionView->setType(DataGridActionType::VIEW_ITEM); + $GridActionView->setName(_('Ver Plugin')); + $GridActionView->setTitle(_('Ver Plugin')); + $GridActionView->setIcon($this->icons->getIconView()); + $GridActionView->setOnClickFunction('appMgmt/show'); + + $Grid->setDataActions($GridActionView); + + $GridActionEnable= new DataGridAction(); + $GridActionEnable->setId(self::ACTION_MGM_PLUGINS_ENABLE); + $GridActionEnable->setName(_('Habilitar')); + $GridActionEnable->setTitle(_('Habilitar')); + $GridActionEnable->setIcon($this->icons->getIconEnabled()); + $GridActionEnable->setOnClickFunction('plugin/toggle'); + $GridActionEnable->setFilterRowSource('plugin_enabled', 1); + + $Grid->setDataActions($GridActionEnable); + + $GridActionDisable = new DataGridAction(); + $GridActionDisable->setId(self::ACTION_MGM_PLUGINS_DISABLE); + $GridActionDisable->setName(_('Deshabilitar')); + $GridActionDisable->setTitle(_('Deshabilitar')); + $GridActionDisable->setIcon($this->icons->getIconDisabled()); + $GridActionDisable->setOnClickFunction('plugin/toggle'); + $GridActionDisable->setFilterRowSource('plugin_enabled', 0); + + $Grid->setDataActions($GridActionDisable); + + return $Grid; + } + /** * @param boolean $filter */ diff --git a/inc/SP/Controller/ItemActionController.class.php b/inc/SP/Controller/ItemActionController.class.php index 78b9b279..eeb0227f 100644 --- a/inc/SP/Controller/ItemActionController.class.php +++ b/inc/SP/Controller/ItemActionController.class.php @@ -30,6 +30,7 @@ use SP\Core\ActionsInterface; use SP\Core\Session; use SP\Core\SessionUtil; use SP\DataModel\CustomFieldData; +use SP\DataModel\PluginData; use SP\DataModel\PublicLinkData; use SP\Forms\AccountForm; use SP\Forms\ApiTokenForm; @@ -49,6 +50,7 @@ use SP\Mgmt\CustomFields\CustomFieldDef; use SP\Mgmt\CustomFields\CustomFieldsUtil; use SP\Mgmt\Files\File; use SP\Mgmt\Groups\Group; +use SP\Mgmt\Plugins\Plugin; use SP\Mgmt\Profiles\Profile; use SP\Mgmt\PublicLinks\PublicLink; use SP\Mgmt\Tags\Tag; @@ -136,6 +138,10 @@ class ItemActionController implements ItemControllerInterface case ActionsInterface::ACTION_MGM_FILES_DELETE: $this->fileAction(); break; + case ActionsInterface::ACTION_MGM_PLUGINS_ENABLE: + case ActionsInterface::ACTION_MGM_PLUGINS_DISABLE: + $this->pluginAction(); + break; case ActionsInterface::ACTION_ACC_NEW: case ActionsInterface::ACTION_ACC_COPY: case ActionsInterface::ACTION_ACC_EDIT: @@ -637,4 +643,30 @@ class ItemActionController implements ItemControllerInterface $this->jsonResponse->addMessage(_('Revise el registro de eventos para más detalles')); } + + /** + * Acciones sobre plugins + */ + private function pluginAction() + { + $PluginData = new PluginData(); + $PluginData->setPluginId($this->itemId); + + switch ($this->actionId) { + case ActionsInterface::ACTION_MGM_PLUGINS_ENABLE: + $PluginData->setPluginEnabled(1); + Plugin::getItem($PluginData)->toggle(); + + $this->jsonResponse->setDescription(_('Plugin habilitado')); + break; + case ActionsInterface::ACTION_MGM_PLUGINS_DISABLE: + $PluginData->setPluginEnabled(0); + Plugin::getItem($PluginData)->toggle(); + + $this->jsonResponse->setDescription(_('Plugin deshabilitado')); + break; + } + + $this->jsonResponse->setStatus(0); + } } \ No newline at end of file diff --git a/inc/SP/Controller/ItemListController.class.php b/inc/SP/Controller/ItemListController.class.php index 8310dc12..0baaac86 100644 --- a/inc/SP/Controller/ItemListController.class.php +++ b/inc/SP/Controller/ItemListController.class.php @@ -39,6 +39,7 @@ use SP\Mgmt\CustomFields\CustomFieldDefSearch; use SP\Mgmt\Files\FileSearch; use SP\Mgmt\Files\FileUtil; use SP\Mgmt\Groups\GroupSearch; +use SP\Mgmt\Plugins\PluginSearch; use SP\Mgmt\Profiles\ProfileSearch; use SP\Mgmt\PublicLinks\PublicLinkSearch; use SP\Core\Template; @@ -110,6 +111,7 @@ class ItemListController extends GridTabControllerBase implements ActionsInterfa $this->getFiles(); $this->getAccounts(); $this->getTags(); + $this->getPluginsList(); $this->EventDispatcher->notifyEvent('show.itemlist.accounts', $this); } elseif ($type === self::TYPE_ACCESSES) { @@ -350,4 +352,24 @@ class ItemListController extends GridTabControllerBase implements ActionsInterfa $this->view->append('tabs', $Grid); } + + /** + * Obtener los datos para la pestaña de tokens de API + * + * @throws \InvalidArgumentException + */ + public function getPluginsList() + { + $this->setAction(self::ACTION_MGM_PLUGINS); + + if (!$this->checkAccess()) { + return; + } + + $Grid = $this->Grids->getPluginsGrid(); + $Grid->getData()->setData(PluginSearch::getItem()->getMgmtSearch($this->ItemSearchData)); + $Grid->updatePager(); + + $this->view->append('tabs', $Grid); + } } \ No newline at end of file diff --git a/inc/SP/Controller/ItemSearchController.class.php b/inc/SP/Controller/ItemSearchController.class.php index d36ef5ed..4999eb57 100644 --- a/inc/SP/Controller/ItemSearchController.class.php +++ b/inc/SP/Controller/ItemSearchController.class.php @@ -40,6 +40,7 @@ use SP\Mgmt\Customers\CustomerSearch; use SP\Mgmt\CustomFields\CustomFieldDefSearch; use SP\Mgmt\Files\FileSearch; use SP\Mgmt\Groups\GroupSearch; +use SP\Mgmt\Plugins\PluginSearch; use SP\Mgmt\Profiles\ProfileSearch; use SP\Mgmt\PublicLinks\PublicLinkSearch; use SP\Mgmt\Tags\TagSearch; @@ -79,9 +80,9 @@ class ItemSearchController extends GridItemsSearchController implements ActionsI /** * Realizar la acción solicitada en la la petición HTTP * - * @throws \SP\Core\Exceptions\SPException + * @param mixed $type Tipo de acción */ - public function doAction() + public function doAction($type = null) { $this->view->assign('isDemo', Checks::demoIsEnabled()); $this->view->assign('sk', SessionUtil::getSessionKey(true)); @@ -122,6 +123,9 @@ class ItemSearchController extends GridItemsSearchController implements ActionsI case ActionsInterface::ACTION_MGM_TAGS_SEARCH: $this->getTags(); break; + case ActionsInterface::ACTION_MGM_PLUGINS_SEARCH: + $this->getPlugins(); + break; default: $this->invalidAction(); } @@ -432,6 +436,33 @@ class ItemSearchController extends GridItemsSearchController implements ActionsI $this->jsonResponse->setStatus(0); } + /** + * Obtener los plugins de una búsqueda + * + * @throws \InvalidArgumentException + */ + public function getPlugins() + { + $this->setAction(self::ACTION_MGM_PLUGINS_SEARCH); + + if (!$this->checkAccess()) { + return; + } + + $this->view->addTemplate('datagrid-table', 'grid'); + + $Grid = $this->grids->getPluginsGrid(); + $Grid->getData()->setData(PluginSearch::getItem()->getMgmtSearch($this->ItemSearchData)); + $Grid->updatePager(); + + $this->updatePager($Grid->getPager(), $this->ItemSearchData); + + $this->view->assign('data', $Grid); + $this->view->assign('actionId', self::ACTION_MGM); + + $this->jsonResponse->setStatus(0); + } + /** * Establecer las propiedades de búsqueda */ diff --git a/inc/SP/Controller/ItemShowController.class.php b/inc/SP/Controller/ItemShowController.class.php index 6f7f7898..465be50e 100644 --- a/inc/SP/Controller/ItemShowController.class.php +++ b/inc/SP/Controller/ItemShowController.class.php @@ -35,6 +35,7 @@ use SP\Core\ActionsInterface; use SP\Core\Crypt; use SP\Core\Exceptions\ItemException; use SP\Core\Init; +use SP\Core\Plugin\PluginUtil; use SP\Core\Session; use SP\Core\SessionUtil; use SP\Core\Template; @@ -44,6 +45,7 @@ use SP\DataModel\CustomerData; use SP\DataModel\CustomFieldData; use SP\DataModel\CustomFieldDefData; use SP\DataModel\GroupData; +use SP\DataModel\PluginData; use SP\DataModel\ProfileData; use SP\DataModel\TagData; use SP\DataModel\UserData; @@ -57,6 +59,7 @@ use SP\Mgmt\CustomFields\CustomFieldDef; use SP\Mgmt\CustomFields\CustomFieldTypes; use SP\Mgmt\Files\FileUtil; use SP\Mgmt\Groups\GroupUsers; +use SP\Mgmt\Plugins\Plugin; use SP\Mgmt\PublicLinks\PublicLink; use SP\Mgmt\Groups\Group; use SP\Mgmt\Profiles\Profile; @@ -122,9 +125,9 @@ class ItemShowController extends ControllerBase implements ActionsInterface, Ite /** * Realizar la acción solicitada en la la petición HTTP * - * @throws \SP\Core\Exceptions\SPException + * @param mixed $type Tipo de acción */ - public function doAction() + public function doAction($type = null) { try { switch ($this->actionId) { @@ -235,6 +238,11 @@ class ItemShowController extends ControllerBase implements ActionsInterface, Ite $this->view->assign('header', _('Clave de Cuenta')); $this->getAccountPass(); break; + case self::ACTION_MGM_PLUGINS_VIEW: + $this->view->assign('header', _('Detalles de Plugin')); + $this->view->assign('isView', true); + $this->getPlugin(); + break; default: $this->invalidAction(); } @@ -536,4 +544,21 @@ class ItemShowController extends ControllerBase implements ActionsInterface, Ite $this->jsonResponse->setCsrf($this->view->sk); $this->jsonResponse->setData($data); } + + /** + * Obtener los datos para la vista de plugins + */ + private function getPlugin() + { + $this->module = self::ACTION_MGM_PLUGINS; + $this->view->addTemplate('plugins'); + + $Plugin = Plugin::getItem()->getById($this->itemId); + + $this->view->assign('isReadonly', $this->view->isView ? 'readonly' : ''); + $this->view->assign('plugin', $Plugin); + $this->view->assign('pluginInfo', PluginUtil::getPluginInfo($Plugin->getPluginName())); + + $this->jsonResponse->setStatus(0); + } } \ No newline at end of file diff --git a/inc/SP/Controller/UserPreferencesController.class.php b/inc/SP/Controller/UserPreferencesController.class.php index ffa91726..ce7148ab 100644 --- a/inc/SP/Controller/UserPreferencesController.class.php +++ b/inc/SP/Controller/UserPreferencesController.class.php @@ -69,26 +69,6 @@ class UserPreferencesController extends TabControllerBase implements ActionsInte $this->userPrefs = UserPreferences::getItem()->getById($this->userId); } - /** - * Obtener la pestaña de seguridad - */ - public function getSecurityTab() - { - $this->setAction(self::ACTION_USR_PREFERENCES_SECURITY); - - $this->view->addTemplate('preferences-security'); - - $twoFa = new Authenticator($this->userId, Session::getUserData()->getUserLogin()); - - $this->view->assign('qrCode', !$this->userPrefs->isUse2Fa() ? $twoFa->getUserQRCode(): ''); - $this->view->assign('userId', $this->userId); - $this->view->assign('chk2FAEnabled', $this->userPrefs->isUse2Fa()); - - $this->view->append('tabs', ['title' => _('Seguridad')]); - $this->view->assign('tabIndex', $this->getTabIndex(), 'security'); - $this->view->assign('actionId', $this->getAction(), 'security'); - } - /** * Obtener la pestaña de preferencias */ @@ -123,6 +103,7 @@ class UserPreferencesController extends TabControllerBase implements ActionsInte $this->view->addTemplate('tabs-start', 'common'); $this->getPreferencesTab(); + $this->EventDispatcher->notifyEvent('show.preferences', $this); $this->view->addTemplate('tabs-end', 'common'); diff --git a/inc/SP/Core/ActionsInterface.class.php b/inc/SP/Core/ActionsInterface.class.php index 73055e3e..27fef62b 100644 --- a/inc/SP/Core/ActionsInterface.class.php +++ b/inc/SP/Core/ActionsInterface.class.php @@ -103,6 +103,12 @@ interface ActionsInterface const ACTION_MGM_TAGS_EDIT = 682; const ACTION_MGM_TAGS_DELETE = 683; const ACTION_MGM_TAGS_SEARCH = 685; + const ACTION_MGM_PLUGINS = 69; + const ACTION_MGM_PLUGINS_NEW = 690; + const ACTION_MGM_PLUGINS_VIEW = 691; + const ACTION_MGM_PLUGINS_SEARCH = 695; + const ACTION_MGM_PLUGINS_ENABLE= 696; + const ACTION_MGM_PLUGINS_DISABLE= 697; const ACTION_USR = 70; const ACTION_USR_USERS = 71; const ACTION_USR_USERS_VIEW = 710; diff --git a/inc/SP/Core/Plugin/PluginBase.class.php b/inc/SP/Core/Plugin/PluginBase.class.php index 825a8f09..abf859cf 100644 --- a/inc/SP/Core/Plugin/PluginBase.class.php +++ b/inc/SP/Core/Plugin/PluginBase.class.php @@ -46,7 +46,7 @@ abstract class PluginBase implements PluginInterface */ protected $themeDir; /** - * @var string + * @var mixed */ protected $data; @@ -93,7 +93,7 @@ abstract class PluginBase implements PluginInterface } /** - * @return string + * @return mixed */ public function getData() { @@ -101,7 +101,7 @@ abstract class PluginBase implements PluginInterface } /** - * @param string $data + * @param mixed $data */ public function setData($data) { diff --git a/inc/SP/Core/Plugin/PluginUtil.class.php b/inc/SP/Core/Plugin/PluginUtil.class.php index 5ad45928..62c6e110 100644 --- a/inc/SP/Core/Plugin/PluginUtil.class.php +++ b/inc/SP/Core/Plugin/PluginUtil.class.php @@ -153,4 +153,71 @@ class PluginUtil { return self::$disabledPlugins; } + + /** + * Obtener la información de un plugin + * + * @param string $name Nombre del plugin + * @return bool|PluginInterface + */ + public static function getPluginInfo($name) + { + $name = ucfirst($name); + + $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin'; + + if (isset(self::$loadedPlugins[$name])) { + return self::$loadedPlugins[$name]; + } + + try { + $Reflection = new \ReflectionClass($pluginClass); + + /** @var PluginBase $Plugin */ + $Plugin = $Reflection->newInstance(); + + self::$loadedPlugins[$name] = $Plugin; + + return $Plugin; + } catch (\ReflectionException $e) { + Log::writeNewLog(__FUNCTION__, sprintf(_('No es posible cargar el plugin "%s"'), $name)); + } + + return false; + } + + /** + * Obtener los datos de un plugin + * + * @param string $name Nombre del plugin + * @return bool|PluginInterface + */ + public static function getPluginData($name) + { + $name = ucfirst($name); + + $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin'; + + if (isset(self::$loadedPlugins[$name])) { + return self::$loadedPlugins[$name]; + } + + try { + $PluginData = self::getDataFromDb($name); + + $Reflection = new \ReflectionClass($pluginClass); + + /** @var PluginBase $Plugin */ + $Plugin = $Reflection->newInstance(); + $Plugin->setData(unserialize($PluginData->getPluginData())); + + self::$loadedPlugins[$name] = $Plugin; + + return $Plugin; + } catch (\ReflectionException $e) { + Log::writeNewLog(__FUNCTION__, sprintf(_('No es posible cargar el plugin "%s"'), $name)); + } + + return false; + } } \ No newline at end of file diff --git a/inc/SP/Core/UI/ThemeIconsBase.class.php b/inc/SP/Core/UI/ThemeIconsBase.class.php index cf9c0e42..657d680b 100644 --- a/inc/SP/Core/UI/ThemeIconsBase.class.php +++ b/inc/SP/Core/UI/ThemeIconsBase.class.php @@ -64,6 +64,8 @@ abstract class ThemeIconsBase implements ThemeIconsInterface /** @var FontIcon|ImageIcon */ protected $iconDisabled; /** @var FontIcon|ImageIcon */ + protected $iconEnabled; + /** @var FontIcon|ImageIcon */ protected $iconViewPass; /** @var FontIcon|ImageIcon */ protected $iconCopy; @@ -481,4 +483,20 @@ abstract class ThemeIconsBase implements ThemeIconsInterface { $this->iconCritical = $iconCritical; } + + /** + * @return FontIcon|ImageIcon + */ + public function getIconEnabled() + { + return $this->iconEnabled; + } + + /** + * @param FontIcon|ImageIcon $iconEnabled + */ + public function setIconEnabled($iconEnabled) + { + $this->iconEnabled = $iconEnabled; + } } \ No newline at end of file diff --git a/inc/SP/Html/DataGrid/DataGridActionBase.class.php b/inc/SP/Html/DataGrid/DataGridActionBase.class.php index 8c51b1b8..ca5cbf29 100644 --- a/inc/SP/Html/DataGrid/DataGridActionBase.class.php +++ b/inc/SP/Html/DataGrid/DataGridActionBase.class.php @@ -89,7 +89,7 @@ abstract class DataGridActionBase implements DataGridActionInterface * * @var string */ - protected $_filterRowSource = ''; + protected $_filterRowSource; /** * Si es una acción de ayuda * @@ -302,12 +302,15 @@ abstract class DataGridActionBase implements DataGridActionInterface } /** + * Filtro para mostrar la acción + * * @param $rowSource string + * @param mixed $value Valor a filtrar * @return $this */ - public function setFilterRowSource($rowSource) + public function setFilterRowSource($rowSource, $value = 1) { - $this->_filterRowSource = $rowSource; + $this->_filterRowSource = ['field' => $rowSource, 'value' => $value]; return $this; } diff --git a/inc/SP/Html/DataGrid/DataGridActionInterface.class.php b/inc/SP/Html/DataGrid/DataGridActionInterface.class.php index 5554fbe7..5db95793 100644 --- a/inc/SP/Html/DataGrid/DataGridActionInterface.class.php +++ b/inc/SP/Html/DataGrid/DataGridActionInterface.class.php @@ -113,8 +113,10 @@ interface DataGridActionInterface /** * @param $rowSource string + * @param mixed $value Valor a filtrar + * @return */ - public function setFilterRowSource($rowSource); + public function setFilterRowSource($rowSource, $value = 1); /** * @return string @@ -151,4 +153,20 @@ interface DataGridActionInterface * @param mixed $data Los datos del atributo */ public function addData($name, $data); + + /** + * Devolver el método reflexivo que determina si se muestra la acción + * + * @return \ReflectionMethod + */ + public function getReflectionFilter(); + + /** + * Establecer el método reflexivo que determina si se muestra la acción + * + * @param string $class + * @param string $method + * @return $this + */ + public function setReflectionFilter($class, $method); } \ No newline at end of file diff --git a/inc/SP/Html/DataGrid/DataGridDataBase.class.php b/inc/SP/Html/DataGrid/DataGridDataBase.class.php index 95917faa..6a01fb2f 100644 --- a/inc/SP/Html/DataGrid/DataGridDataBase.class.php +++ b/inc/SP/Html/DataGrid/DataGridDataBase.class.php @@ -123,12 +123,13 @@ abstract class DataGridDataBase implements DataGridDataInterface } /** - * @param string $source + * @param string $source * @param IconInterface $icon + * @param mixed $value Valor para mostrar el icono */ - public function addDataRowSourceWithIcon($source, IconInterface $icon) + public function addDataRowSourceWithIcon($source, IconInterface $icon, $value = 1) { - $this->_sourcesWithIcon[] = array($source, $icon); + $this->_sourcesWithIcon[] = ['field' => $source, 'icon' => $icon, 'value' => $value]; } /** diff --git a/inc/SP/Html/DataGrid/DataGridDataInterface.class.php b/inc/SP/Html/DataGrid/DataGridDataInterface.class.php index 7ce50467..4147b08b 100644 --- a/inc/SP/Html/DataGrid/DataGridDataInterface.class.php +++ b/inc/SP/Html/DataGrid/DataGridDataInterface.class.php @@ -83,8 +83,10 @@ interface DataGridDataInterface * * @param $source string * @param $icon IconInterface + * @param mixed $value Valor para mostrar el icono + * @return */ - public function addDataRowSourceWithIcon($source, IconInterface $icon); + public function addDataRowSourceWithIcon($source, IconInterface $icon, $value = 1); /** * Devolver los orígenes de datos que se muestran con iconos diff --git a/inc/SP/Mgmt/Plugins/Plugin.class.php b/inc/SP/Mgmt/Plugins/Plugin.class.php index db896c41..0f48d7ad 100644 --- a/inc/SP/Mgmt/Plugins/Plugin.class.php +++ b/inc/SP/Mgmt/Plugins/Plugin.class.php @@ -141,12 +141,12 @@ class Plugin extends PluginBase implements ItemInterface * Devuelve los datos de un plugin por su id * * @param $id int - * @return mixed + * @return bool|PluginData */ public function getById($id) { $query = /** @lang SQL */ - 'SELECT plugin_id, plugin_name, plugin_enabled FROM plugins WHERE plugin_id = ? LIMIT 1'; + 'SELECT plugin_id, plugin_name, plugin_data, BIN(plugin_enabled) AS plugin_enabled FROM plugins WHERE plugin_id = ? LIMIT 1'; $Data = new QueryData(); $Data->setMapClassName($this->getDataModel()); @@ -164,7 +164,7 @@ class Plugin extends PluginBase implements ItemInterface public function getAll() { $query = /** @lang SQL */ - 'SELECT plugin_id, plugin_name, plugin_enabled FROM plugins ORDER BY plugin_name'; + 'SELECT plugin_id, plugin_name, BIN(plugin_enabled) AS plugin_enabled FROM plugins ORDER BY plugin_name'; $Data = new QueryData(); $Data->setMapClassName($this->getDataModel()); @@ -207,7 +207,7 @@ class Plugin extends PluginBase implements ItemInterface public function getByName($name) { $query = /** @lang SQL */ - 'SELECT plugin_id, plugin_name, plugin_enabled FROM plugins WHERE plugin_name = ? LIMIT 1'; + 'SELECT plugin_id, plugin_name, plugin_data, BIN(plugin_enabled) AS plugin_enabled FROM plugins WHERE plugin_name = ? LIMIT 1'; $Data = new QueryData(); $Data->setMapClassName($this->getDataModel()); @@ -216,4 +216,36 @@ class Plugin extends PluginBase implements ItemInterface return DB::getResults($Data); } + + /** + * Cambiar el estado del plugin + * + * @return $this + * @throws SPException + */ + public function toggle() + { + $query = /** @lang SQL */ + 'UPDATE plugins + SET plugin_enabled = ? + WHERE plugin_id = ? LIMIT 1'; + + $Data = new QueryData(); + $Data->setQuery($query); + $Data->addParam($this->itemData->getPluginEnabled()); + $Data->addParam($this->itemData->getPluginId()); + + if (DB::getQuery($Data) === false) { + throw new SPException(SPException::SP_CRITICAL, _('Error al actualizar el plugin')); + } + + $Log = new Log(_('Modificar Plugin')); + $Log->addDetails(Html::strongText(_('Plugin')), $this->itemData->getPluginName()); + $Log->addDetails(Html::strongText(_('Estado')), $this->itemData->getPluginEnabled() === 1 ? _('Habilitado') : _('Deshabilitado')); + $Log->writeLog(); + + Email::sendEmail($Log); + + return $this; + } } \ No newline at end of file diff --git a/inc/SP/Mgmt/Plugins/PluginSearch.class.php b/inc/SP/Mgmt/Plugins/PluginSearch.class.php index 8b313eea..05d24405 100644 --- a/inc/SP/Mgmt/Plugins/PluginSearch.class.php +++ b/inc/SP/Mgmt/Plugins/PluginSearch.class.php @@ -45,7 +45,7 @@ class PluginSearch extends PluginBase implements ItemSearchInterface public function getMgmtSearch(ItemSearchData $SearchData) { $Data = new QueryData(); - $Data->setSelect('plugin_id, plugin_name, plugin_enabled'); + $Data->setSelect('plugin_id, plugin_name, BIN(plugin_enabled) AS plugin_enabled'); $Data->setFrom('plugins'); $Data->setOrder('plugin_name'); @@ -54,7 +54,6 @@ class PluginSearch extends PluginBase implements ItemSearchInterface $search = '%' . $SearchData->getSeachString() . '%'; $Data->addParam($search); - $Data->addParam($search); } $Data->setLimit('?,?'); diff --git a/inc/SP/Util/ArrayUtil.class.php b/inc/SP/Util/ArrayUtil.class.php new file mode 100644 index 00000000..4c297382 --- /dev/null +++ b/inc/SP/Util/ArrayUtil.class.php @@ -0,0 +1,54 @@ +. + * + */ + +namespace SP\Util; + +/** + * Class ArrayUtil + * + * @package SP\Util + */ +class ArrayUtil +{ + /** + * Buscar un objeto en un array según el valor de una propiedad + * + * @param array $array + * @param string $property Nombre de la propiedad + * @param string $value Valor de la propiedad + * @param object $default Valor por defecto + * @return false|object + */ + public static function searchInObject(array &$array, $property, $value, $default = null) + { + foreach($array as $object) { + if ($value == $object->$property) { + return $object; + } + } + + return null !== $default ? $default : false; + } +} \ No newline at end of file diff --git a/inc/sql/1.3.16011001.sql b/inc/sql/1.3.16011001.sql index 391880eb..1e32ef26 100644 --- a/inc/sql/1.3.16011001.sql +++ b/inc/sql/1.3.16011001.sql @@ -1,7 +1,7 @@ -- To 1.3.16011001 CREATE TABLE `publicLinks` ( - publicLink_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, - publicLink_itemId INT, + publicLink_id INT UNSIGNEDPRIMARY KEY NOT NULL AUTO_INCREMENT, + publicLink_itemId INT UNSIGNED, publicLink_hash VARBINARY(100) NOT NULL, publicLink_linkData LONGBLOB ); diff --git a/inc/sql/1.3.16100601.sql b/inc/sql/1.3.16100601.sql index 50c91a87..c5843d68 100644 --- a/inc/sql/1.3.16100601.sql +++ b/inc/sql/1.3.16100601.sql @@ -352,7 +352,7 @@ ALTER TABLE `categories` ADD COLUMN `category_hash` VARBINARY(40) NOT NULL DEFAULT 0 AFTER `category_description`; CREATE TABLE `plugins` ( - `plugin_id` INT UNSIGNED NOT NULL, + `plugin_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `plugin_name` VARCHAR(100) NOT NULL, `plugin_data` VARBINARY(5000) NULL, `plugin_enabled` BIT(1) NOT NULL DEFAULT b'0', diff --git a/inc/sql/dbstructure.sql b/inc/sql/dbstructure.sql index b97f11f8..cfd85652 100644 --- a/inc/sql/dbstructure.sql +++ b/inc/sql/dbstructure.sql @@ -298,7 +298,7 @@ DROP TABLE IF EXISTS `log`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `log` ( - `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `log_id` int unsigned NOT NULL AUTO_INCREMENT, `log_date` int(10) unsigned NOT NULL, `log_login` varchar(25) NOT NULL, `log_userId` smallint(5) unsigned NOT NULL, @@ -315,8 +315,8 @@ DROP TABLE IF EXISTS `publicLinks`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `publicLinks` ( - `publicLink_id` int(11) NOT NULL AUTO_INCREMENT, - `publicLink_itemId` int(11) DEFAULT NULL, + `publicLink_id` int UNSIGNED NOT NULL AUTO_INCREMENT, + `publicLink_itemId` int UNSIGNED DEFAULT NULL, `publicLink_hash` varbinary(100) NOT NULL, `publicLink_linkData` longblob, PRIMARY KEY (`publicLink_id`), @@ -331,7 +331,7 @@ DROP TABLE IF EXISTS `tags`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `tags` ( - `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `tag_id` int unsigned NOT NULL AUTO_INCREMENT, `tag_name` varchar(45) NOT NULL, `tag_hash` binary(40) NOT NULL, PRIMARY KEY (`tag_id`), @@ -344,10 +344,10 @@ DROP TABLE IF EXISTS `usrPassRecover`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `usrPassRecover` ( - `userpassr_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userpassr_id` int unsigned NOT NULL AUTO_INCREMENT, `userpassr_userId` smallint(5) unsigned NOT NULL, `userpassr_hash` varbinary(40) NOT NULL, - `userpassr_date` int(10) unsigned NOT NULL, + `userpassr_date` int unsigned NOT NULL, `userpassr_used` bit(1) DEFAULT b'0', PRIMARY KEY (`userpassr_id`), KEY `IDX_userId` (`userpassr_userId`,`userpassr_date`), @@ -372,7 +372,7 @@ DROP TABLE IF EXISTS `plugins`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `plugins` ( - `plugin_id` INT UNSIGNED NOT NULL, + `plugin_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `plugin_name` VARCHAR(100) NOT NULL, `plugin_data` VARBINARY(5000) NULL, `plugin_enabled` BIT(1) NOT NULL DEFAULT b'0', diff --git a/inc/themes/material-blue/css/selectize.bootstrap3.min.css b/inc/themes/material-blue/css/selectize.bootstrap3.min.css index 0607585c..add199aa 100644 --- a/inc/themes/material-blue/css/selectize.bootstrap3.min.css +++ b/inc/themes/material-blue/css/selectize.bootstrap3.min.css @@ -1 +1 @@ -.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible !important;background:#f2f2f2 !important;background:rgba(0,0,0,0.06) !important;border:0 none !important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);box-shadow:0 2px 5px rgba(0,0,0,0.2)}.selectize-dropdown-header{position:relative;padding:3px 12px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-dropdown-header-close{position:absolute;right:12px;top:50%;color:#333;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px !important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px !important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:bold;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:1px 0 0 0;border-left:1px solid rgba(0,0,0,0);-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,0.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:rgba(0,0,0,0)}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:0}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:rgba(77,77,77,0)}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#333;line-height:20px;-webkit-font-smoothing:inherit}.selectize-control.single{display:inline-block}.selectize-input,.selectize-control.single .selectize-input.input-active{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #ccc;padding:6px 12px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-input.has-items{color:#5c6bc0;font-size:1.3em}.selectize-control.multi .selectize-input.has-items{padding:5px 12px 2px}.selectize-input.full,.selectize-input.not-full{background-color:#f2f2f2}.selectize-input.disabled,.selectize-input.disabled *{cursor:default !important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.15)}.selectize-input.dropdown-active{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:1px 3px;background:#5c6bc0;color:#fff;border:0 solid rgba(0,0,0,0)}.selectize-control.multi .selectize-input>div.active{background:#607d8b;color:#fff;border:0 solid rgba(0,0,0,0)}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:gray;background:#fff;border:0 solid rgba(77,77,77,0)}.selectize-input>input{display:inline-block !important;padding:0 !important;min-height:0 !important;max-height:none !important;max-width:100% !important;margin:0 !important;text-indent:0 !important;border:0 none !important;background:none !important;line-height:inherit !important;-webkit-user-select:auto !important;-webkit-box-shadow:none !important;box-shadow:none !important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:none !important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#fff;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(255,237,40,0.4);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown [data-selectable],.selectize-dropdown .optgroup-header{padding:3px 12px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#777;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#5c6bc0;color:#fff}.selectize-dropdown .active.create{color:#262626}.selectize-dropdown .create{color:rgba(51,51,51,0.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:17px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#333 transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent #333 transparent}.selectize-control.rtl.single .selectize-input:after{left:17px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px !important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fff}.selectize-dropdown,.selectize-dropdown.form-control{height:auto;padding:0;margin:2px 0 0 0;z-index:1000;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.selectize-dropdown .optgroup-header{font-size:12px;line-height:1.42857143}.selectize-dropdown .optgroup:first-child:before{display:none}.selectize-dropdown .optgroup:before{content:' ';display:block;height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5;margin-left:-12px;margin-right:-12px}.selectize-dropdown-content{padding:5px 0}.selectize-dropdown-header{padding:6px 12px}.selectize-input{min-height:34px}.selectize-input.dropdown-active{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-input.dropdown-active::before{display:none}.selectize-input.focus{border-color:#607d8b;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px rgba(96,125,139,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px rgba(96,125,139,0.6)}.has-error .selectize-input{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .selectize-input:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.selectize-control.multi .selectize-input.has-items{padding-left:9px;padding-right:9px}.selectize-control.multi .selectize-input>div{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.form-control.selectize-control{padding:0;height:auto;border:0;background:0;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} \ No newline at end of file +.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,0.06)!important;border:0 none!important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);box-shadow:0 2px 5px rgba(0,0,0,0.2)}.selectize-dropdown-header{position:relative;padding:3px 12px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-dropdown-header-close{position:absolute;right:12px;top:50%;color:#333;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:bold;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:1px 0 0 0;border-left:1px solid rgba(0,0,0,0);-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,0.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:rgba(0,0,0,0)}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:0}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:rgba(77,77,77,0)}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#333;line-height:20px;-webkit-font-smoothing:inherit}.selectize-control.single{display:inline-block}.selectize-input,.selectize-control.single .selectize-input.input-active{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #ccc;padding:6px 12px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-input.has-items{color:#5c6bc0;font-size:1.3em}.selectize-control.multi .selectize-input.has-items{padding:5px 12px 2px}.selectize-input.full,.selectize-input.not-full{background-color:#f2f2f2}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.15)}.selectize-input.dropdown-active{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:1px 3px;background:#5c6bc0;color:#fff;border:0 solid rgba(0,0,0,0)}.selectize-control.multi .selectize-input>div.active{background:#607d8b;color:#fff;border:0 solid rgba(0,0,0,0)}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#808080;background:#fff;border:0 solid rgba(77,77,77,0)}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0!important;text-indent:0!important;border:0 none!important;background:none!important;line-height:inherit!important;-webkit-user-select:auto!important;-webkit-box-shadow:none!important;box-shadow:none!important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:none!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#fff;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1);-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(255,237,40,0.4);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown [data-selectable],.selectize-dropdown .optgroup-header{padding:3px 12px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#777;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#5c6bc0;color:#fff}.selectize-dropdown .active.create{color:#262626}.selectize-dropdown .create{color:rgba(51,51,51,0.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:17px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#333 transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent #333 transparent}.selectize-control.rtl.single .selectize-input:after{left:17px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fff}.selectize-dropdown,.selectize-dropdown.form-control{height:auto;padding:0;margin:2px 0 0 0;z-index:1000;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.selectize-dropdown .optgroup-header{font-size:12px;line-height:1.42857143}.selectize-dropdown .optgroup:first-child:before{display:none}.selectize-dropdown .optgroup:before{content:' ';display:block;height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5;margin-left:-12px;margin-right:-12px}.selectize-dropdown-content{padding:5px 0}.selectize-dropdown-header{padding:6px 12px}.selectize-input{min-height:34px}.selectize-input.dropdown-active{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.selectize-input.dropdown-active::before{display:none}.selectize-input.focus{border-color:#607d8b;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px rgba(96,125,139,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px rgba(96,125,139,0.6)}.has-error .selectize-input{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .selectize-input:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.selectize-control.multi .selectize-input.has-items{padding-left:9px;padding-right:9px}.selectize-control.multi .selectize-input>div{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.form-control.selectize-control{padding:0;height:auto;border:0;background:0;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} \ No newline at end of file diff --git a/inc/themes/material-blue/css/styles.min.css b/inc/themes/material-blue/css/styles.min.css index 672b9ecf..d328e7ff 100644 --- a/inc/themes/material-blue/css/styles.min.css +++ b/inc/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;resize:none}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);border-radius:5px;display:none}#container{margin:auto;width:100%}#container.login{margin-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{min-height:0;margin:0}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;font-weight:bold;border-right:1px solid #d9d9d9;color:#555}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content #resBuscar{margin-bottom:50px}#content #resBuscar img{vertical-align:middle}#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 .data{width:100%;padding:10px;border:1px solid #c9c9c9;margin:0 auto;background-color:#f9f9f9}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>table{display:none;width:100%}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right;font-size:12px;font-weight:bold;color:#999}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#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}#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;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#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-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 #data-search .account-info img,#content #data-search .account-actions img{width:24px;height:24px;margin:0 .5em}#content .rowSpace>.cellBorder{height:10px;border-top:1px solid #d9d9d9}#content .rowSpace>.cellBlank{height:10px}#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 1em}#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 #tabs.ui-widget-content{border:0;background-color:transparent}#content #tabs .ui-widget-header{background:0;border:0;border-bottom:1px solid #c9c9c9}#content #tabs.ui-widget-content{background:none !important}#content #tabs .tabs-spacer{float:left;height:200px}#content .tabs-bottom .ui-tabs-nav{clear:left;padding:0 .2em .2em .2em}#content .tabs-bottom .ui-tabs-nav li{top:auto;bottom:0;margin:0 .2em 1px 0;border-top:0}#content .tabs-bottom .ui-tabs-nav li.ui-tabs-active{margin-top:-1px;padding-top:1px}#box-popup{min-width:25em;max-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{min-width:30em;max-width:35em}#box-popup>h2{width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0 0 1em 0;padding:.5em 0;line-height:1em}#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}#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}#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{min-width:400px;border:0;text-align:left;margin:0 .5em}.popup-data .descField{min-width:100px;font-weight:bold}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;box-shadow:0 -8px 6px -6px #c9c9c9;-webkit-box-shadow:0 -8px 6px -6px #c9c9c9;-moz-box-shadow:0 -8px 6px -6px #c9c9c9;display:flex;justify-content:space-between}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}#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}.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 #a9a9a9;-moz-box-shadow:2px 2px 3px -3px #a9a9a9;box-shadow:1px 1px 2px #d9d9d9}.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{margin-left:.5em}.fullWidth{max-width:100% !important}.filter-on{color:#26a69a;background-color:#b2dfdb;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:#b2dfdb;border:1px solid #26a69a;font-weight:bold}.passLevel.strongest:hover{color:#26a69a;background-color:#b2dfdb;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:#ffcdd2;border:1px solid #ef5350;font-weight:bold}.passLevel.weak:hover{color:#ef5350;background-color:#ffcdd2;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:#b2dfdb}.help-box{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:#ffcdd2;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:40%;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:5px;padding:.5em}#actions ul.errors>li.error-critical{color:#ef5350;background-color:#ffcdd2;border:1px solid #ef5350}#actions ul.errors>li.error-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#actions ul.errors>li.error-ok{color:#26a69a;background-color:#b2dfdb;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}#whatsNewIcon{text-align:center}#whatsNewIcon img{width:64px;height:64px}#whatsNewIcon h2{display:inline-block;color:#555;font-size:16px}#whatsNew{width:500px;background-color:#fffde1;padding:2em;line-height:1.5em;font-size:16px;color:#555;border:1px solid #d9d9d9;margin:0 auto 3em;display:none}#whatsNew ul{padding:0;border:0}#whatsNew li{padding-left:37px;line-height:32px;list-style:none}.help-box{display:none}.center{text-align:center !important}.right{text-align:right !important}.left{text-align:left !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 #boxLogin{position:relative;margin:11em auto 0 auto;width:100%;min-height:12em;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 #boxButton{position:absolute;top:2em;right:2em}#login-container #boxLogin #boxActions{position:absolute;bottom:1em;right:1em;width:100%;padding:.5em;text-align:right}#login-container #boxLogin #boxActions a{color:#c9c9c9}#login-container #boxLogout{width:250px;margin:8em auto 0 auto;font-size:14px;text-align:center;padding:.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#login-container #boxUpdated{width:350px;margin:5em auto 5em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#b2dfdb;border:1px solid #26a69a}@media screen and (max-width:1000px){#content #searchbox{position:relative;left:0;width:100%}#content #searchbox form{flex-wrap:wrap}#content #searchbox form>div{width:100%}#content #searchbox input[type=text]{width:100%}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}} \ 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;resize:none}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);border-radius:5px;display:none}#container{margin:auto;width:100%}#container.login{margin-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{min-height:0;margin:0}#content td.descField,#box-popup td.descField{text-align:right;padding-right:20px;width:25%;font-weight:bold;border-right:1px solid #d9d9d9;color:#555}#content td.valField,#box-popup td.valField{padding-left:1em;width:100%}#content #resBuscar{margin-bottom:50px}#content #resBuscar img{vertical-align:middle}#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 .data{width:100%;padding:10px;border:1px solid #c9c9c9;margin:0 auto;background-color:#f9f9f9}#content fieldset.data{margin:2em auto}#content fieldset.data>legend{color:#607d8b;padding:0 .5em;font-size:1.5em}#content fieldset.data>table{display:none;width:100%}#content .data #history-icon{position:relative;top:5em;right:2em}#content .data td{text-align:left}#content .data td.descField{text-align:right;font-size:12px;font-weight:bold;color:#999}#content .data select{min-width:210px}#content .data .list-wrap{max-height:10em;overflow:auto;padding:.5em;margin:1em 0}#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}#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;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#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-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 #data-search .account-info img,#content #data-search .account-actions img{width:24px;height:24px;margin:0 .5em}#content .rowSpace>.cellBorder{height:10px;border-top:1px solid #d9d9d9}#content .rowSpace>.cellBlank{height:10px}#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 1em}#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 #tabs.ui-widget-content{border:0;background-color:transparent}#content #tabs .ui-widget-header{background:0;border:0;border-bottom:1px solid #c9c9c9}#content #tabs.ui-widget-content{background:none!important}#content #tabs .tabs-spacer{float:left;height:200px}#content .tabs-bottom .ui-tabs-nav{clear:left;padding:0 .2em .2em .2em}#content .tabs-bottom .ui-tabs-nav li{top:auto;bottom:0;margin:0 .2em 1px 0;border-top:0}#content .tabs-bottom .ui-tabs-nav li.ui-tabs-active{margin-top:-1px;padding-top:1px}#box-popup{min-width:25em;max-width:50em;margin:5em auto;padding:0;background-color:#fff}#box-popup.box-password-view{min-width:30em;max-width:35em}#box-popup>h2{width:100%;font-size:18px;color:#fff;background-color:#607d8b;margin:0 0 1em 0;padding:.5em 0;line-height:1em}#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}#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}#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{min-width:400px;border:0;text-align:left;margin:0 .5em}.popup-data .descField{min-width:100px;font-weight:bold}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;box-shadow:0 -8px 6px -6px #c9c9c9;-webkit-box-shadow:0 -8px 6px -6px #c9c9c9;-moz-box-shadow:0 -8px 6px -6px #c9c9c9;display:flex;justify-content:space-between}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}#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}.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 #a9a9a9;-moz-box-shadow:2px 2px 3px -3px #a9a9a9;box-shadow:1px 1px 2px #d9d9d9}.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{margin-left:.5em}.fullWidth{max-width:100%!important}.filter-on{color:#26a69a;background-color:#b2dfdb;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:#b2dfdb;border:1px solid #26a69a;font-weight:bold}.passLevel.strongest:hover{color:#26a69a;background-color:#b2dfdb;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:#ffcdd2;border:1px solid #ef5350;font-weight:bold}.passLevel.weak:hover{color:#ef5350;background-color:#ffcdd2;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:#b2dfdb}.help-box{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:#ffcdd2;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:40%;margin:0 auto;list-style:none;font-size:14px;text-align:left}#actions ul.errors>li{margin:1.5em auto;border-radius:5px;padding:.5em}#actions ul.errors>li.error-critical{color:#ef5350;background-color:#ffcdd2;border:1px solid #ef5350}#actions ul.errors>li.error-warning{color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#actions ul.errors>li.error-ok{color:#26a69a;background-color:#b2dfdb;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}#whatsNewIcon{text-align:center}#whatsNewIcon img{width:64px;height:64px}#whatsNewIcon h2{display:inline-block;color:#555;font-size:16px}#whatsNew{width:500px;background-color:#fffde1;padding:2em;line-height:1.5em;font-size:16px;color:#555;border:1px solid #d9d9d9;margin:0 auto 3em;display:none}#whatsNew ul{padding:0;border:0}#whatsNew li{padding-left:37px;line-height:32px;list-style:none}.help-box{display:none}.center{text-align:center!important}.right{text-align:right!important}.left{text-align:left!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 #boxLogin{position:relative;margin:11em auto 0 auto;width:100%;min-height:12em;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 #boxButton{position:absolute;top:2em;right:2em}#login-container #boxLogin #boxActions{position:absolute;bottom:1em;right:1em;width:100%;padding:.5em;text-align:right}#login-container #boxLogin #boxActions a{color:#c9c9c9}#login-container #boxLogout{width:250px;margin:8em auto 0 auto;font-size:14px;text-align:center;padding:.5em;color:#ffca28;background-color:#fff8e1;border:1px solid #ffca28}#login-container #boxUpdated{width:350px;margin:5em auto 5em auto;font-size:14px;text-align:center;padding:.5em;color:#26a69a;background-color:#b2dfdb;border:1px solid #26a69a}@media screen and (max-width:1000px){#content #searchbox{position:relative;left:0;width:100%}#content #searchbox form{flex-wrap:wrap}#content #searchbox form>div{width:100%}#content #searchbox input[type=text]{width:100%}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}} \ No newline at end of file diff --git a/inc/themes/material-blue/inc/Icons.class.php b/inc/themes/material-blue/inc/Icons.class.php index dd983cfc..78b548b4 100644 --- a/inc/themes/material-blue/inc/Icons.class.php +++ b/inc/themes/material-blue/inc/Icons.class.php @@ -53,6 +53,7 @@ class Icons extends ThemeIconsBase $this->iconAccAdmin = new FontIcon('star_half', 'mdl-color-text--amber-A100', _('Admin Cuentas')); $this->iconLdapUser = new FontIcon('business', 'mdl-color-text--deep-purple-A100', _('Usuario de LDAP')); $this->iconDisabled = new FontIcon('error', 'mdl-color-text--red-A100', _('Deshabilitado')); + $this->iconEnabled = new FontIcon('check_circle', 'mdl-color-text--teal-500', _('Habilitado')); $this->iconRefresh = new FontIcon('refresh', 'mdl-color-text--teal-500', _('Actualizar')); $this->iconCopy = new FontIcon('content_copy', 'mdl-color-text--indigo-A200', _('Copiar')); $this->iconClipboard = new FontIcon('content_paste', 'mdl-color-text--indigo-A200'); diff --git a/inc/themes/material-blue/js/app-theme.min.js b/inc/themes/material-blue/js/app-theme.min.js index 399a2c77..941123a4 100644 --- a/inc/themes/material-blue/js/app-theme.min.js +++ b/inc/themes/material-blue/js/app-theme.min.js @@ -1,5 +1,5 @@ var $jscomp={scope:{},findInternal:function(a,f,d){a instanceof String&&(a=String(a));for(var h=a.length,g=0;g=c)continue;if(58<=c&&64>=c)continue;if(91<=c&&96>=c)continue;if(123<=c&&126>=c)continue}!a.passwordData.complexity.numbers&&48<=c&&57>=c||!a.passwordData.complexity.uppercase&&65<=c&&90>=c||(l++,e+=String.fromCharCode(c))}$("#viewPass").attr("title",e);var k=zxcvbn(e);a.passwordData.passLength=e.length; b?(l=b.parent(),c=$("#"+b.attr("id")+"R"),a.outputResult(k,b),b=new MaterialTextfield,l.find("input:password").val(e),l.addClass(b.CssClasses_.IS_DIRTY).removeClass(b.CssClasses_.IS_INVALID),c.val(e).parent().addClass(b.CssClasses_.IS_DIRTY).removeClass(b.CssClasses_.IS_INVALID),a.encryptFormValue(c),l.find("#passLevel").show(500)):(a.outputResult(k),$("input:password, input.password").val(e),$("#passLevel").show(500))},h=function(){$("
").dialog({modal:!0,title:a.config().LANG[29],width:"400px", diff --git a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.js b/inc/themes/material-blue/js/bootstrap-material-datetimepicker.js index 170e0149..904f059e 100644 --- a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.js +++ b/inc/themes/material-blue/js/bootstrap-material-datetimepicker.js @@ -1,3 +1,4 @@ + (function ($, moment) { var pluginName = "bootstrapMaterialDatePicker"; var pluginDataName = "plugin_" + pluginName; diff --git a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js b/inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js index 764219f1..bcb20dba 100644 --- a/inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js +++ b/inc/themes/material-blue/js/bootstrap-material-datetimepicker.min.js @@ -1,5 +1,5 @@ var $jscomp={scope:{},findInternal:function(e,f,g){e instanceof String&&(e=String(e));for(var a=e.length,b=0;b - + getData()->getDataCount() > 0): ?> getData()->getData() as $dataIndex => $dataItem): ?> - getData()->getDataRowSources()); ?> + getData()->getDataRowSources()); ?> @@ -22,9 +23,9 @@ use SP\Html\Html; getData()->getDataRowSourcesWithIcon()) > 0): ?> getData()->getDataRowSourcesWithIcon() as $rowSrcIcon): ?> - {$rowSrcIcon[0]} == 1): ?> - getIcon(); ?> + {$rowSrcIcon['field']} == $rowSrcIcon['value']): ?> + getIcon(); ?>   @@ -37,15 +38,18 @@ use SP\Html\Html; getDataActions()) > 0): ?> getDataActions() as $action): ?> isSkip()): ?> - getFilterRowSource() && $dataItem->{$action->getFilterRowSource()} == 1): continue; endif; ?> - getIcon()->getIcon(); ?> - getFilterRowSource(); + if ($filter !== null && $dataItem->{$filter['field']} == $filter['value']): continue; endif; ?> + getIcon()->getIcon(); ?> + getTitle(); ?> diff --git a/inc/themes/material-blue/views/itemshow/plugins.inc b/inc/themes/material-blue/views/itemshow/plugins.inc new file mode 100644 index 00000000..66526e8d --- /dev/null +++ b/inc/themes/material-blue/views/itemshow/plugins.inc @@ -0,0 +1,82 @@ + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/js/app-actions.js b/js/app-actions.js index 8a36ec9d..51b01429 100644 --- a/js/app-actions.js +++ b/js/app-actions.js @@ -55,6 +55,7 @@ sysPass.Actions = function (Common) { }, file: "/ajax/ajax_filesMgmt.php", link: "/ajax/ajax_itemSave.php", + plugin: "/ajax/ajax_itemSave.php", account: { save: "/ajax/ajax_itemSave.php", showPass: "/ajax/ajax_accViewPass.php", @@ -1129,6 +1130,34 @@ sysPass.Actions = function (Common) { } }; + /** + * Objeto para las acciones de los plugins + */ + var plugin = { + toggle: function ($obj) { + log.info("plugin:enable"); + + var data = { + "itemId": $obj.data("item-id"), + "actionId": $obj.data("action-id"), + "sk": Common.sk.get(), + "activeTab": $obj.data("activetab") + }; + + var opts = Common.appRequests().getRequestOpts(); + opts.url = ajaxUrl.appMgmt.save; + opts.data = data; + + Common.appRequests().getActionCall(opts, function (json) { + Common.msg.out(json); + + if (json.status === 0) { + doAction({actionId: $obj.data("nextaction-id"), itemId: $obj.data("activetab")}); + } + }); + } + }; + return { doAction: doAction, appMgmt: appMgmt, @@ -1140,6 +1169,7 @@ sysPass.Actions = function (Common) { user: user, link: link, eventlog: eventlog, - ajaxUrl: ajaxUrl + ajaxUrl: ajaxUrl, + plugin: plugin }; }; diff --git a/js/app-actions.min.js b/js/app-actions.min.js index d68ba76b..c708ed69 100644 --- a/js/app-actions.min.js +++ b/js/app-actions.min.js @@ -1,34 +1,35 @@ var $jscomp={scope:{},findInternal:function(c,d,h){c instanceof String&&(c=String(c));for(var e=c.length,g=0;g'+b+""),d=f.find("img");d.hide();$.magnificPopup.open({items:{src:f,type:"inline"},callbacks:{open:function(){var a=this;d.on("click",function(){a.close()});setTimeout(function(){var a=c.resizeImage(d);f.css({backgroundColor:"#fff", -width:a.width,height:"auto"});d.show("slow")},500)}}})},q={logout:function(){var a=window.location.search;c.redirect(0";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);l.search()})}}})},showpass:function(a){d.info("account:showpass"); -var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"),isFull:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(f,function(b){0!==b.status?c.msg.out(b):(b=$(b.data.html),p(a,b),b.on("mouseleave",function(){clearTimeout(h);h=setTimeout(function(){$.magnificPopup.close()},3E4)}).on("mouseenter",function(){0!==h&&clearTimeout(h)}))})},copypass:function(a){d.info("account:copypass"); -var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.async=!1;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"),isFull:0,sk:c.sk.get(),isAjax:1};a=c.appRequests().getActionCall(f);"undefined"!==typeof a.responseJSON.csrf&&c.sk.set(a.responseJSON.csrf);return a},copy:function(a){d.info("account:copy");g({actionId:a.data("action-id"),itemId:a.data("item-id")})},savefavorite:function(a,b){d.info("account:saveFavorite");var f= -"on"===a.data("status"),k={actionId:f?a.data("action-id-off"):a.data("action-id-on"),itemId:a.data("item-id"),sk:c.sk.get(),isAjax:1},g=c.appRequests().getRequestOpts();g.url=e.account.saveFavorite;g.data=k;c.appRequests().getActionCall(g,function(d){c.msg.out(d);0===d.status&&(a.data("status",f?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=c.appRequests().getRequestOpts();b.url=e.account.request;b.data=a.serialize();c.appRequests().getActionCall(b, -function(a){c.msg.out(a)})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var c=$("#frmSearch");c.find('input[name="skey"]').val(a.data("key"));c.find('input[name="sorder"]').val(a.data("dir"));c.find('input[name="start"]').val(a.data("start"));l.search()},editpass:function(a){d.info("account:editpass");var c=a.data("parent-id");g({actionId:a.data("action-id"),itemId:0==c?a.data("item-id"):c})},restore:function(a){d.info("account:restore"); -l.save(a)},getfiles:function(a){d.info("account:getfiles");var b=c.appRequests().getRequestOpts();b.method="get";b.type="html";b.url=e.account.getFiles;b.data={id:a.data("item-id"),del:a.data("delete"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(c){a.html(c)})},search:function(){d.info("account:search");var a=$("#frmSearch");a.find("input[name='sk']").val(c.sk.get());a.find("input[name='skey']").val();a.find("input[name='sorder']").val();var b=c.appRequests().getRequestOpts();b.url=e.account.search; -b.data=a.serialize();c.appRequests().getActionCall(b,function(b){10===b.status&&c.msg.out(b);c.sk.set(b.sk);$("#res-content").empty().html(b.html);a.find("input:first").focus()})},save:function(a){d.info("account:save");var b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},n={refreshTab:!0,show:function(a){d.info("appMgmt:show");if(a.data("item-dst")||"undefined"===a.data("activetab"))d.info(a.data("activetab")), -n.refreshTab=!1;var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.show;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),activeTab:a.data("activetab"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){0!==b.status?c.msg.out(b):p(a,b.data.html)})},"delete":function(a){d.info("appMgmt:delete");var b='

'+c.config().LANG[12]+"

",f=a.data("selection"),k=[];if(f&&($(f).find(".is-selected").each(function(a,c){var b=$(this);k.push(b.data("item-id"))}), -0===k.length))return;showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={itemId:f?k:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}})}, -save:function(a){d.info("appMgmt:save");var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&(!0===n.refreshTab&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}),$.magnificPopup.close())})},search:function(a){d.info("appMgmt:search");var b=$(a.data("target")),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.search;f.data=a.serialize();c.appRequests().getActionCall(f,function(a){0=== -a.status?b.html(a.data.html):b.html(c.msg.html.error(a.description));c.sk.set(a.csrf)})},nav:function(a){d.info("appMgmt:nav");var b=$("#"+a.data("action-form"));b.find("[name='start']").val(a.data("start"));b.find("[name='count']").val(a.data("count"));b.find("[name='sk']").val(c.sk.get());n.search(b)},ldapSync:function(a){d.info("appMgmt:ldapSync");var b='

'+c.config().LANG[57]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault(); -c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}}})}};return{doAction:g,appMgmt:n,account:l,file:{view:function(a){d.info("file:view");var b=c.appRequests().getRequestOpts();b.url=e.file;b.type="html";b.data={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};c.appRequests().getActionCall(b, -function(b){"undefined"!==typeof b.status&&1===b.status?c.msg.out(b):b?r(a,b):c.msg.error(c.config().LANG[14])})},download:function(a){d.info("file:download");a={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};$.fileDownload(c.config().APP_ROOT+e.file,{httpMethod:"POST",data:a})},"delete":function(a){d.info("file:delete");var b='

'+c.config().LANG[15]+"

";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault(); -c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.file;b.data={fileId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&(a=$("#list-account-files"),l.getfiles(a))})}}})}},checks:{ldap:function(a){d.info("checks:ldap");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data= -a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);var b=$("#ldap-results");b.find(".list-wrap").html(c.appTheme().html.getList(a.data));b.show("slow")})},wiki:function(a){d.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}},config:{save:function(a){d.info("config:save"); -var b=c.appRequests().getRequestOpts();b.url=e.config.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&("undefined"!==a.data("nextaction-id")?g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}):setTimeout(function(){c.redirect("index.php")},2E3))})},backup:function(a){d.info("config:backup");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&& -"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"export":function(a){d.info("config:export");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"import":function(a){d.info("config:import");var b=c.appRequests().getRequestOpts();b.url= -e.config["import"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},main:q,user:{savePreferences:function(a){d.info("user:savePreferences");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);setTimeout(function(){c.redirect("index.php")},2E3)})},saveSecurity:function(a){d.info("user:saveSecurity"); -var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},password:function(a){d.info("user:password");var b=c.appRequests().getRequestOpts();b.type="html";b.method="get";b.url=e.user.password;b.data={actionId:a.data("action-id"),itemId:a.data("item-id"),sk:a.data("sk"),isAjax:1};c.appRequests().getActionCall(b,function(b){0===b.length?q.logout(): -p(a,b)})},passreset:function(a){d.info("user:passreset");var b=c.appRequests().getRequestOpts();b.url=e.user.passreset;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},link:{save:function(a){d.info("link:save");var b=c.appRequests().getRequestOpts();b.url=e.link;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};a='

'+c.config().LANG[48]+"

";showDialog({text:a,negative:{title:c.config().LANG[44], -onClick:function(a){a.preventDefault();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},positive:{title:c.config().LANG[43],onClick:function(a){a.preventDefault();b.data.notify=1;c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}}})},refresh:function(a){d.info("link:refresh");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.link;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b); -0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},eventlog:{nav:function(a){if("undefined"===typeof a.data("start"))return!1;var b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.type="html";b.data={start:a.data("start"),current:a.data("current")};c.appRequests().getActionCall(b,function(a){$("#content").html(a);c.scrollUp()})},clear:function(a){var b='

'+c.config().LANG[20]+"

";showDialog({text:b,negative:{title:c.config().LANG[44], -onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.data={clear:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);0==b.status&&g({actionId:a.data("nextaction-id")})})}}})}},ajaxUrl:e}}; +file:"/ajax/ajax_filesMgmt.php",link:"/ajax/ajax_itemSave.php",plugin:"/ajax/ajax_itemSave.php",account:{save:"/ajax/ajax_itemSave.php",showPass:"/ajax/ajax_accViewPass.php",saveFavorite:"/ajax/ajax_itemSave.php",request:"/ajax/ajax_sendRequest.php",getFiles:"/ajax/ajax_accGetFiles.php",search:"/ajax/ajax_accSearch.php"},appMgmt:{show:"/ajax/ajax_itemShow.php",save:"/ajax/ajax_itemSave.php",search:"/ajax/ajax_itemSearch.php"},eventlog:"/ajax/ajax_eventlog.php",wiki:{show:"/ajax/ajax_wiki.php"}},g= +function(a){a={actionId:a.actionId,itemId:"undefined"!==a.itemId?a.itemId:0,isAjax:1};var b=c.appRequests().getRequestOpts();b.url=e.doAction;b.type="html";b.addHistory=!0;b.data=a;c.appRequests().getActionCall(b,function(a){$("#content").empty().html(a)})},m=function(a){d.info("updateItems");var b=$("#"+a.data("item-dst"))[0].selectize;b.clearOptions();b.load(function(b){var f=c.appRequests().getRequestOpts();f.url=e.updateItems;f.method="get";f.data={sk:c.sk.get(),itemType:a.data("item-type")}; +c.appRequests().getActionCall(f,function(a){b(a.items)})})},p=function(a,b){$.magnificPopup.open({items:{src:b,type:"inline"},callbacks:{open:function(){c.appTriggers().views.common("#box-popup")},close:function(){a.data("item-dst")&&m(a)}},showCloseBtn:!1})},r=function(a,b){var f=$('
'+b+"
"),d=f.find("img");d.hide();$.magnificPopup.open({items:{src:f,type:"inline"},callbacks:{open:function(){var a=this;d.on("click",function(){a.close()});setTimeout(function(){var a= +c.resizeImage(d);f.css({backgroundColor:"#fff",width:a.width,height:"auto"});d.show("slow")},500)}}})},q={logout:function(){var a=window.location.search;c.redirect(0";showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a); +l.search()})}}})},showpass:function(a){d.info("account:showpass");var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"),isFull:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(f,function(b){0!==b.status?c.msg.out(b):(b=$(b.data.html),p(a,b),b.on("mouseleave",function(){clearTimeout(h);h=setTimeout(function(){$.magnificPopup.close()},3E4)}).on("mouseenter",function(){0!== +h&&clearTimeout(h)}))})},copypass:function(a){d.info("account:copypass");var b=a.data("parent-id"),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.show;f.async=!1;f.data={itemId:0==b?a.data("item-id"):b,actionId:a.data("action-id"),isHistory:a.data("history"),isFull:0,sk:c.sk.get(),isAjax:1};a=c.appRequests().getActionCall(f);"undefined"!==typeof a.responseJSON.csrf&&c.sk.set(a.responseJSON.csrf);return a},copy:function(a){d.info("account:copy");g({actionId:a.data("action-id"),itemId:a.data("item-id")})}, +savefavorite:function(a,b){d.info("account:saveFavorite");var f="on"===a.data("status"),k={actionId:f?a.data("action-id-off"):a.data("action-id-on"),itemId:a.data("item-id"),sk:c.sk.get(),isAjax:1},g=c.appRequests().getRequestOpts();g.url=e.account.saveFavorite;g.data=k;c.appRequests().getActionCall(g,function(d){c.msg.out(d);0===d.status&&(a.data("status",f?"off":"on"),"function"===typeof b&&b())})},request:function(a){d.info("account:request");var b=c.appRequests().getRequestOpts();b.url=e.account.request; +b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})},menu:function(a){a.hide();a.parent().children(".actions-optional").show(250)},sort:function(a){d.info("account:sort");var c=$("#frmSearch");c.find('input[name="skey"]').val(a.data("key"));c.find('input[name="sorder"]').val(a.data("dir"));c.find('input[name="start"]').val(a.data("start"));l.search()},editpass:function(a){d.info("account:editpass");var c=a.data("parent-id");g({actionId:a.data("action-id"),itemId:0==c?a.data("item-id"): +c})},restore:function(a){d.info("account:restore");l.save(a)},getfiles:function(a){d.info("account:getfiles");var b=c.appRequests().getRequestOpts();b.method="get";b.type="html";b.url=e.account.getFiles;b.data={id:a.data("item-id"),del:a.data("delete"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(c){a.html(c)})},search:function(){d.info("account:search");var a=$("#frmSearch");a.find("input[name='sk']").val(c.sk.get());a.find("input[name='skey']").val();a.find("input[name='sorder']").val(); +var b=c.appRequests().getRequestOpts();b.url=e.account.search;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){10===b.status&&c.msg.out(b);c.sk.set(b.sk);$("#res-content").empty().html(b.html);a.find("input:first").focus()})},save:function(a){d.info("account:save");var b=c.appRequests().getRequestOpts();b.url=e.account.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},n={refreshTab:!0,show:function(a){d.info("appMgmt:show");if(a.data("item-dst")|| +"undefined"===a.data("activetab"))d.info(a.data("activetab")),n.refreshTab=!1;var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.show;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),activeTab:a.data("activetab"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){0!==b.status?c.msg.out(b):p(a,b.data.html)})},"delete":function(a){d.info("appMgmt:delete");var b='

'+c.config().LANG[12]+"

",f=a.data("selection"),k=[];if(f&&($(f).find(".is-selected").each(function(a, +c){var b=$(this);k.push(b.data("item-id"))}),0===k.length))return;showDialog({text:b,negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={itemId:f?k:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"), +itemId:a.data("activetab")})})}}})},save:function(a){d.info("appMgmt:save");var b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&(!0===n.refreshTab&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}),$.magnificPopup.close())})},search:function(a){d.info("appMgmt:search");var b=$(a.data("target")),f=c.appRequests().getRequestOpts();f.url=e.appMgmt.search;f.data=a.serialize();c.appRequests().getActionCall(f, +function(a){0===a.status?b.html(a.data.html):b.html(c.msg.html.error(a.description));c.sk.set(a.csrf)})},nav:function(a){d.info("appMgmt:nav");var b=$("#"+a.data("action-form"));b.find("[name='start']").val(a.data("start"));b.find("[name='count']").val(a.data("count"));b.find("[name='sk']").val(c.sk.get());n.search(b)},ldapSync:function(a){d.info("appMgmt:ldapSync");var b='

'+c.config().LANG[57]+"

";showDialog({text:b,negative:{title:c.config().LANG[44], +onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.appMgmt.save;b.data={actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}}})}};return{doAction:g,appMgmt:n,account:l,file:{view:function(a){d.info("file:view");var b=c.appRequests().getRequestOpts();b.url=e.file;b.type="html";b.data={fileId:a.data("item-id"),sk:c.sk.get(), +actionId:a.data("action-id")};c.appRequests().getActionCall(b,function(b){"undefined"!==typeof b.status&&1===b.status?c.msg.out(b):b?r(a,b):c.msg.error(c.config().LANG[14])})},download:function(a){d.info("file:download");a={fileId:a.data("item-id"),sk:c.sk.get(),actionId:a.data("action-id")};$.fileDownload(c.config().APP_ROOT+e.file,{httpMethod:"POST",data:a})},"delete":function(a){d.info("file:delete");var b='

'+c.config().LANG[15]+"

";showDialog({text:b, +negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b=c.appRequests().getRequestOpts();b.url=e.file;b.data={fileId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get()};c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&(a=$("#list-account-files"),l.getfiles(a))})}}})}},checks:{ldap:function(a){d.info("checks:ldap");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get()); +var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);var b=$("#ldap-results");b.find(".list-wrap").html(c.appTheme().html.getList(a.data));b.show("slow")})},wiki:function(a){d.info("checks:wiki");a=$(a.data("src"));a.find("[name='sk']").val(c.sk.get());var b=c.appRequests().getRequestOpts();b.url=e.checks;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);0===a.status&&$("#dokuWikiResCheck").html(a.data)})}}, +config:{save:function(a){d.info("config:save");var b=c.appRequests().getRequestOpts();b.url=e.config.save;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&("undefined"!==a.data("nextaction-id")?g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")}):setTimeout(function(){c.redirect("index.php")},2E3))})},backup:function(a){d.info("config:backup");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b, +function(b){c.msg.out(b);0===b.status&&"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"export":function(a){d.info("config:export");var b=c.appRequests().getRequestOpts();b.url=e.config["export"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},"import":function(a){d.info("config:import");var b= +c.appRequests().getRequestOpts();b.url=e.config["import"];b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);0===b.status&&"undefined"!==typeof a.data("nextaction-id")&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},main:q,user:{savePreferences:function(a){d.info("user:savePreferences");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a);setTimeout(function(){c.redirect("index.php")}, +2E3)})},saveSecurity:function(a){d.info("user:saveSecurity");var b=c.appRequests().getRequestOpts();b.url=e.user.savePreferences;b.data=a.serialize();c.appRequests().getActionCall(b,function(b){c.msg.out(b);g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})},password:function(a){d.info("user:password");var b=c.appRequests().getRequestOpts();b.type="html";b.method="get";b.url=e.user.password;b.data={actionId:a.data("action-id"),itemId:a.data("item-id"),sk:a.data("sk"),isAjax:1};c.appRequests().getActionCall(b, +function(b){0===b.length?q.logout():p(a,b)})},passreset:function(a){d.info("user:passreset");var b=c.appRequests().getRequestOpts();b.url=e.user.passreset;b.data=a.serialize();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},link:{save:function(a){d.info("link:save");var b=c.appRequests().getRequestOpts();b.url=e.link;b.data={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),isAjax:1};a='

'+c.config().LANG[48]+"

";showDialog({text:a, +negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}},positive:{title:c.config().LANG[43],onClick:function(a){a.preventDefault();b.data.notify=1;c.appRequests().getActionCall(b,function(a){c.msg.out(a)})}}})},refresh:function(a){d.info("link:refresh");var b={itemId:a.data("item-id"),actionId:a.data("action-id"),sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.link;f.data=b;c.appRequests().getActionCall(f, +function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}},eventlog:{nav:function(a){if("undefined"===typeof a.data("start"))return!1;var b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.type="html";b.data={start:a.data("start"),current:a.data("current")};c.appRequests().getActionCall(b,function(a){$("#content").html(a);c.scrollUp()})},clear:function(a){var b='

'+c.config().LANG[20]+"

";showDialog({text:b, +negative:{title:c.config().LANG[44],onClick:function(a){a.preventDefault();c.msg.error(c.config().LANG[44])}},positive:{title:c.config().LANG[43],onClick:function(b){b.preventDefault();b=c.appRequests().getRequestOpts();b.url=e.eventlog;b.data={clear:1,sk:c.sk.get(),isAjax:1};c.appRequests().getActionCall(b,function(b){c.msg.out(b);0==b.status&&g({actionId:a.data("nextaction-id")})})}}})}},ajaxUrl:e,plugin:{toggle:function(a){d.info("plugin:enable");var b={itemId:a.data("item-id"),actionId:a.data("action-id"), +sk:c.sk.get(),activeTab:a.data("activetab")},f=c.appRequests().getRequestOpts();f.url=e.appMgmt.save;f.data=b;c.appRequests().getActionCall(f,function(b){c.msg.out(b);0===b.status&&g({actionId:a.data("nextaction-id"),itemId:a.data("activetab")})})}}}}; diff --git a/js/app-main.min.js b/js/app-main.min.js index 1f10aca2..f544a3f6 100644 --- a/js/app-main.min.js +++ b/js/app-main.min.js @@ -1,4 +1,4 @@ -var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,f,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[f]=e.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; +var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,f,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[f]=e.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_"; $jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(a){return $jscomp.SYMBOL_PREFIX+(a||"")+$jscomp.symbolCounter_++}; $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var f=0;return $jscomp.iteratorPrototype(function(){return f=f}},"es6-impl","es3"); sysPass.Requests=function(b){var c=b.log,a=[],d={get:function(){return a},add:function(b){var e=""===b.hash?SparkMD5.hash(JSON.stringify(b),!1):b.hash;if(0 */ + (function(root, factory) { if (typeof define === 'function' && define.amd) { define('sifter', factory); diff --git a/js/selectize.min.js b/js/selectize.min.js index f08cda7b..4594008f 100644 --- a/js/selectize.min.js +++ b/js/selectize.min.js @@ -1,5 +1,5 @@ var $jscomp={scope:{},findInternal:function(c,h,d){c instanceof String&&(c=String(c));for(var p=c.length,l=0;l