[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запутался в JQuery. В тупике
Jops
Уважаемые товарищи!

Не смотря на то, что у меня приемлимые знания JS и определённые познания в JQuery, я завис в этом коде. Он не всегда логичен и мне кажется слишком расписан (хотя может и ошибаюсь). С комментами проблема.
Результат: Он вводит таблицу, оформленную под блоки. В шапке по блокам разбиты Пользователь/его ID, в левой крайней колонке так же по блокам Камера/ её ID, в центре на пересечениях Камера-Пользователь формируется БЛОК с правами Разрешено для групп:Разрешено вручную: Итого и напротив каждого статус (из var lang).

Моя задача - это сменить пользователей на группы и соответственно поменять значение статусов. Но проблема в том, что я не могу найти логику в JQuery. Я понимаю, что задачка займёт прилично времени и мало кто вообще захочет взяться за подобное, но всё же прошу Вас помочь мне и откоментить несколько моментов, которые я не могу понять (всё указанно в виде комментариев в файлах)


JQuery

var sid    = '';
var uname = '';
var script_func = null;
var cams = {};
var groups = {};
var users = {};
var groups = {};
var rules = {};
var rules_all = {};
var rules_group = {};

//Переменная для отрисовки определённых выбранных значений

var lang = {
"cams": {
"enabled" : {0: "<span class='red'>Выкл</span>",1: "<span class='green'>Вкл</span>"},
"transcode" : {0: "<span class='gray'>Отключено</span>", 1: "<span class='green'>Включено</span>"},
"convert" : {0: "<span class='gray'>Отключено</span>", 1: "<span class='green'>Включено</span>"},
"status" : {"-1": "<span class='red'>Нет вещания</span>", 0: "<span class='gray'>Неизвестно</span>", 1: "<span class='green'>Работает</span>"},
"allowed" : {0: "<span class='red'>Нет</span>", 1: "<span class='green'>Да</span>", 2: "<span class='orange'>Только онлайн</span>"}
}
,
"users": {
"is_admin" : {0: "<span class='green'>Нет</span>",1: "<span class='red'>Да</span>"},
"no_group" : "<span class='gray'>Нет</span>"
},
"rules": {
"allowed" : {'-1': "<span>Не заданно</span>", 0: "<span class='red'>Нет</span>", 1: "<span class='green'>Да</span>", 2: "<span class='orange'>Только онлайн</span>"},
"allowedbox": {0: 'f-message f-message-none', 1: 'f-message f-message-success', 2: 'f-message'}
}
}
;





//Автоматически запускается пи переходе по ссылки на страницу с таблицей (которая формируется с помощью function rules_draw())
function func_rules() {
//if(!inited.users) {
$("#rules_reload").click(function(){
func_rules();
});
$.when(get_allrules_data(),get_users_data(),get_cams_data()).done(function(){rules_draw();}).fail(function(){sad();});
}





//Функция обменивается данными с PERL не очень понятно в каком плане(в частности интересует всё что начинается с for(...){... и кончается error:...)
function get_allrules_data() {
var cam_url = cam_control+"/cgi-bin/admin.pl?m=getallrules";
return $.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: cam_url,
success: function(data){
if(data.error != undefined) {
if(undefined != err_lang[data.error]) {
alert('Ошибка: '+err_lang[data.error]);
}else{
alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
}
}
else {

for (var data_line in data) {
if(data[data_line].cam_id == undefined || data[data_line].user_id == undefined) {continue;}

var temp_cid = data[data_line].cam_id;
var temp_uid = data[data_line].user_id;

if(rules_all[temp_cid] == undefined) {rules_all[temp_cid] = {};}
if(rules_all[temp_cid][temp_uid] == undefined) {rules_all[temp_cid][temp_uid] = {};}
rules_all[temp_cid][temp_uid] = data[data_line];
rules_all[temp_cid][temp_uid].cam_id = undefined;
rules_all[temp_cid][temp_uid].user_id = undefined;
if(rules_all[temp_cid][temp_uid].rule_status_group == undefined) {rules_all[temp_cid][temp_uid].rule_status_group = -1;}
if(rules_all[temp_cid][temp_uid].rule_status == undefined) {rules_all[temp_cid][temp_uid].rule_status = -1;}
}
}
}
,
error:function (xhr, ajaxOptions, thrownError, request, error){
alert('Возникла ошибка загрузки прав, попробуйте подгрузить их позже. \n [ \n'+'xrs.status = ' + xhr.status + '\n' + 'thrown error = ' + thrownError + '\n' + 'xhr.statusText = ' + xhr.statusText + '\n' +
'request = ' + request + '\n' + 'error = ' + error+' \n ]');
}
}
);
}






//Фуункция обменивается данными с PERL касательно USERS`ов (если надо)

/*function get_users_data(){
var cam_url = cam_control+"/cgi-bin/admin.pl?m=getusers";
return $.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: cam_url,
success: function(data){
if(data.error != undefined) {
if(undefined != err_lang[data.error]) {
alert('Ошибка: '+err_lang[data.error]);
}else{
alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
}
} else {
for (var data_line in data) {users[data[data_line].user_id] = data[data_line];}
}
},
error:function (xhr, ajaxOptions, thrownError, request, error){
alert('Возникла ошибка загрузки камер, попробуйте подгрузить их позже. \n [ \n'+'xrs.status = ' + xhr.status + '\n' + 'thrown error = ' + thrownError + '\n' + 'xhr.statusText = ' + xhr.statusText + '\n' +
'request = ' + request + '\n' + 'error = ' + error+' \n ]');
}
});
}*/





//Фуункция обменивается данными с PERL касательно камер (если надо)

