{
access_t *a = calloc(1, sizeof(access_t));
a->aa_uilevel = -1;
+ a->aa_uilevel_nochange = -1;
return a;
}
{
a->aa_rights = ACCESS_FULL;
a->aa_uilevel = UILEVEL_EXPERT;
+ a->aa_uilevel_nochange = config.uilevel_nochange;
return a;
}
if(ae->ae_uilevel > a->aa_uilevel)
a->aa_uilevel = ae->ae_uilevel;
+ if(ae->ae_uilevel_nochange > a->aa_uilevel_nochange)
+ a->aa_uilevel_nochange = ae->ae_uilevel_nochange;
+
if(ae->ae_chmin || ae->ae_chmax) {
uint64_t *p = realloc(a->aa_chrange, (a->aa_chrange_count + 2) * sizeof(uint64_t));
if (p) {
}
if (a->aa_uilevel < 0)
a->aa_uilevel = config.uilevel;
+ if (a->aa_uilevel_nochange < 0)
+ a->aa_uilevel_nochange = config.uilevel_nochange;
}
/**
TAILQ_INIT(&ae->ae_ipmasks);
ae->ae_uilevel = UILEVEL_DEFAULT;
+ ae->ae_uilevel_nochange = -1;
if (conf) {
/* defaults */
return strtab2htsmsg(tab, 1, lang);
}
+static htsmsg_t *
+uilevel_nochange_get_list ( void *o, const char *lang )
+{
+ static const struct strtab tab[] = {
+ { N_("Default"), -1 },
+ { N_("No"), 0 },
+ { N_("Yes"), 1 },
+ };
+ return strtab2htsmsg(tab, 1, lang);
+}
+
const idclass_t access_entry_class = {
.ic_class = "access",
.ic_caption = N_("Access"),
.list = uilevel_get_list,
.opts = PO_EXPERT
},
+ {
+ .type = PT_INT,
+ .id = "uilevel_nochange",
+ .name = N_("Persistent user interface level"),
+ .off = offsetof(access_entry_t, ae_uilevel_nochange),
+ .list = uilevel_nochange_get_list,
+ .opts = PO_EXPERT
+ },
{
.type = PT_STR,
.id = "lang",
int ae_index;
int ae_enabled;
int ae_uilevel;
+ int ae_uilevel_nochange;
int ae_streaming;
int ae_adv_streaming;
uint32_t aa_conn_streaming;
uint32_t aa_conn_dvr;
int aa_uilevel;
+ int aa_uilevel_nochange;
} access_t;
TAILQ_HEAD(access_ticket_queue, access_ticket);
.list = config_class_uilevel,
.group = 1
},
+ {
+ .type = PT_BOOL,
+ .id = "uilevel_nochange",
+ .name = N_("Persistent user interface level"),
+ .off = offsetof(config_t, uilevel_nochange),
+ .opts = PO_ADVANCED,
+ .group = 1
+ },
{
.type = PT_U32,
.id = "cookie_expires",
idnode_t idnode;
uint32_t version;
int uilevel;
+ int uilevel_nochange;
char *full_version;
char *server_name;
char *language;
case UILEVEL_EXPERT: s = "expert"; break;
default: s = NULL; break;
}
- if (s)
+ if (s) {
htsmsg_add_str(m, "uilevel", s);
+ if (config.uilevel_nochange)
+ htsmsg_add_u32(m, "uilevel_nochange", config.uilevel_nochange);
+ }
if (!access_noacl)
htsmsg_add_str(m, "username", username);
if (hc->hc_peer_ipstr)
tvheadend.acleditor = function(panel, index)
{
var list = 'enabled,username,password,prefix,' +
- 'lang,webui,uilevel,admin,' +
+ 'lang,webui,uilevel,uilevel_nochange,admin,' +
'streaming,adv_streaming,htsp_streaming,' +
'profile,conn_limit_type,conn_limit,' +
'dvr,htsp_dvr,all_dvr,all_rw_dvr,' +
'channel_tag_exclude,channel_tag,comment';
var list2 = 'enabled,username,password,prefix,' +
- 'lang,webui,langui,uilevel,admin,' +
+ 'lang,webui,langui,uilevel,uilevel_nochange,admin,' +
'streaming,adv_streaming,htsp_streaming,' +
'profile,conn_limit_type,conn_limit,' +
'dvr,htsp_dvr,all_dvr,all_rw_dvr,' +
}
var uilevelBtn = null;
- if (!conf.uilevel || conf.uilevel !== 'expert') {
+ if (!tvheadend.uilevel_nochange && (!conf.uilevel || conf.uilevel !== 'expert')) {
uilevelBtn = tvheadend.idnode_uilevel_menu(uilevel, function(l) {
uilevel = l;
var values = panel.getForm().getFieldValues();
}
}
- if (!conf.uilevel || conf.uilevel !== 'expert') {
+ if (!tvheadend.uilevel_nochange && (!conf.uilevel || conf.uilevel !== 'expert')) {
abuttons.uilevel = tvheadend.idnode_uilevel_menu(uilevel, function (l) {
uilevel = l;
for (var i = 0; i < ifields.length; i++) {
}
}
- if (!conf.uilevel || conf.uilevel !== 'expert') {
+ if (!tvheadend.uilevel_nochange && (!conf.uilevel || conf.uilevel !== 'expert')) {
abuttons.uilevel = tvheadend.idnode_uilevel_menu(uilevel, function (l) {
uilevel = l;
var values = null;
}
}
- if (!conf.uilevel || conf.uilevel !== 'expert') {
+ if (!tvheadend.uilevel_nochange && (!conf.uilevel || conf.uilevel !== 'expert')) {
abuttons.uilevel = tvheadend.idnode_uilevel_menu(uilevel, uilevel_change);
buttons.push('->');
buttons.push(abuttons.uilevel);
tvheadend.admin = false;
tvheadend.dialog = null;
tvheadend.uilevel = 'expert';
+tvheadend.uilevel_nochange = false;
tvheadend.uilevel_cb = [];
tvheadend.cookieProvider = new Ext.state.CookieProvider({
tvheadend.admin = o.admin == true;
+ if (o.uilevel_nochange)
+ tvheadend.uilevel_nochange = true;
+
if ('info_area' in o)
tvheadend.rootTabPanel.setInfoArea(o.info_area);
if ('username' in o)