'use strict' var manage = new function(){ var that = this; var j_index_page; var manage_node = new vus.node('manage'); var dash_node = new vus.node('dash'); var square_node = new vus.node('square'); var problem_node = new vus.node('problem'); var j_tabnav_dash; var j_tabnav_square; var j_tabnav_problem; that.ready = function(){ j_index_page = $('#index_page'); manage_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in'){ index.set_menu('管理'); index.clear_tabnav(); j_tabnav_dash = index.add_tabnav('儀表板','/toj/manage/dash/'); j_tabnav_square = index.add_tabnav('方塊','/toj/manage/square/'); j_tabnav_problem = index.add_tabnav('題目','/toj/manage/problem/'); } return 'cont'; }; com.vus_root.child_set(manage_node); dash_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in'){ j_tabnav_dash.active(); com.loadpage('/toj/html/manage_dash.html','/toj/css/manage_dash.css').done(function(){ var i; var j_accesslist = j_index_page.find('table.accesslist'); var j_item; var j_permission; var accessid; var authlist; var autho; authlist = new Array(); for(accessid in user.authmap){ authlist.push(user.authmap[accessid]); } authlist.sort(function(a,b){ return a.accessid - b.accessid; }); for(i = 0;i < authlist.length;i++){ autho = authlist[i]; j_item = $(''); j_item.find('td.accessid').text(autho.accessid); j_permission = j_item.find('td.permission'); if(com.check_access(autho.accessid,ACCESS_READ)){ j_permission.append($('READ')); } if(com.check_access(autho.accessid,ACCESS_WRITE)){ j_permission.append($('WRITE')); } if(com.check_access(autho.accessid,ACCESS_CREATE)){ j_permission.append($('CREATE')); } if(com.check_access(autho.accessid,ACCESS_DELETE)){ j_permission.append($('DELETE')); } if(com.check_access(autho.accessid,ACCESS_SETPER)){ j_permission.append($('SETPER')); } if(com.check_access(autho.accessid,ACCESS_EXECUTE)){ j_permission.append($('EXECUTE')); } j_accesslist.append(j_item); } }); }else if(direct == 'out'){ } return 'cont'; }; manage_node.child_set(dash_node); square_node.url_chg = function(direct,url_upart,url_dpart,param){ var j_create; var j_set; var j_list; var cate_idmap; var id_catemap; var create_tagbox_cate; var set_tagbox_cate; var set_data; function _item_set(j_item,id,title,hidden,start_time,end_time,cateid,intro,logo){ var i; var j_hidden; var j_cate; var j_label; j_item.find('td.id').text(id); j_item.find('td.title').text(title); if(start_time != null){ j_item.find('td.time div.start').text('┌─' + com.get_timestring(start_time)); } if(end_time != null){ j_item.find('td.time div.end').text('└→' + com.get_timestring(end_time)); } j_hidden = j_item.find('td.hid'); if(hidden == false){ j_hidden.text('公開'); j_hidden.removeClass('text-warning'); }else{ j_hidden.text('隱藏'); j_hidden.addClass('text-warning'); } j_cate = j_item.find('td.cate'); j_cate.empty(); for(i = 0;i < cateid.length;i++){ j_label = $(''); j_label.text(cate_idmap[cateid[i]]); j_cate.append(j_label); } j_item.find('button.set').off('click').on('click',function(e){ set_data = { 'id':id, 'title':title, 'hidden':hidden, 'start_time':start_time, 'end_time':end_time, 'cateid':cateid, 'intro':intro, 'logo':logo, }; j_set.modal('show'); }); j_item.find('button.del').off('click').on('click',function(e){ com.call_backend('core/square/','delete_square',function(result){ if(com.is_callerr(result)){ index.add_alert('alert-error','失敗','刪除方塊發生錯誤'); }else{ _update_list(); } },id); }); } function _item_create(id,title,hidden,start_time,end_time,cateid,intro,logo){ var j_item = $('
'); _item_set(j_item,id,title,hidden,start_time,end_time,cateid,intro,logo); return j_item; } function _update_sqmod(){ var defer = $.Deferred(); com.call_backend('core/square/','list_sqmod',function(result){ var data = result.data; if(com.is_callerr(result)){ index.add_alert('','警告','管理發生錯誤'); defer.reject(data); }else{ defer.resolve(data); } }); return defer.promise(); } function _update_list(){ com.call_backend('core/square/','list_category',function(result){ var i; var data = result.data; var catelist; var cateo; if(com.is_callerr(result)){ index.add_alert('','警告','管理發生錯誤'); }else{ cate_idmap = new Object(); id_catemap = new Object(); catelist = new Array(); for(i = data.length - 2;i >= 0;i--){ cateo = data[i]; cate_idmap[cateo.cateid] = cateo.catename; id_catemap[cateo.catename] = cateo.cateid; catelist.push(cateo.catename); } create_tagbox_cate.set_words(catelist); set_tagbox_cate.set_words(catelist); com.call_backend('core/square/','list_square',function(result){ var i; var data = result.data; var items; var j_item; var sqo; if(com.is_callerr(result)){ index.add_alert('','警告','管理發生錯誤'); }else{ items = j_list.find('tr.item'); for(i = 0;i < Math.min(items.length,data.length);i++){ sqo = data[i]; if(sqo.start_time != null){ sqo.start_time = new Date(sqo.start_time); } if(sqo.end_time != null){ sqo.end_time = new Date(sqo.end_time); } _item_set($(items[i]),sqo.sqid, sqo.title, sqo.hidden, sqo.start_time, sqo.end_time, sqo.cateid, sqo.intro, sqo.logo); } for(;i < data.length;i++){ sqo = data[i]; j_item = _item_create(sqo.sqid, sqo.title, sqo.hidden, sqo.start_time, sqo.end_time, sqo.cateid, sqo.intro, sqo.logo); j_list.append(j_item); } for(;i < items.length;i++){ $(items[i]).remove(); } } }); } }); } if(direct == 'in'){ com.loadpage('/toj/html/manage_square.html','/toj/css/manage_square.css').done(function(){ var j_catebox; var j_button; j_tabnav_square.active(); j_create = j_index_page.find('div.create'); j_set = j_index_page.find('div.set'); j_list = j_index_page.find('table.list > tbody'); j_catebox = j_create.find('div.catebox'); create_tagbox_cate = j_catebox.tagbox({'words':[],'restrict':true,'duplicate':false}); j_catebox.find('input').attr('placeholder','+加入分類'); j_button = j_index_page.find('div.oper > button.create'); if(com.check_access(ACCESSID_SQUAREMG,ACCESS_CREATE)){ j_button.show(); } j_index_page.find('div.oper > button.create').on('click',function(e){ j_create.modal('show'); }); j_create.find('[name="logo"]').on('change',function(e){ var url; var j_logo = j_create.find('img.logo'); if((url = $(this).val()) == ''){ j_logo.hide(); }else{ j_logo.attr('src',url); j_logo.show(); } }); j_create.find('button.submit').on('click',function(e){ var i; var title = j_create.find('[name="title"]').val(); var intro = j_create.find('[name="intro"]').val(); var logo = j_create.find('[name="logo"]').val(); var sqmodid = parseInt(j_create.find('[name="sqmod"]').val()); var hidden = j_create.find('[name="hidden"]').val(); var tags = create_tagbox_cate.get_tag(); var cateid_list; if(hidden == '0'){ hidden = false; }else{ hidden = true; } cateid_list = new Array(); for(i = 0;i < tags.length;i++){ cateid_list.push(id_catemap[tags[i]]); } com.call_backend('core/square/','create_square',function(result){ var data = result.data; var err = null; if(com.is_callerr(result)){ if(data == 'Etitle_too_short'){ err = '方塊名稱過短'; }else if(data == 'Etitle_too_long'){ err = '方塊名稱過長'; }else if(data == 'Eintro_too_short'){ err = '方塊介紹過短'; }else if(data == 'Eintro_too_long'){ err = '方塊介紹過長'; }else if(data == 'Elogo_too_short'){ err = '方塊圖片網址過短'; }else if(data == 'Elogo_too_long'){ err = '方塊圖片網址過長'; }else if(data == 'Etoo_many_category'){ err = '方塊分類過多'; } if(err != null){ index.add_alert('alert-error','失敗',err); }else{ index.add_alert('','警告','管理發生錯誤'); } }else{ index.add_alert('alert-success','成功','方塊已建立'); j_create.modal('hide'); _update_list(); } },title,hidden,sqmodid,intro,logo,cateid_list); }); j_create.find('button.cancel').on('click',function(e){ j_create.modal('hide'); }); j_create.on('show.bs.modal',function(e){ _update_sqmod().done(function(sqmod_list){ var i; var j_sqmod; var j_option; var sqmodo; j_sqmod = j_create.find('[name="sqmod"]'); j_sqmod.empty(); for(i = 0;i < sqmod_list.length;i++){ sqmodo = sqmod_list[i]; j_option = $(''); j_option.attr('value',sqmodo.sqmodid); j_option.text(sqmodo.sqmodname); j_sqmod.append(j_option); } }); }); j_create.on('shown.bs.modal',function(e){ create_tagbox_cate.refresh(); }); j_create.on('hide.bs.modal',function(e){ j_create.find('input').val(''); j_create.find('img.logo').attr('src',null); create_tagbox_cate.clear(); }); j_catebox = j_set.find('div.catebox'); set_tagbox_cate = j_catebox.tagbox({'words':[],'restrict':true,'duplicate':false}); j_catebox.find('input').attr('placeholder','+加入分類'); j_set.find('[name="logo"]').on('change',function(e){ var url; var j_logo = j_set.find('img.logo'); if((url = $(this).val()) == ''){ j_logo.attr('src',com.get_defaultimg(set_data.id)); }else{ j_logo.attr('src',url); } }); j_set.on('show.bs.modal',function(e){ var i; var url; j_set.find('[name="title"]').val(set_data.title); j_set.find('[name="intro"]').val(set_data.intro); j_set.find('[name="logo"]').val(set_data.logo); if((url = set_data.logo) == ''){ url = com.get_defaultimg(set_data.id); } j_set.find('img.logo').attr('src',url); if(set_data.hidden == false){ j_set.find('[name="hidden"]').val(0); }else{ j_set.find('[name="hidden"]').val(1); } set_tagbox_cate.clear(); for(i = 0;i < set_data.cateid.length;i++){ set_tagbox_cate.add_tag(cate_idmap[set_data.cateid[i]]); } }); j_set.on('shown.bs.modal',function(e){ set_tagbox_cate.refresh(); }); j_set.find('button.submit').on('click',function(e){ var i; var title = j_set.find('[name="title"]').val(); var intro = j_set.find('[name="intro"]').val(); var logo = j_set.find('[name="logo"]').val(); var hidden = j_set.find('[name="hidden"]').val(); var tags = set_tagbox_cate.get_tag(); var cateid_list; if(hidden == '0'){ hidden = false; }else{ hidden = true; } cateid_list = new Array(); for(i = 0;i < tags.length;i++){ cateid_list.push(id_catemap[tags[i]]); } com.call_backend('core/square/','set_square',function(result){ var data = result.data; var err = null; if(com.is_callerr(result)){ if(data == 'Etitle_too_short'){ err = '方塊名稱過短'; }else if(data == 'Etitle_too_long'){ err = '方塊名稱過長'; }else if(data == 'Eintro_too_short'){ err = '方塊介紹過短'; }else if(data == 'Eintro_too_long'){ err = '方塊介紹過長'; }else if(data == 'Elogo_too_short'){ err = '方塊圖片網址過短'; }else if(data == 'Elogo_too_long'){ err = '方塊圖片網址過長'; }else if(data == 'Etoo_many_category'){ err = '方塊分類過多'; } if(err != null){ index.add_alert('alert-error','失敗',err); }else{ index.add_alert('','警告','管理發生錯誤'); } }else{ index.add_alert('alert-success','成功','方塊已設定'); j_set.modal('hide'); _update_list(); } },set_data.id,title,set_data.start_time,set_data.end_time,hidden,intro,logo,cateid_list); }); j_set.find('button.cancel').on('click',function(e){ j_set.modal('hide'); }); j_set.on('hide.bs.modal',function(e){ j_set.find('input').val(''); j_set.find('img.logo').attr('src',null); set_tagbox_cate.clear(); }); _update_list(); }); } return 'cont'; }; manage_node.child_set(square_node); problem_node.url_chg = function(direct,url_upart,url_dpart,param){ var j_create; var j_set; var j_list; var set_data; function _item_set(j_item,proid,title,hidden,pmodid){ var j_hidden; j_item.find('td.proid').text(proid); j_item.find('td.title').text(title); j_hidden = j_item.find('td.hid'); if(hidden == false){ j_hidden.text('公開'); j_hidden.removeClass('text-warning'); }else{ j_hidden.text('隱藏'); j_hidden.addClass('text-warning'); } j_item.find('button.set').on('click',function(e){ set_data = { 'proid':proid, 'title':title, 'hidden':hidden }; j_set.modal('show'); }); j_item.find('button.del').on('click',function(e){ com.call_backend('core/problem/','delete_problem',function(result){ if(com.is_callerr(result)){ index.add_alert('alert-error','失敗','刪除題目發生錯誤'); }else{ _update_list(); } },proid); }); } function _item_create(proid,title,hidden,pmodid){ var j_item = $('
'); _item_set(j_item,proid,title,hidden,pmodid); return j_item; } function _update_pmod(){ var defer = $.Deferred(); com.call_backend('core/problem/','list_pmod',function(result){ var i; var data = result.data; var j_pmod; var j_option; if(com.is_callerr(result)){ index.add_alert('','警告','管理發生錯誤'); defer.reject(data); }else{ defer.resolve(data); } }); return defer.promise(); } function _update_list(){ com.call_backend('core/problem/','list_problem',function(result){ var i; var data = result.data; var proo; var j_item; if(com.is_callerr(result)){ index.add_alert('','警告','管理發生錯誤'); }else{ j_list.empty(); for(i = 0;i < data.length;i++){ proo = data[i]; j_item = _item_create(proo.proid,proo.title,proo.hidden,proo.pmodid); j_list.append(j_item); } } }); } if(direct == 'in'){ j_tabnav_problem.active(); com.loadpage('/toj/html/manage_problem.html','/toj/css/manage_problem.css').done(function(){ var j_button; j_create = j_index_page.find('div.create'); j_set = j_index_page.find('div.set'); j_list = j_index_page.find('table.list > tbody'); j_button = j_index_page.find('div.oper > button.create'); if(com.check_access(ACCESSID_PROBLEMMG,ACCESS_CREATE)){ j_button.show(); } j_button.on('click',function(e){ j_create.modal('show'); }); j_create.on('show.bs.modal',function(e){ _update_pmod().done(function(pmod_list){ var i; var j_pmod; var j_option; j_pmod = j_create.find('[name="pmod"]'); j_pmod.empty(); for(i = 0;i < pmod_list.length;i++){ j_option = $(''); j_option.attr('value',pmod_list[i].pmodid); j_option.text(pmod_list[i].pmodname); j_pmod.append(j_option); } }); }); j_create.on('hide.bs.modal',function(e){ j_create.find('input').val(''); }); j_create.find('button.submit').on('click',function(e){ var title = j_create.find('[name="title"]').val(); var pmodid = parseInt(j_create.find('[name="pmod"]').val()); var hidden = j_create.find('[name="hidden"]').val(); if(hidden == '0'){ hidden = false; }else{ hidden = true; } com.call_backend('core/problem/','create_problem',function(result){ var data = result.data; var err = null; if(com.is_callerr(result)){ if(data == 'title_too_short'){ err = '題目名稱過短'; }else if(data == 'title_too_long'){ err = '題目名稱過長'; } if(err != null){ index.add_alert('alert-error','失敗',err); }else{ index.add_alert('','警告','管理發生錯誤'); } }else{ j_create.modal('hide'); index.add_alert('alert-success','成功','題目已建立'); _update_list(); } },title,hidden,pmodid); }); j_create.find('button.cancel').on('click',function(e){ j_create.modal('hide'); }); j_set.on('show.bs.modal',function(e){ j_set.find('[name="title"]').val(set_data.title); if(set_data.hidden == false){ j_set.find('[name="hidden"]').val(0); }else{ j_set.find('[name="hidden"]').val(1); } }); j_set.on('hide.bs.modal',function(e){ j_set.find('input').val(''); }); j_set.find('button.submit').on('click',function(e){ var title = j_set.find('[name="title"]').val(); var hidden = j_set.find('[name="hidden"]').val(); if(hidden == '0'){ hidden = false; }else{ hidden = true; } com.call_backend('core/problem/','set_problem',function(result){ var data = result.data; var err = null; if(com.is_callerr(result)){ if(data == 'title_too_short'){ err = '題目名稱過短'; }else if(data == 'title_too_long'){ err = '題目名稱過長'; } if(err != null){ index.add_alert('alert-error','失敗',err); }else{ index.add_alert('','警告','管理發生錯誤'); } }else{ j_set.modal('hide'); index.add_alert('alert-success','成功','題目已設定'); _update_list(); } },set_data.proid,title,hidden); }); j_set.find('button.cancel').on('click',function(e){ j_set.modal('hide'); }); _update_list(); }); } return 'cont'; }; manage_node.child_set(problem_node); }; };