* [MOD] Solves #393. The auth chain wasn't stopped on auth module success exit. Thanks to @MAndretti for the feedback.

* [ADD] Notifications can now be edited
* [MOD] UI tweaks
This commit is contained in:
nuxsmin
2017-01-30 15:45:22 +01:00
parent ff65cf7a8e
commit e319165cf5
20 changed files with 731 additions and 627 deletions

View File

@@ -66,9 +66,13 @@ class Auth
{
$this->UserData = $UserData;
$this->registerAuth('authLdap');
$this->registerAuth('authDatabase');
$this->registerAuth('authBrowser');
if (Checks::ldapIsAvailable() && Checks::ldapIsEnabled()) {
$this->registerAuth('authLdap');
}
$this->registerAuth('authDatabase');
}
/**
@@ -115,12 +119,6 @@ class Auth
*/
public function authLdap()
{
if (!Checks::ldapIsAvailable()
|| !Checks::ldapIsEnabled()
) {
return false;
}
$Ldap = Config::getConfig()->isLdapAds() ? new LdapMsAds() : new LdapStd();
$LdapAuthData = $Ldap->getLdapAuthData();
@@ -137,6 +135,7 @@ class Auth
}
$LdapAuthData->setAuthenticated(1);
return $LdapAuthData;
}

View File

@@ -51,6 +51,14 @@ abstract class AuthDataBase
* @var string
*/
protected $server;
/**
* @var bool
*/
protected $required = false;
/**
* @var bool
*/
protected $failed = false;
/**
* @return string
@@ -131,4 +139,36 @@ abstract class AuthDataBase
{
$this->statusCode = (int)$statusCode;
}
/**
* @return bool
*/
public function isRequired()
{
return (bool)$this->required;
}
/**
* @param bool $required
*/
public function setRequired($required)
{
$this->required = (bool)$required;
}
/**
* @return bool
*/
public function isFailed()
{
return $this->failed;
}
/**
* @param bool $failed
*/
public function setFailed($failed)
{
$this->failed = $failed;
}
}

View File

@@ -216,8 +216,6 @@ abstract class LdapBase implements LdapInterface, AuthInterface
$this->LogMessage->addDetails('LDAP DN', $dn);
$this->writeLog();
$this->getLdapAuthData()->setAuthenticated(1);
throw new SPException(SPException::SP_ERROR, __($this->LogMessage->getDescription()));
}

View File

@@ -119,12 +119,17 @@ class Notices extends GridBase
$GridActionCheck->setOnClickFunction('notice/check');
$GridActionCheck->setFilterRowSource('notice_checked', 1);
if (!$isAdminApp) {
$GridActionCheck->setFilterRowSource('notice_sticky', 1);
}
$Grid->setDataActions($GridActionCheck);
$GridActionEdit = new DataGridAction();
$GridActionEdit->setId(self::ACTION_NOT_USER_EDIT);
$GridActionEdit->setName(__('Editar Notificación'));
$GridActionEdit->setTitle(__('Editar Notificación'));
$GridActionEdit->setIcon($this->icons->getIconEdit());
$GridActionEdit->setOnClickFunction('notice/show');
$Grid->setDataActions($GridActionEdit);
$GridActionDel = new DataGridAction();
$GridActionDel->setId(self::ACTION_NOT_USER_DELETE);
$GridActionDel->setType(DataGridActionType::DELETE_ITEM);
@@ -134,6 +139,8 @@ class Notices extends GridBase
$GridActionDel->setOnClickFunction('appMgmt/delete');
if (!$isAdminApp) {
$GridActionCheck->setFilterRowSource('notice_sticky', 1);
$GridActionEdit->setFilterRowSource('notice_sticky', 1);
$GridActionDel->setFilterRowSource('notice_sticky', 1);
}

View File