/*function get_cams_data() {
var cam_url = cam_control+"/cgi-bin/admin.pl?m=getcams";
return $.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: cam_url,
success: function(data){
if(data.error != undefined) {
if(undefined != err_lang[data.error]) {
alert('Ошибка: '+err_lang[data.error]);
}else{
alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
}
} else {
for (var data_line in data) {cams[data[data_line].cam_id] = data[data_line];}
}
},
error:function (xhr, ajaxOptions, thrownError, request, error){
alert('Возникла ошибка загрузки камер, попробуйте подгрузить их позже. \n [ \n'+'xrs.status = ' + xhr.status + '\n' + 'thrown error = ' + thrownError + '\n' + 'xhr.statusText = ' + xhr.statusText + '\n' +
'request = ' + request + '\n' + 'error = ' + error+' \n ]');
}
});
}*/


//Функция отрисовки таблицы (интересуют все for(...){... , особенно два последних)

function rules_draw() {

var usr_table = $("#rules_list");
$('thead',usr_table).remove();
$('tbody',usr_table).remove();
var temp_line = null;
// Шапка таблицы
var temp_head = $('<thead/>', {});
var temp_line = $('<tr/>', {});
$(temp_line)
.
append($('<th/>',{text: 'Камера'})
);


for (var usr_line in users) {
var usr = users[usr_line];
if(usr == null) {continue;}
$(temp_line)
.
append($('<th/>',{})
.
append($('<div/>',{
html: '<b>'+usr.user_login+'<b/><br/>',
"class": lang.rules.allowedbox[usr.is_admin]
}).bind('click',(function(usr){return function(){adm_usr(usr.user_id)}})(usr))
.
append($('<span/>',{html: '<span class="tip">(id: '+usr.user_id+')</span>'}))
)
)
;

$(usr_table).append(temp_line);
}
$(temp_head).append(temp_line);
$(usr_table).append(temp_head);

// Тело таблицы

$temp_line = null;

for (var cid in rules_all) {
var rules = rules_all[cid];
if(rules == undefined || rules == null) {continue;}
temp_line = $('<tr/>',{id:'rules'+cid});
$(temp_line)
.
append($('<td/>',{})
.
append($('<div/>',{
html: '<b>'+rules[usr.user_id].cam_name+'<b/><br/>', // при любых изменениях эта строка не определяется в FireBug. Не могу понять откуда берёт данные
"class": lang.rules.allowedbox[rules[usr.user_id].allowed_to_all]})
.
append($('<span/>',{html: '<span class="tip">(id: '+cid+')</span>'}))
)
);

for (var usr_line in users) {
var usr = users[usr_line];
if(usr == null) {continue;}
$(temp_line)
.
append($('<td/>',{})
.
append($('<div/>',{html:
'Разрешено группой: '+lang.rules.allowed[rules[usr.user_id].rule_status_group]+'<br />'//Аналогично
+'Разрешено вручную: '+lang.rules.allowed[rules[usr.user_id].rule_status]+'<br />' //верхнему
+'Итог: '+lang.rules.allowed[rules[usr.user_id].result], //описанию
"class":lang.rules.allowedbox[rules[usr.user_id].result] //
}))

)
;

}
$(usr_table).append(temp_line);
}

}



PERL

# Отдаёт данные из таблицы камер
when ("getcams") {
my $sth;
$sth = $dbh->prepare(q{
SELECT cam_id, cam_priority, cam_name, cam_alias, cam_protocol,
cam_user, cam_pass, cam_addr, cam_enabled, need_transcode, need_convert,
cam_width, cam_height, allowed_to_all, cam_status
FROM `cams_list`
ORDER BY cam_id ASC
});
$sth->execute;

my ($row, @cams);
my $priority = 0;

while( $row = $sth->fetchrow_hashref() ) { push(@cams,$row); }
$sth->finish;

my $coder = JSON::XS->new->canonical()->allow_nonref;
print $coder->encode (\@cams);

exit;
}


# Отдаёт данные из таблицы пользователей
when ("getusers") {
my $sth;
$sth = $dbh->prepare(q{
SELECT
cu.user_id, cg.group_id, cg.group_name, cu.user_login, cu.user_salt, cu.user_info, cu.is_admin,
SUM(IF(vrr.result = 0, cnt, 0)) as res_dlw,
SUM(IF(vrr.result = 1, cnt, 0)) as res_alw,
SUM(IF(vrr.result = 2, cnt, 0)) as res_ono
FROM cams_users as cu
LEFT JOIN cams_groups as cg ON cg.group_id = cu.group_id
INNER JOIN (
SELECT
vr.user_id, vr.result, COUNT(*) as cnt
FROM view_rules as vr
GROUP BY vr.user_id, vr.result
) as vrr ON vrr.user_id = cu.user_id
GROUP BY cu.user_id
});
$sth->execute;

my ($row, @users);
my $priority = 0;

while( $row = $sth->fetchrow_hashref() ) { push(@users,$row); }
$sth->finish;

my $coder = JSON::XS->new->canonical()->allow_nonref;
print $coder->encode (\@users);

exit;
}


# Отдаёт данные из таблицы прав для камер, юзеров и групп
when ("getallrules") {
my $sth;

$sth = $dbh->prepare(q{
SELECT
`cam_id`,`user_id`,
`cam_name`,`allowed_to_all`,`is_admin`,`rule_status_group`,`rule_status`,`result`
FROM `view_rules`
});
$sth->execute;

my ($row, @rules);
my $priority = 0;

while( $row = $sth->fetchrow_hashref() ) { push(@rules,$row); }
$sth->finish;

my $coder = JSON::XS->new->canonical()->allow_nonref;
print $coder->encode (\@rules);

exit;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.