// global variables var dhxContextMenu; var dhxGrid; var dhxToolbar; var dhxWins; var action = 'read'; var cid = 0; var email = ''; // grid elements var groups = ['1000']; var filterIndexes; var filterValues; var filters = ''; var gridHeaderH = 53; var gridRowH = 26; var gridRows = 0; var lastPage = false; var maxPages = 0; var pagingbarH = 34; var toolbarH = 34; // 0 1 2 3 4 5 6 7 8 9 0 1 2 var setInitWidthsP = '1,4,30,8,12,7,7,7,7,4,4,4,5'; var mainColumn = 2; var catChanged = 0; var currentState = 0; var editing = false; var filtering = false; var reload = 0; var sort = ''; var sortA = []; var filterA = ''; var sorting = false; var sortingOrder = ''; // session variables var bl = '17a8ec91f2fddf397a82372b478453e4'; var buffer = 0; var cat = 1; var contacts = null; var categories = null; var contact_fields = null; var eid = 0; var end_date = '01-01-1970'; var firstDay = '01-01-1970'; var filter = ''; var gotoRow = 0; var group = ''; var groupsMinId = ; var kid = ''; var kname = ''; var ksends = null; var lastDay = '01-01-1970'; var posStart = 0; var qryString = 'q=contacts-list.html'; var serial = 'I'; var serials = null; var start_date = '01-01-1970'; var uid = ; var username = ''; var year = ; var years = [ ]; var addUrl = ''; var setHeader = ''; switch (cat) { // teachers case 103: addUrl = 'add-teacher.html'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setColumnsVisibility = 'false,false,false,false,false,false,false,false,true,true,false,false,false'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setHeader = ' ,ID,Nombre,Aula,IBAN,DNI,Email,Móvil,Teléfono,Ciudad,Nómina,Fact. Auto,Estado'; setColTypes = 'sub_row_grid,ro,ro,co,ed,ed,ed,edn,edn,ed,edn,co,co'; setFilters = ',#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_text_filter,#connector_text_filter,#connector_text_filter,#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_text_filter,#connector_select_filter,#connector_select_filter' setInitWidthsP = '1,4,22,8,12,7,15,7,7,4,4,4,5'; break; // tutors case 101: addUrl = 'add-tutor.html'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setColumnsVisibility = 'false,false,false,true,true,false,false,false,true,true,true,true,false'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setHeader = ' ,ID,Nombre, , ,DNI,Email,Móvil,Teléfono,Ciudad,País,Idioma,Estado'; setColTypes = 'sub_row_grid,ro,ro,co,co,ed,ed,edn,edn,ed,co,co,co'; setFilters = ',#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_select_filter,#connector_text_filter,#connector_select_filter,#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_select_filter,#connector_select_filter,#connector_select_filter' break; // students case 100: addUrl = 'add-student.html'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setColumnsVisibility = 'false,false,false,false,false,false,false,true,true,true,true,true,false'; // 0 1 2 3 4 5 6 7 8 9 10 11 12 setHeader = ' ,ID,Alumno,Aula,Profesor,Incorporación,Curso,Móvil,Teléfono,Ciudad,País,Idioma,Estado'; setColTypes = 'sub_row_grid,ro,ro,co,co,ed,co,edn,edn,ed,co,co,co'; setFilters = ',#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_select_filter,#connector_text_filter,#connector_select_filter,#connector_text_filter,#connector_text_filter,#connector_select_filter,#connector_select_filter,#connector_select_filter,#connector_select_filter' break; } // toolbar elements var filter = ''; var tbLeft = 88+85+87+99; var tbSearch = 97+40; var tbCenter = 0; var tbExport = 0+101; var tbRight = 0; var tbSeparators = 2; // popup & context window elements var popupContact; var popupFilters; // body elements var minBodyW = 765; // resize var resizeTimer; if( parent.dhxLayout ) { dhxLayout = parent.dhxLayout; } else { dhxLayout = parent.parent.dhxLayout; } $(window).resize(function() { dhxLayout.progressOn(); clearTimeout( resizeTimer ); resizeTimer = setTimeout(setPageWidth, 250); }); function fixGridCols() { extraWidth = 0; extraWidthP = 0; totalWidth = 0; // get grid width width = ( $('body').width() - 2 ); cols = dhxGrid.getColumnsNum(); colsHidden = 0; colW = []; colWidths = setInitWidthsP.split( ',' ); //lockedColumn for(i = 0; i < cols; i++){ colWidth = dhxGrid.getColWidth( i ); colP = colWidths[i]; colW[i] = parseInt( ( colWidths[i] / 100 ) * width ); if ( dhxGrid.isColumnHidden( i ) ) { extraWidthP += parseInt( colP ); colsHidden++; } } extraWidth = parseInt( extraWidthP / ( cols - colsHidden ) ); //console.log(colWidths); //console.log(extraWidth); for(i = 0; i < cols; i++){ if ( dhxGrid.isColumnHidden( i ) ) { colWidths[i] = 0; } else { newWidth = parseInt( colWidths[i] ) + parseInt( extraWidth ); dhxGrid.setColWidth( i, newWidth.toString() ); //console.log( 'column: ' + i + ' width: ' + newWidth.toString() ); colWidths[i] = newWidth; totalWidth+= parseInt( newWidth ); } } // fix main column if ( totalWidth != 100 ) { newWidth = parseInt( colWidths[mainColumn] ) + parseInt( 100 - totalWidth ); dhxGrid.setColWidth( mainColumn, newWidth.toString() ); colWidths[mainColumn] = newWidth; } } function setAction(aid,bl,kid,sid,cid,email,username){ if ( aid == 'mail' ) { title = 'Mensaje enviado'; url = 'bitlabs/scheduler.php?mode=mail&group='+group+'&kid='+kid+'&sid='+sid+'&ids='+cid; } else { title = 'Listado actualizado'; url = 'action.html?aid='+aid+'&bl='+bl+'&kid='+kid+'&cid='+cid+'&email='+email+'&username='+username; console.log( url ); } window.dhx4.ajax.get(url,function(r){ response = r.xmlDoc; answer = window.dhx4.s2j( response.responseText ); console.log(answer); if ( response != null ) { type = (answer.status == 'OK') ? 'alert' : 'alert-error'; dhtmlx.alert( { title:title, text: 'Contacto: '+answer.msg } ); dhxLayout.progressOff(); } else { dhtmlx.alert( { title:'ERROR', type:'alert-error', text:'Ha ocurrido un error' } ); dhxLayout.progressOff(); } }); } function setContextMenu(){ dhxContextMenu = new dhtmlXMenuObject(); dhxContextMenu.setIconsPath('bitlabs/vendor/dhtmlx/imgs/'); dhxContextMenu.renderAsContextMenu(); menuItems = [ { id:'email', text:' Envío de Emails', items: [ {id: kid, text: 'Campaña '+kid+': '+kname.substr(0,30)+'' } ]}, { id:'event', text:' Control de Asistencia', items: [ {id: 'confirm', text: 'Confirmar Asistencia' }, {id: 'confirm-mail', text: 'Confirmar Asistencia y enviar email' }, {id: 'excuse', text: 'Excusar Asistencia' }, {id: 'excuse-mail', text: 'Excusar Asistencia y enviar email' } ]}, { id:'password', text:' Generar contraseña', items: [ {id: 'newpassword', text: 'Mostrar nueva contraseña en pantalla' }, {id: 'newpassword-mail', text: 'Enviar nueva contraseña por email' } ]} ]; dhxContextMenu.loadStruct(menuItems); // insert campaign and sends sends = ''; pos = 10; for (var key in ksends) { dhxContextMenu.addNewChild( 'email', pos, key, 'Envío '+key+': '+ksends[key].substr(0,25)+''); dhxContextMenu.setTooltip( key, 'Enviar email del envío '+key+': '+ksends[key].substr(0,25) ); pos += 10; console.log(pos); } // tooltips dhxContextMenu.setTooltip( kid, 'Enviar email de la campaña '+kid+': '+kname.substr(0,25) ); dhxContextMenu.setTooltip( 'confirm', 'Confirmar asistencia en la campaña actual' ); dhxContextMenu.setTooltip( 'confirm-mail', 'Confirmar asistencia en la campaña actual y enviar email de confirmación' ); dhxContextMenu.setTooltip( 'excuse', 'Excusar asistencia de la campaña actual' ); dhxContextMenu.setTooltip( 'excuse-mail', 'Excusar asistencia de la campaña actual y enviar email de excusa' ); dhxContextMenu.setTooltip( 'newpassword', 'Generar una nueva contraseña y mostrar en pantalla' ); dhxContextMenu.setTooltip( 'newpassword-mail', 'Generar una nueva contraseña y enviar por email' ); // show/hidde items if(!isMaster && !isAdmin) { dhxContextMenu.hideItem( 'email' ); } //dhxContextMenu.hideItem( 'email' ); //dhxContextMenu.hideItem( kid ); dhxContextMenu.hideItem( 'event' ); dhxContextMenu.hideItem( 'password' ); // setToolbarWidth(); dhxGrid.enableContextMenu(dhxContextMenu); dhxContextMenu.attachEvent( 'onClick', function( id ){ // detect action ID switch ( id ) { case 'confirm' : case 'confirm-mail' : aid = ( id == 'confirm' ) ? 'mok' : 'mokm'; sid = 0; break; case 'excuse' : case 'excuse-mail' : aid = ( id == 'excuse' ) ? 'mko' : 'mkom'; sid = 0; break; // send mail default : aid = 'mail'; sid = ( id == kid ) ? 0 : id; if( id == 'newpassword-mail') sid = 1002; break; } // detect id or multiple ids ids = dhxGrid.getSelectedRowId(); idList = ''; if( ids == null ) { dhtmlx.alert( { title:'ERROR', type:'alert-error', text:'Debe seleccionar un contacto' } ); return; } else { if ( ids.indexOf( ',' ) != -1 ) { ids = ids.split( ',' ); for ( var i=0; i < ids.length; i++) { console.log('multiple contacts'); cid = dhxGrid.cells( ids[i], 1 ).getValue(); email = dhxGrid.cellById( ids[i], 6).getValue(); contactStatus = parseInt( dhxGrid.cellById( ids[i], 12).getValue() ); if( contactStatus == 1 ) { dhxLayout.progressOn(); setAction(aid,bl,kid,sid,cid,email,username); } else { dhtmlx.alert( { title:'ERROR', type:'alert-error', text:'El contacto '+cid+' con email '+email+', no está activo' } ); dhxLayout.progressOff(); } } } else { console.log('single contact'); cid = dhxGrid.cells( ids, 1 ).getValue(); email = dhxGrid.cellById( ids, 6).getValue(); contactStatus = parseInt( dhxGrid.cellById( ids, 12).getValue() ); console.log(contactStatus); if( contactStatus == 1 ) { dhxLayout.progressOn(); setAction(aid,bl,kid,sid,cid,email,username); } else { dhtmlx.alert( { title:'ERROR', type:'alert-error', text:'El contacto '+cid+' con email '+email+', no está activo' } ); dhxLayout.progressOff(); } } } }); } function setFilterWindow(mode) { dhxWins= new dhtmlXWindows({ image_path: 'bitlabs/vendor/dhtmlx/imgs/', skin: 'dhx_terrace' }); if ( mode == 'filters' ) { txt = 'Añadir filtros'; } else if ( mode == 'import' ) { txt = 'Importar ' + contacts[cat]; } popupFilters = dhxWins.createWindow({ id: 'puFilters', caption: txt, left: 20, top: 20, width: 650, height: 650, center: true, modal: true }); popupFilters.button( 'minmax' ).hide(); popupFilters.button( 'park' ).hide(); popupFilters.maximize(); popupFilters.attachEvent( 'onClose', function(win){ //console.log('mode: '+mode); if ( mode == 'import' ) { url = 'grid-data.html?mode=grid&table=contacts&cat='+cat+'&kid='+kid; dhxGrid.clearAndLoad( url ); } return true; }); popupFilters.attachEvent( 'onHide', function( win ){ popupFilters.close(); //console.log('mode: '+mode); if ( mode == 'filters' ) { url = 'grid-data.html?mode=grid&table=contacts&cat='+cat+'&kid='+kid+'&filter='+filter+filters+sort+filterA+'&posStart='+posStart+'&count='+buffer; } else if ( mode == 'import' ) { url = 'grid-data.html?mode=grid&table=contacts&cat='+cat+'&kid='+kid+'&filter='+filter+filters+sort+filterA+'&posStart='+posStart+'&count='+buffer; } dhxGrid.clearAndLoad( url ); return true; }); } function setGrid( gridDiv ) { dhxGrid = new dhtmlXGridObject( gridDiv ); dhxGrid.setImagePath( 'bitlabs/vendor/dhtmlx/imgs/' ); dhxGrid.setHeader( setHeader, null, ["text-align:center;","text-align:center;","text-align:center;","text-align:center;", "text-align:center;","text-align:center;","text-align:center;","text-align:center;","text-align:center;","text-align:center;","text-align:center;","text-align:center;","text-align:center;"] ); dhxGrid.attachHeader( setFilters ); dhxGrid.setInitWidthsP( setInitWidthsP ); dhxGrid.setColAlign( 'left,left,left,center,center,center,center,center,center,center,center,center,center' ); dhxGrid.setColTypes( setColTypes ); dhxGrid.setColSorting( 'connector,connector,connector,connector,connector,connector,connector,connector,connector,connector,connector,connector,connector' ); dhxGrid.setDateFormat( '%d-%m-%Y', '%Y-%m-%d' ); if(cat==103) dhxGrid.setNumberFormat( '0,000.00 €',10,',','.'); // flag to control first time sorting on select filter var flag = true; dhxGrid.attachEvent( 'onCollectValues', function( index ) { if (flag){ flag = false; var data = this.collectValues( index ); flag = true; data.sort(); return data; } return true; }); dhxGrid.attachEvent( 'onColumnHidden', function( index, state ) { // avoids main column hiding if ( index == mainColumn && state ) dhxGrid.setColumnHidden( mainColumn, false ); fixGridCols(); }) dhxGrid.attachEvent( 'onFilterStart', function(indexes,values){ //console.log( 'onFilterStart' ); filterIndexes = indexes; filterValues = values; filterA = ''; for (var i = 0; i < filterIndexes.length; i++) { filterA += '&dhx_filter['+filterIndexes[i]+']='+filterValues[i]; } //console.log( 'onFilterStart - filter: '+filterA ); }); dhxGrid.attachEvent( 'onHeaderClick', function(index,obj){ //console.log( 'onHeaderClick' ); sorting = true; state = dhxGrid.getStateOfView(); // get sort states sortingOrder = sortA[ index ]; if ( typeof sortingOrder === 'undefined' || sortingOrder == '' ) sortingOrder = 'asc'; else if (sortingOrder == 'asc' ) sortingOrder = 'desc'; else sortingOrder = ''; sortA[ index ] = sortingOrder; sort = ''; for (var key in sortA) { if( sortA[key] ) sort += '&dhx_sort['+key+']='+sortA[key]; dhxGrid.setColumnLabel(key, dhxGrid.getColumnLabel(key) + ' ') } url = 'grid-data.html?mode=grid&table=contacts&cat='+cat+'&kid='+kid+'&filter='+filter+filters+sort+filterA+'&posStart='+posStart+'&count='+buffer; dhxGrid.clearAndLoad( url ); }); dhxGrid.attachEvent( 'onPaging', function( count ) { // remove elements from pagination toolbar $('#paging .dhx_toolbar_sep').css({'width': '75px'}); // refresh totals on pagination toolbar paginationTB = dhxGrid.aToolBar; paginationTB.removeItem('listTitle'); listTitleTxt = 'Listado de ' + contacts[cat]; paginationTB.addText('listTitle', 10, '