@@ -175,6 +175,7 @@ class ItemActionController implements ItemControllerInterface
case ActionsInterface::ACTION_NOT_USER_CHECK:
case ActionsInterface::ACTION_NOT_USER_VIEW:
case ActionsInterface::ACTION_NOT_USER_NEW:
case ActionsInterface::ACTION_NOT_USER_EDIT:
case ActionsInterface::ACTION_NOT_USER_DELETE:
$this->noticeAction();
break;
@@ -247,6 +248,8 @@ class ItemActionController implements ItemControllerInterface
case ActionsInterface::ACTION_USR_USERS_DELETE:
if (is_array($this->itemId)) {
$UsersData = User::getItem()->deleteBatch($this->itemId);
$this->LogMessage->addDescription(__('Usuarios eliminados', false));
} else {
$UsersData = [User::getItem()->getById($this->itemId)];
@@ -1032,6 +1035,14 @@ class ItemActionController implements ItemControllerInterface
$this->JsonResponse->setDescription(__('Notificación creada'));
break;
case ActionsInterface::ACTION_NOT_USER_EDIT:
$Form = new NoticeForm($this->itemId);
$Form->validate($this->actionId);
Notice::getItem($Form->getItemData())->update();
$this->JsonResponse->setDescription(__('Notificación actualizada'));
break;
case ActionsInterface::ACTION_NOT_USER_DELETE:
if (is_array($this->itemId)) {
Notice::getItem()->deleteBatch($this->itemId);

View File

@@ -124,7 +124,9 @@ class LoginController
/** @var AuthResult $AuthResult */
foreach ($result as $AuthResult) {
$this->{$AuthResult->getAuth()}($AuthResult->getData());
if ($this->{$AuthResult->getAuth()}($AuthResult->getData()) === true) {
break;
}
}
} else {
throw new AuthException(SPException::SP_INFO, __('Login incorrecto', false), '', self::STATUS_INVALID_LOGIN);
@@ -412,7 +414,6 @@ class LoginController
* Comprobar si el cliente ha enviado las variables de autentificación
*
* @param BrowserAuthData $AuthData
* @return bool
* @throws \SP\Core\Exceptions\SPException
* @throws AuthException
*/
@@ -429,7 +430,5 @@ class LoginController
} elseif ($AuthData->getAuthenticated() === 1) {
$this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
}
return true;
}
}

View File

@@ -33,7 +33,6 @@ use SP\Core\Template;
use SP\DataModel\NoticeData;
use SP\Mgmt\Notices\Notice;
use SP\Mgmt\Users\User;
use SP\Mgmt\Users\UserUtil;
use SP\Util\Checks;
use SP\Util\Json;
use SP\Util\Util;
@@ -107,6 +106,10 @@ class NoticeShowController extends ControllerBase implements ActionsInterface, I
$this->view->assign('header', __('Nueva Notificación'));
$this->getNotice();
break;
case self::ACTION_NOT_USER_EDIT:
$this->view->assign('header', __('Editar Notificación'));
$this->getNotice();
break;
default:
$this->invalidAction();
}

View File

@@ -137,8 +137,9 @@ interface ActionsInterface
const ACTION_NOT_USER = 761;
const ACTION_NOT_USER_VIEW = 7610;
const ACTION_NOT_USER_NEW = 7611;
const ACTION_NOT_USER_CHECK = 7612;
const ACTION_NOT_USER_EDIT = 7612;
const ACTION_NOT_USER_DELETE = 7613;
const ACTION_NOT_USER_CHECK = 7614;
const ACTION_NOT_USER_SEARCH = 7615;
const ACTION_CFG = 80;
const ACTION_CFG_GENERAL = 801;

View File

@@ -95,6 +95,7 @@ class NoticeForm extends FormBase implements FormInterface
$Description->addDescription(Request::analyze('notice_description'));
$this->NoticeData = new NoticeData();
$this->NoticeData->setNoticeId($this->itemId);
$this->NoticeData->setNoticeType(Request::analyze('notice_type'));
$this->NoticeData->setNoticeComponent(Request::analyze('notice_component'));
$this->NoticeData->setNoticeDescription($Description);

View File

@@ -125,7 +125,6 @@ class Notice extends NoticeBase implements ItemInterface
$Data->addParam($this->itemData->getNoticeType());
$Data->addParam($this->itemData->getNoticeComponent());
$Data->addParam($this->itemData->getNoticeDescription());
$Data->addParam($this->itemData->isNoticeChecked());
$Data->addParam($this->itemData->getNoticeUserId());
$Data->addParam($this->itemData->isNoticeSticky());
$Data->addParam($this->itemData->isNoticeOnlyAdmin());
@@ -149,7 +148,8 @@ class Notice extends NoticeBase implements ItemInterface
public function getById($id)
{
$query = /** @lang SQL */
'SELECT notice_type,
'SELECT notice_id,
notice_type,
notice_component,
notice_description,
FROM_UNIXTIME(notice_date) AS notice_date,

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
.dtp{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.2);z-index:2000;font-size:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dtp>.dtp-content{background:#fff;max-width:300px;box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);max-height:520px;position:relative;left:50%}.dtp>.dtp-content>.dtp-date-view>header.dtp-header{background:#607d8b;color:#eceff1;text-align:center;padding:.3em}.dtp div.dtp-date,.dtp div.dtp-time{background:#607d8b;text-align:center;color:#eceff1;padding:10px}.dtp div.dtp-date>div{padding:0;margin:0}.dtp div.dtp-actual-month{font-size:1.5em}.dtp div.dtp-actual-num{font-size:3em;line-height:.9}.dtp div.dtp-actual-maxtime{font-size:3em;line-height:.9}.dtp div.dtp-actual-year{font-size:1.5em;color:#fff}.dtp div.dtp-picker{padding:1em;text-align:center}.dtp div.dtp-picker-month,.dtp div.dtp-actual-time{font-weight:500;text-align:center}.dtp div.dtp-picker-month{padding-bottom:20px !important;text-transform:uppercase !important}.dtp .dtp-close{position:absolute;top:.5em;right:1em}.dtp .dtp-close>a{color:#fff}.dtp .dtp-close>a>i{font-size:1em}.dtp table.dtp-picker-days{margin:0;min-height:251px}.dtp table.dtp-picker-days,.dtp table.dtp-picker-days tr,.dtp table.dtp-picker-days tr>td{border:0}.dtp table.dtp-picker-days tr>td{font-weight:700;text-align:center;padding:.5em}.dtp table.dtp-picker-days tr>td>span.dtp-select-day{color:#bdbdbd !important;padding:.4em .5em .5em .6em}.dtp table.dtp-picker-days tr>td>a,.dtp .dtp-picker-time>a{color:#212121;text-decoration:none;padding:.4em;border-radius:5px !important}.dtp table.dtp-picker-days tr>td>a.selected{background:#607d8b;color:#eceff1}.dtp table.dtp-picker-days tr>th{color:#757575;text-align:center;font-weight:700;padding:.4em .3em}.dtp .p10>a{color:#fff;text-decoration:none}.dtp .p10{width:10%;display:inline-block}.dtp .p20{width:20%;display:inline-block}.dtp .p60{width:60%;display:inline-block}.dtp .p80{width:80%;display:inline-block}.dtp a.dtp-meridien-am,.dtp a.dtp-meridien-pm{position:relative;top:10px;color:#212121;font-weight:500;padding:.7em .5em;border-radius:50% !important;text-decoration:none;background:#eee;font-size:1em}.dtp .dtp-actual-meridien a.selected{background:#607d8b;color:#eceff1}.dtp .dtp-picker-time>.dtp-select-hour{cursor:pointer}.dtp .dtp-picker-time>.dtp-select-minute{cursor:pointer}.dtp .dtp-buttons{padding:0 1em 1em 1em;text-align:right}.dtp.hidden,.dtp .hidden{display:none}.dtp .invisible{visibility:hidden}.dtp .left{float:left}.dtp .right{float:right}.dtp .clearfix{clear:both}.dtp .center{text-align:center}
.dtp{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.2);z-index:2000;font-size:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dtp>.dtp-content{background:#fff;max-width:300px;box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);max-height:520px;position:relative;left:50%}.dtp>.dtp-content>.dtp-date-view>header.dtp-header{background:#607d8b;color:#eceff1;text-align:center;padding:.3em}.dtp div.dtp-date,.dtp div.dtp-time{background:#607d8b;text-align:center;color:#eceff1;padding:10px}.dtp div.dtp-date>div{padding:0;margin:0}.dtp div.dtp-actual-month{font-size:1.5em}.dtp div.dtp-actual-num{font-size:3em;line-height:.9}.dtp div.dtp-actual-maxtime{font-size:3em;line-height:.9}.dtp div.dtp-actual-year{font-size:1.5em;color:#fff}.dtp div.dtp-picker{padding:1em;text-align:center}.dtp div.dtp-picker-month,.dtp div.dtp-actual-time{font-weight:500;text-align:center}.dtp div.dtp-picker-month{padding-bottom:20px!important;text-transform:uppercase!important}.dtp .dtp-close{position:absolute;top:.5em;right:1em}.dtp .dtp-close>a{color:#fff}.dtp .dtp-close>a>i{font-size:1em}.dtp table.dtp-picker-days{margin:0;min-height:251px}.dtp table.dtp-picker-days,.dtp table.dtp-picker-days tr,.dtp table.dtp-picker-days tr>td{border:0}.dtp table.dtp-picker-days tr>td{font-weight:700;text-align:center;padding:.5em}.dtp table.dtp-picker-days tr>td>span.dtp-select-day{color:#bdbdbd!important;padding:.4em .5em .5em .6em}.dtp table.dtp-picker-days tr>td>a,.dtp .dtp-picker-time>a{color:#212121;text-decoration:none;padding:.4em;border-radius:5px!important}.dtp table.dtp-picker-days tr>td>a.selected{background:#607d8b;color:#eceff1}.dtp table.dtp-picker-days tr>th{color:#757575;text-align:center;font-weight:700;padding:.4em .3em}.dtp .p10>a{color:#fff;text-decoration:none}.dtp .p10{width:10%;display:inline-block}.dtp .p20{width:20%;display:inline-block}.dtp .p60{width:60%;display:inline-block}.dtp .p80{width:80%;display:inline-block}.dtp a.dtp-meridien-am,.dtp a.dtp-meridien-pm{position:relative;top:10px;color:#212121;font-weight:500;padding:.7em .5em;border-radius:50%!important;text-decoration:none;background:#eee;font-size:1em}.dtp .dtp-actual-meridien a.selected{background:#607d8b;color:#eceff1}.dtp .dtp-picker-time>.dtp-select-hour{cursor:pointer}.dtp .dtp-picker-time>.dtp-select-minute{cursor:pointer}.dtp .dtp-buttons{padding:0 1em 1em 1em;text-align:right}.dtp.hidden,.dtp .hidden{display:none}.dtp .invisible{visibility:hidden}.dtp .left{float:left}.dtp .right{float:right}.dtp .clearfix{clear:both}.dtp .center{text-align:center}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
var $jscomp={scope:{},findInternal:function(a,g,e){a instanceof String&&(a=String(a));for(var h=a.length,k=0;k<h;k++){var m=a[k];if(g.call(e,m,k,a))return{i:k,v:m}}return{i:-1,v:void 0}}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,g,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[g]=e.value)};
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,g,e,h){if(g){e=$jscomp.global;a=a.split(".");for(h=0;h<a.length-1;h++){var k=a[h];k in e||(e[k]={});e=e[k]}a=a[a.length-1];h=e[a];g=g(h);g!=h&&null!=g&&$jscomp.defineProperty(e,a,{configurable:!0,writable:!0,value:g})}};
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,g,e,h){if(g){e=$jscomp.global;a=a.split(".");for(h=0;h<a.length-1;h++){var k=a[h];k in e||(e[k]={});e=e[k]}a=a[a.length-1];h=e[a];g=g(h);g!=h&&null!=g&&$jscomp.defineProperty(e,a,{configurable:!0,writable:!0,value:g})}};
$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,e){return $jscomp.findInternal(this,a,e).v}},"es6-impl","es3");
sysPass.Theme=function(a){var g=a.log,e={elems:{$wrap:$("#wrap-loading"),$loading:$("#loading")},show:function(a){void 0!==a&&!0===a&&e.elems.$wrap.addClass("overlay-full");e.elems.$wrap.show();e.elems.$loading.addClass("is-active")},hide:function(){e.elems.$wrap.removeClass("overlay-full").hide();e.elems.$loading.removeClass("is-active")},upgradeFull:function(){e.elems.$wrap.addClass("overlay-full")}},h=function(b){for(var d=0,f="",c;d<a.passwordData.complexity.numlength;)c=Math.floor(100*Math.random())%
94+33,!a.passwordData.complexity.symbols&&(33<=c&&47>=c||58<=c&&64>=c||91<=c&&96>=c||123<=c&&126>=c)||!a.passwordData.complexity.numbers&&48<=c&&57>=c||!a.passwordData.complexity.uppercase&&65<=c&&90>=c||(d++,f+=String.fromCharCode(c));$("#viewPass").attr("title",f);var e=zxcvbn(f);a.passwordData.passLength=f.length;b?(d=b.parent(),c=$("#"+b.attr("id")+"R"),a.outputResult(e,b),b=new MaterialTextfield,d.find("input:password").val(f),d.addClass(b.CssClasses_.IS_DIRTY).removeClass(b.CssClasses_.IS_INVALID),

View File

@@ -30,14 +30,14 @@
<tr>
<td class="descField"><?php echo __('Login'); ?></td>
<td class="valField">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<input id="login" name="login" type="text" required
class="mdl-textfield__input mdl-color-text--indigo-400"
value="<?php echo $user->getUserLogin(); ?>"
maxlength="80" <?php echo $user->isUserIsLdap() || $isReadonly; ?>>
<label class="mdl-textfield__label"
for="login"><?php echo __('Login de inicio de sesión'); ?></label>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<input id="login" name="login" type="text" required
class="mdl-textfield__input mdl-color-text--indigo-400"
value="<?php echo $user->getUserLogin(); ?>"
maxlength="80" <?php echo $user->isUserIsLdap() || $isReadonly; ?>>
<label class="mdl-textfield__label"
for="login"><?php echo __('Login de inicio de sesión'); ?></label>
</div>
<?php if ($user->isUserIsLdap()): ?>
<i class="material-icons <?php echo $icons->getIconLdapUser()->getClass(); ?>"
title="<?php echo $icons->getIconLdapUser()->getTitle(); ?>"><?php echo $icons->getIconLdapUser()->getIcon(); ?></i>
@@ -80,13 +80,13 @@
<tr>
<td class="descField"><?php echo __('Email'); ?></td>
<td class="valField">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<input id="email" name="email" type="email" required
class="mdl-textfield__input mdl-color-text--indigo-400"
value="<?php echo $user->getUserEmail(); ?>" maxlength="50" <?php echo $isReadonly; ?>>
<label class="mdl-textfield__label"
for="email"><?php echo __('Dirección de correo'); ?></label>
</div
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<input id="email" name="email" type="email" required
class="mdl-textfield__input mdl-color-text--indigo-400"
value="<?php echo $user->getUserEmail(); ?>" maxlength="50" <?php echo $isReadonly; ?>>
<label class="mdl-textfield__label"
for="email"><?php echo __('Dirección de correo'); ?></label>
</div
</td>
</tr>
@@ -125,7 +125,7 @@
<?php if (!$isView): ?>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
<textarea class="mdl-textfield__input" rows="3" id="notes" name="notes"
maxlength="1000" <?php echo $isReadonly ;?>><?php echo $user->getUserNotes(); ?></textarea>
maxlength="1000" <?php echo $isReadonly; ?>><?php echo $user->getUserNotes(); ?></textarea>
<label class="mdl-textfield__label"
for="notes"><?php echo __('Notas sobre la cuenta'); ?></label>
</div>

View File

@@ -26,7 +26,7 @@
/** @var \SP\Core\UI\ThemeIconsBase $icons */
?>
<div id="box-popup">
<h2 class="center"><?php echo $header; ?></h2>
<h2 class="center"><?php echo $header; ?><i class="btn-popup-close material-icons">close</i></h2>
<form method="post" name="frmNotices" id="frmNotices" class="form-action"
data-onsubmit="appMgmt/save"
@@ -84,14 +84,14 @@
</td>
</tr>
<?php if ($SessionUserData->isUserIsAdminApp() || $isDemo): ?>
<?php if (!$isView && ($SessionUserData->isUserIsAdminApp() || $isDemo)): ?>
<tr>
<td class="descField"><?php echo __('Usuario'); ?></td>
<td class="valField">
<div class="lowres-title"><?php echo __('Usuario'); ?></div>
<select id="notice_user" name="notice_user"
class="select-box" <?php echo $isDisabled; ?>>
class="select-box select-box-deselect" <?php echo $isDisabled; ?>>
<option value=""><?php echo __('Seleccionar Usuario'); ?></option>
<?php foreach ($users as $user): ?>
<option
@@ -110,12 +110,12 @@
<span class="mdl-switch__label"><?php echo __('Global'); ?></span>
</label>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="notice_onlyadmin"
title="<?php echo __('Sólo para administradores de la aplicación'); ?>">
<!-- <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="notice_onlyadmin"
title="<?php /*echo __('Sólo para administradores de la aplicación'); */?>">
<input type="checkbox" id="notice_onlyadmin" class="mdl-switch__input mdl-color-text--indigo-400"
name="notice_onlyadmin" <?php echo $notice->isNoticeOnlyAdmin() ? 'checked' : ' '; ?> <?php echo $isDisabled; ?>/>
<span class="mdl-switch__label"><?php echo __('Solo Admins'); ?></span>
</label>
name="notice_onlyadmin" <?php /*echo $notice->isNoticeOnlyAdmin() ? 'checked' : ' '; */?> <?php /*echo $isDisabled; */?>/>
<span class="mdl-switch__label"><?php /*echo __('Solo Admins'); */?></span>
</label>-->
</td>
</tr>
<?php endif; ?>

View File

@@ -1,5 +1,5 @@
var $jscomp={scope:{},findInternal:function(c,d,k){c instanceof String&&(c=String(c));for(var f=c.length,g=0;g<f;g++){var l=c[g];if(d.call(k,l,g,c))return{i:g,v:l}}return{i:-1,v:void 0}}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(c,d,k){if(k.get||k.set)throw new TypeError("ES3 does not support getters and setters.");c!=Array.prototype&&c!=Object.prototype&&(c[d]=k.value)};
$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global?global:c};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(c,d,k,f){if(d){k=$jscomp.global;c=c.split(".");for(f=0;f<c.length-1;f++){var g=c[f];g in k||(k[g]={});k=k[g]}c=c[c.length-1];f=k[c];d=d(f);d!=f&&null!=d&&$jscomp.defineProperty(k,c,{configurable:!0,writable:!0,value:d})}};
$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global&&null!=global?global:c};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(c,d,k,f){if(d){k=$jscomp.global;c=c.split(".");for(f=0;f<c.length-1;f++){var g=c[f];g in k||(k[g]={});k=k[g]}c=c[c.length-1];f=k[c];d=d(f);d!=f&&null!=d&&$jscomp.defineProperty(k,c,{configurable:!0,writable:!0,value:d})}};
$jscomp.polyfill("Array.prototype.find",function(c){return c?c:function(c,k){return $jscomp.findInternal(this,c,k).v}},"es6-impl","es3");
sysPass.Actions=function(c){var d=c.log,k=0,f={doAction:"/ajax/ajax_getContent.php",updateItems:"/ajax/ajax_getItems.php",user:{savePreferences:"/ajax/ajax_userPrefsSave.php",password:"/ajax/ajax_usrpass.php",passreset:"/ajax/ajax_passReset.php"},main:{login:"/ajax/ajax_doLogin.php",install:"/ajax/ajax_install.php",getUpdates:"/ajax/ajax_checkUpds.php"},checks:"/ajax/ajax_checkConnection.php",config:{save:"/ajax/ajax_configSave.php","export":"/ajax/ajax_configSave.php","import":"/ajax/ajax_configSave.php"},
file:"/ajax/ajax_filesMgmt.php",link:"/ajax/ajax_itemSave.php",plugin:"/ajax/ajax_itemSave.php",account:{save:"/ajax/ajax_itemSave.php",saveFavorite:"/ajax/ajax_itemSave.php",request:"/ajax/ajax_itemSave.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"},notice:{show:"/ajax/ajax_noticeShow.php",search:"/ajax/ajax_noticeSearch.php"}},

View File

@@ -1,5 +1,5 @@
var $jscomp={scope:{},findInternal:function(b,d,e){b instanceof String&&(b=String(b));for(var f=b.length,a=0;a<f;a++){var c=b[a];if(d.call(e,c,a,b))return{i:a,v:c}}return{i:-1,v:void 0}}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(b,d,e){if(e.get||e.set)throw new TypeError("ES3 does not support getters and setters.");b!=Array.prototype&&b!=Object.prototype&&(b[d]=e.value)};
$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global?global:b};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(b,d,e,f){if(d){e=$jscomp.global;b=b.split(".");for(f=0;f<b.length-1;f++){var a=b[f];a in e||(e[a]={});e=e[a]}b=b[b.length-1];f=e[b];d=d(f);d!=f&&null!=d&&$jscomp.defineProperty(e,b,{configurable:!0,writable:!0,value:d})}};
$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global&&null!=global?global:b};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(b,d,e,f){if(d){e=$jscomp.global;b=b.split(".");for(f=0;f<b.length-1;f++){var a=b[f];a in e||(e[a]={});e=e[a]}b=b[b.length-1];f=e[b];d=d(f);d!=f&&null!=d&&$jscomp.defineProperty(e,b,{configurable:!0,writable:!0,value:d})}};
$jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,e){return $jscomp.findInternal(this,b,e).v}},"es6-impl","es3");
sysPass.Triggers=function(b){var d=b.log,e=function(a){var c={valueField:"id",labelField:"name",searchField:["name"]};a.find(".select-box").each(function(a){var d=$(this);c.plugins=d.hasClass("select-box-deselect")?{clear_selection:{title:b.config().LANG[51]}}:{};if(d.data("onchange")){var g=d.data("onchange").split("/");c.onChange=function(a){if(0<a)if(2===g.length)sysPassApp.actions()[g[0]][g[1]](d);else sysPassApp.actions()[g[0]](d)}}d.selectize(c)});a.find("#allowed_exts").selectize({create:function(a){return{value:a.toUpperCase(),
text:a.toUpperCase()}},createFilter:/^[a-z0-9]{1,4}$/i,plugins:["remove_button"]});a.find("#wikifilter").selectize({create:!0,createFilter:/^[a-z0-9:._-]+$/i,plugins:["remove_button"]})},f=function(){d.info("updateFormHash");var a=$(".form-action[data-hash]");0<a.length&&a.each(function(){var a=$(this);a.attr("data-hash",SparkMD5.hash(a.serialize(),!1))})};return{views:{main:function(){d.info("views:main");$(".btn-menu").click(function(){var a=$(this);"1"===a.attr("data-history-reset")&&b.appRequests().history.reset();