Chart.defaults.global.animation.duration = 900; Chart.defaults.global.responsive = true; Chart.defaults.global.maintainAspectRatio = false; var the_chart = {}, page_loader = app.get_loader2('Loading...'); var base_url = app.get_vars().baseurl; var date_range; var start_date = '30daysAgo'; var end_date = 'yesterday'; // load a locale numeral.register('locale', 'fr', { delimiters: { thousands: ' ', decimal: ',' }, abbreviations: { thousand: 'k', million: 'm', billion: 'b', trillion: 't' }, ordinal : function (number) { return number === 1 ? 'er' : 'ème'; }, currency: { symbol: 'MGA' } }); function convertNumberToFr(number){ return (number % 1 == 1)? numeral(number).format('0,0.00') : numeral(number).format('0,0'); } // switch between locales numeral.locale('fr'); var dashboard = (function ($, window, jQuery) { var _vars_ = {}; var activeUsers; /* * initialize the daterangepicker, set the default date range to 30 days ago from current date */ $('.datetimepicker').daterangepicker({ autoApply: true, locale: { format: 'DD/MM/YYYY', // cancelLabel : dashboard_data.cancel, // applyLabel : 'Appliquer le filtre', "daysOfWeek": 'di_lu_ma_me_je_ce_sa'.split('_'), "monthNames": 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_') }, defaultDate : moment().subtract(30, 'days'), startDate: moment().subtract(30, 'days'), endDate: moment().subtract(1, 'days'), maxDate: moment().subtract(1, 'days'), }); return { "set_vars": function (options) { $.extend(_vars_, options || {}); }, "get_vars" : function(){ return _vars_; }, "initEventListeners" : function(){ // Filter dashboard data $('button#filter_dashboard_data').on('click', function(event) { event.preventDefault(); $('.tab-pane.active').prepend(page_loader); app.btn_loader('#filter_dashboard_data'); date_range = ($('#ga_date_range').val()).split(' - '); start_date = date_range[0]; end_date = date_range[1]; // set user type filter // $('string/element/array/function/jQuery object/string, context') // console.log(utype); var utype_cb = $('.user-filter:checked').toArray(); var utype_filter = []; var utype = ''; if (utype_cb.length >= 3 || utype_cb.length == 0) { utype = '1_2_3'; } else { for (var i = 0; i < utype_cb.length; i++) { utype_filter.push(utype_cb[i].value); } utype = utype_filter.join('_'); } data_categories1 = []; data_categories2 = []; switch ($('li.active>a.statistics-tabs').attr('id')) { case 'general-tabb': $('span.box_values').html(0); $('span.box_values_total').html(0); break; case 'abonnes-tabb': break; case 'recherches-tabb': utype = 'none'; data_categories3 = [ ]; break; default: } data_categories1 = [ 'users_and_date', 'sessions', 'session_duration', 'bounceRate', 'pageviews', 'uniquePageviews', 'event_views', 'users_and_browsers', 'users_and_device_category', 'f_contact_email_category', 'y_registrations', 'f_subscribers', 'f30days_reservations_per_subs', 'y_events', 'y_reservations', 'f30days_reservations', 'y_cancellations', 'f30days_cancellations', 'f_events_per_status', // 'visitor_types' ]; data_categories2 = [ 'y_registrations', 'f_subscribers', 'f30days_reservations_per_subs', 'y_events', 'y_reservations', 'f30days_reservations', 'y_cancellations', 'f30days_cancellations', 'f_events_per_status', 'f_searches', 'faq_searches', // 'source_mediums', 'source_mediums_graph' ]; dashboard.filter_dashboard_data(start_date, end_date, data_categories1, utype); dashboard.filter_dashboard_data(start_date, end_date, data_categories2, 'none'); app.rmbtn_loader('#filter_dashboard_data'); // if (data_categories1.length >0) { // } else { // app.rmbtn_loader('#filter_dashboard_data'); // } app.remove_loader(); }); // Load data on tab click $('.statistics-tabs').on('click', function(event) { event.preventDefault(); if (!$(this).hasClass('graphs_loaded')) { $('.tab-pane').prepend(page_loader); start_date = '30daysAgo'; end_date = 'yesterday'; data_categories = []; switch (this.id) { case 'general-tabb': data_categories = [ 'users_and_date', 'sessions', 'session_duration', 'bounceRate', 'pageviews', 'uniquePageviews', 'event_views', 'users_and_browsers', 'users_and_device_category' // 'visitor_types' ]; break; case 'abonnes-tabb': break; case 'recherches-tabb': break; default: } $(this).addClass('graphs_loaded'); if (data_categories.length >0) { dashboard.filter_dashboard_data(start_date, end_date, data_categories, '1_2_3'); } else { // $('.page-loader2').remove(); } } else { // $('.page-loader2').remove(); } app.remove_loader(); }); // set data triggers for each graph $('.chart-btn-holder').on('click', 'button:not(.total_u_data)', function() { // remove users to get chart data name chart_data_name = ((this.id).split('___'))[0]; chart_user_type = ((this.id).split('___'))[1]; $(this).toggleClass('disable-btn'); // do not disable all, at least 1 trigger should remain active var len = ($('#'+chart_data_name+'_triggers .disable-btn').toArray()).length; if (len == 3) { $(this).removeClass('disable-btn'); } else { the_chart[chart_data_name+'-chart'].data.datasets.forEach(function(ds) { if(ds.label == chart_user_type){ ds.hidden = !ds.hidden; } }); the_chart[chart_data_name+'-chart'].update(); } }); $('a#export_dashboard_data').on('click', function(event) { // set the export url in the export button $('.tab-pane.active').prepend(app.get_loader2('Exporting...')); app.btn_loader('#export_dashboard_data'); ddate_range = ($('#ga_date_range').val()).split(' - '); sstart = ddate_range[0]; sstart = sstart.replace(/\//g, '-'); eend = ddate_range[1]; eend = eend.replace(/\//g, '-'); $('a#export_dashboard_data').attr('href',base_url+'export_dashboard/'+sstart+'/'+eend); setTimeout(function(){ app.rmbtn_loader('#export_dashboard_data'); }, 1000); app.remove_loader(); }); }, /* * filter dashboard data, by date range or by user type(if supported) */ "filter_dashboard_data" : function(start, end, data_categories, user_type) { start = start.replace(/\//g, '-'); end = end.replace(/\//g, '-'); data_categories.forEach(function(row, i){ if (user_type != 'none') { /* * dashboard graphs */ switch (row) { case 'users_and_date': dashboard.graph.users_and_date(start, end, 100000, user_type) break; // case 'visitor_types': // dashboard.graph.visitor_types(start, end, 2) // break; case 'sessions': dashboard.graph.sessions(start, end, 100000, user_type) break; case 'session_duration': dashboard.graph.session_duration(start, end, 100000, user_type) break; case 'pageviews': dashboard.graph.pageviews(start, end, 100000, user_type) break; case 'uniquePageviews': dashboard.graph.uniquePageviews(start, end, 100000, user_type) break; case 'event_views': dashboard.graph.event_views(start, end, 100000, user_type) break; case 'bounceRate': dashboard.graph.bounceRate(start, end, 100000, user_type) break; case 'users_and_browsers': dashboard.graph.users_and_browsers(start, end, 10) break; case 'users_and_device_category': dashboard.graph.users_and_device_category(start, end, 10) break; case 'source_mediums_graph': dashboard.graph.source_mediums_graph(start, end, 10) break; case 'f_contact_email_category': dashboard.table.f_contact_email_category(start, end); break; default: } } else { /* * dashboard tables */ switch (row) { case 'y_contact_emails': dashboard.table.y_contact_emails(start, end); break; case 'f_url_clicks': dashboard.table.f_url_clicks(start, end); break; case 'y_registrations': dashboard.table.y_registrations(start, end); break; case 'f_subscribers': dashboard.table.f_subscribers('30daysago', 'yesterday'); break; case 'y_events': dashboard.table.y_events(start, end); break; // case 'f30days_events': // dashboard.table.f30days_events('30daysago', 'yesterday'); // break; case 'y_reservations': dashboard.table.y_reservations(start, end); break; case 'y_reservations_per_subs': dashboard.table.y_reservations_per_subs(start, end); break; case 'f30days_reservations_per_subs': dashboard.table.f30days_reservations_per_subs(start, end); break; case 'f30days_reservations': dashboard.table.f30days_reservations(start, end); break; case 'y_cancellations': dashboard.table.y_cancellations(start, end); break; case 'f30days_cancellations': dashboard.table.f30days_cancellations(start, end); break; case 'f_events_per_status': dashboard.table.f_events_per_status(start, end); break; case 'f_searches': dashboard.table.f_searches(start, end); break; case 'faq_searches': dashboard.table.faq_searches(start, end); break; case 'f_contact_email_category': dashboard.table.f_contact_email_category(start, end); break; case 'source_mediums_graph': dashboard.graph.source_mediums_graph(start, end, 10) break; case 'source_mediums': dashboard.table.source_mediums(start, end); break; default: } } }); }, /* * initialize tables to be generated */ "generate_tables" : function(start, end) { data_categories = [ 'y_contact_emails', 'f_url_clicks', 'y_registrations', 'f_subscribers', 'y_events', // 'f30days_events', 'y_reservations', 'f30days_reservations', 'y_reservations_per_subs', 'f30days_reservations_per_subs', 'y_cancellations', 'f30days_cancellations', 'f_events_per_status', 'f_contact_email_category', 'f_searches', 'faq_searches', // 'source_mediums' ]; dashboard.filter_dashboard_data(start, end, data_categories, 'none'); }, /* * initialize info required to generate tables */ "table": { /* * general tab - liens cliques * contact email category data */ "f_contact_email_category": function(start, end){ var tbl_data = { data_name: 'contact_cat', data_cat: 'filtered', /* 1 - Confirmation de réservation 2 - Communications 3 - Inscription sur liste d'attente 4 - Informations sur un événement 5 - Problèmes de connexion 6 - Problèmes de réservation */ data_containers: [ 'contact_cat1', 'contact_cat2', 'contact_cat3', 'contact_cat4', 'contact_cat5', 'contact_cat6' ], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * general tab - liens cliques * url clicks */ "f_url_clicks": function(start, end){ var tbl_data = { data_name: 'url_clicks', data_cat: 'filtered', data_containers: [], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * general tab - liens cliques * yearly contact emails */ "y_contact_emails": function(start, end){ var tbl_data = { data_name: 'y_contact', data_cat: 'yearly', data_containers: ['y_contact_cur_year', 'y_contact_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab first row - Nombre d'inscriptions (Nouveau qui a confirmé son formulaire de première inscription) * yearly registrations */ "y_registrations": function(start, end){ var tbl_data = { data_name: 'y0', data_cat: 'yearly', data_containers: ['y0_cur_year', 'y0_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab first row - Nombre d'inscriptions (Nouveau qui a confirmé son formulaire de première inscription) * subscribers per interval based on filter */ "f_subscribers": function(start, end){ var tbl_data = { data_name: 'fsubs', data_cat: 'filtered', data_containers: ['fsubs_interval'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab 2nd row - Nombre d'événements par statuts (prochainement, en cours, complets, terminés, passés, archivés) total + /année * yearly event count */ "y_events": function(start, end){ var tbl_data = { data_name: 'y1', data_cat: 'yearly', data_containers: ['y1_cur_year', 'y1_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, "f30days_events": function(start, end){ var tbl_data = { data_name: 'f_y1', data_cat: 'filtered', data_containers: ['f_y1_interval'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab 2nd row - Nombre d'événements par statuts (prochainement, en cours, complets, terminés, passés, archivés) total + /année * number of events per backoffice status */ "f_events_per_status": function(start, end){ var tbl_data = { data_name: 'fevents', data_cat: 'filtered', data_containers: ['fevents_proc', 'fevents_en', 'fevents_com', 'fevents_ter', 'fevents_pas', 'fevents_arc'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab 3rd row - Nombre de réservations effectuées (par abonnés) * yearly reservations per subscriber */ "y_reservations_per_subs": function(start, end){ var tbl_data = { data_name: 'y2', data_cat: 'yearly', data_containers: ['y2_cur_year', 'y2_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, "f30days_reservations_per_subs": function(start, end){ var tbl_data = { data_name: 'f_y2', data_cat: 'filtered', data_containers: ['f_y2_interval'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab 4th row - Nombre de places réservées * yearly reservations */ "y_reservations": function(start, end){ var tbl_data = { data_name: 'y3', data_cat: 'yearly', data_containers: ['y3_cur_year', 'y3_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, "f30days_reservations": function(start, end){ var tbl_data = { data_name: 'f_y3', data_cat: 'filtered', data_containers: ['f_y3_interval'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * abonnes tab 5th row - Nombre d'annulations effectuées (annulation totale de réservation) * yearly cancellations */ "y_cancellations": function(start, end){ var tbl_data = { data_name: 'y4', data_cat: 'yearly', data_containers: ['y4_cur_year', 'y4_prev_year'], }; dashboard.get_tbl_data(start, end, tbl_data); }, "f30days_cancellations": function(start, end){ var tbl_data = { data_name: 'f_y4', data_cat: 'filtered', data_containers: ['f_y4_interval'], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * recherches tab * searches */ "f_searches": function(start, end){ var tbl_data = { data_name: 's', data_cat: 'filtered', data_containers: [ // types // 's_', 's_', 's_', 's_', 's_' 's_' ], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * recherches tab * faq searches */ "faq_searches": function(start, end){ var tbl_data = { data_name: 'faq_search', data_cat: 'filtered', data_containers: [], }; dashboard.get_tbl_data(start, end, tbl_data); }, /* * recherches tab * source mediums */ "source_mediums": function(start, end){ var tbl_data = { data_name: 'source_mediums', data_cat: 'filtered', data_containers: [], }; dashboard.get_tbl_data(start, end, tbl_data); }, }, /* * Get table data from database based on the info defined in "dashboard.table" */ "get_tbl_data" : function(start, end, tbl_data) { $.ajax({ type: 'POST', // url: base_url+'get_dashboard_table_data/'+tbl_data['data_name']+'/'+start+'/2017-11-01', url: base_url+'get_dashboard_table_data/'+tbl_data['data_name']+'/'+start+'/'+end, async: false, dataType : 'json', data : {type : "get_tbl_data"}, success: function(data) { c = 0; var url_clicks_data = '', total_url_clicks_data = 0, months_data = '', type_data = '', city_data = '', search_data = '', total_search = 0, total_cat_filtered = 0; contact_cat_data = ''; try { /* * Get table data from database based on the info defined in "dashboard.table" */ var prev_year_value=0; var cur_year_value=0; data.forEach(function(row, value){ switch (tbl_data['data_cat']) { /* * data from current and previous year * expected rows are 2, 0 is for the current year, 1 is for the prev year */ case 'yearly': // console.log(row); switch (c) { case 0: break; case 1: break; default: } if (c != 2) { // console.log(tbl_data['data_containers'][c]); // console.log(row.value); var cur_year_val = $('.'+tbl_data['data_containers'][0]+' .data_year').html(); var prev_year_val = $('.'+tbl_data['data_containers'][1]+' .data_year').html(); if (cur_year_val == row.data_year) { cur_year_value=parseFloat(row.value); $('.'+tbl_data['data_containers'][0]+' .data_year').html((row.data_year)); $('.'+tbl_data['data_containers'][0]+' .value').html(convertNumberToFr(row.value)); } else if (prev_year_val == row.data_year) { prev_year_value=parseFloat(row.value); $('.'+tbl_data['data_containers'][1]+' .data_year').html((row.data_year)); $('.'+tbl_data['data_containers'][1]+' .value').html(convertNumberToFr(row.value)); } } break; /* * data that usually depends on the filter */ case 'filtered': switch (tbl_data['data_name']) { case 'fsubs': case 'f_y1': case 'f_y2': case 'f_y3': case 'f_y4': if (row.value) { if (row.dinterval) { // $('.'+tbl_data['data_containers'][c]+' .interval').html(row.dinterval); $('.'+tbl_data['data_containers'][c++]+' .value').html(convertNumberToFr(row.value)); } else { // $('.'+tbl_data['data_containers'][c]+' .interval').html(row.dinterval); $('.'+tbl_data['data_containers'][c++]+' .value').html(convertNumberToFr(row.value)); } } else { $('.'+tbl_data['data_containers'][c++]+' .value').html(0); } break; case 'fevents': // console.log(row); // 0=Being Created, 1=Published, 2=Open, 3=Locked, 4=Closed, 5=Archived, 6=Deleted, 7=Terminated // data_containers: ['fevents_proc', 'fevents_en', 'fevents_com', 'fevents_ter', 'fevents_pas', 'fevents_arc'], $('.fevents_'+ row.bostat +' .value').html(convertNumberToFr(row.value)); break; case 'contact_cat': // console.log(row); /* 1 - Confirmation de réservation 2 - Communications 3 - Inscription sur liste d'attente 4 - Informations sur un événement 5 - Problèmes de connexion 6 - Problèmes de réservation */ total_cat_filtered += parseInt(row.value); contact_cat_data += '' +''+row.c_category+'' +''+convertNumberToFr(row.value)+'' +''; break; case 'url_clicks': urll = (row.gev_raction).replace('https://preprod.wylog.com/lemonde-res', ''); urll = urll.replace('https://preprod.wylog.com/lemonde-dev/', ''); urll = urll.replace('https://preprod.wylog.com/lemonde-client/', ''); urll = urll.replace('localhost/', ''); urll = urll.replace('https://evenements-abonnes.lemonde.fr/', ''); url_clicks_data += '' +''+urll+'' +''+convertNumberToFr(row.gev_rdata)+'' +''; total_url_clicks_data += parseInt(row.gev_rdata); break; case 's': var months = ['Tous les mois', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']; switch (row.gev_rdatalabel) { case 'filter-month': if (row.gev_raction != 0) { if (months[parseInt(row.gev_raction)]) { months_data += '' +''+months[parseInt(row.gev_raction)]+'' +''+row.gev_rdata+'' +''; total_search += parseInt(row.gev_rdata); } } break; case 'filter-type': if (row.gev_raction != 0) { type_data += '' +''+row.label+'' +''+row.gev_rdata+'' +''; total_search += parseInt(row.gev_rdata); } break; case 'filter-city': if (row.gev_raction != 0 && row.label) { city_data += '' +''+row.label+'' +''+row.gev_rdata+'' +''; total_search += parseInt(row.gev_rdata); } break; default: } break; case 'faq_search': if (row.gev_raction != 0) { search_data += '' +''+row.gev_rdata+'' +''+row.gev_raction+'' +''; total_search += parseInt(row.gev_rdata); } break; case 'source_mediums': if (row.gsm_rdata) { search_data += '' +''+row.gsm_rchannelgroup +'' +''+row.gsm_rdata+' ('+ (parseFloat(row.percentage)).toFixed(2) +'%)' +''; total_search += parseInt(row.gsm_rdata); } break; default: } break; } }); if (tbl_data['data_cat'] == 'yearly') { // analyze data // calculate percentage // console.log(cur_year_value); // console.log(prev_year_value); data_stats = (Math.round(((prev_year_value-cur_year_value)/(prev_year_value))*100)); // console.log(percentage); $('.'+tbl_data['data_containers'][0]+' .value .stats').remove(); $('.'+tbl_data['data_containers'][0]+' .value br').remove(); if (cur_year_value < prev_year_value) { $('.'+tbl_data['data_containers'][0]+' .value').append('
( '+convertNumberToFr(Math.abs(data_stats))+'%)'); } else { $('.'+tbl_data['data_containers'][0]+' .value').append('
( '+convertNumberToFr(Math.abs(data_stats))+'%)'); } } /* * data that usually depends on the filter */ if (tbl_data['data_name'] == 's') { if (!months_data) { months_data = 'Pas de données'; } if (!type_data) { type_data = 'Pas de données'; } if (!city_data) { city_data = 'Pas de données'; } if (!total_search) { total_search = 0; } $('.filter-month tbody').html(months_data); $('.filter-type tbody').html(type_data); $('.filter-city tbody').html(city_data); $('.total-search .value').html(total_search); // console.log(months_data); // console.log(type_data); // console.log(city_data); } if (tbl_data['data_name'] == 'faq_search') { if (!total_search) { total_search = 0; } if (!search_data) { search_data = 'Pas de données'; } $('.faq_search tbody').html(search_data); // $('.faq_search tbody').append('Total'total_search); // console.log(months_data); // console.log(type_data); // console.log(city_data); } if (tbl_data['data_name'] == 'source_mediums') { if (!total_search) { total_search = 0; } if (!search_data) { search_data = 'Pas de données'; } $('.source_meds tbody').html(search_data); // $('.faq_search tbody').append('Total'total_search); // console.log(months_data); // console.log(type_data); // console.log(city_data); } if (tbl_data['data_name'] == 'url_clicks') { if (!url_clicks_data) { url_clicks_data = 'Pas de données'; } $('.url-clicks-body').html(url_clicks_data); $('.url-clicks-body').append(''+'Total'+''+convertNumberToFr(total_url_clicks_data)+''+''); } if (tbl_data['data_name'] == 'contact_cat'){ $('.total_cat_filtered .value').html(total_cat_filtered); $('.formulai_table tbody').html(contact_cat_data); } } catch (e) { // console.log(e); } } }); }, /* * initialize the graphs to be generated */ "generate_graphs" : function(start, end) { data_categories = [ 'users_and_date', // 'visitor_types', 'sessions', 'session_duration', 'bounceRate', 'pageviews', 'uniquePageviews', 'event_views', 'users_and_browsers', 'users_and_device_category', 'source_mediums_graph' ]; dashboard.filter_dashboard_data(start, end, data_categories, '1_2_3'); }, /* * graph informations */ "graph": { /* * first tab -> Visiteurs graph */ "users_and_date": function(start, end, limit, user_categories){ // visitors graph var graph_info = { data_name: 'visitors', db_tbl_abbrev: 'vis', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'visitors-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' }, animation: { } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Sessions Uniques / Utilisateurs */ "sessions": function(start, end, limit, user_categories){ var graph_info = { data_name: 'sessions', db_tbl_abbrev: 'sess', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'sessions-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Durée Moyenne de Session par utilisateurs (En Secondes) */ "session_duration": function(start, end, limit, user_categories){ // browser and users graph var graph_info = { data_name: 'session_duration', db_tbl_abbrev: 'sess', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'session_duration-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Nombre total de pages vuess */ "pageviews": function(start, end, limit, user_categories){ // browser and users graph var graph_info = { data_name: 'pageviews', db_tbl_abbrev: 'pv', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'pageviews-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Nombre total de pages vues par visiteur unique */ "uniquePageviews": function(start, end, limit, user_categories){ // browser and users graph var graph_info = { data_name: 'unique_pageviews', db_tbl_abbrev: 'pv', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'unique_pageviews-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Nombre de total d'evenements vus */ "event_views": function(start, end, limit, user_categories){ // browser and users graph var graph_info = { data_name: 'event_views', db_tbl_abbrev: 'ev', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'event_views-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Taux de rebond global */ "bounceRate": function(start, end, limit, user_categories){ // browser and users graph var graph_info = { data_name: 'bounceRate', db_tbl_abbrev: 'bcr', user_categories: user_categories, color_Nouveaux: ['#f5a9a9'], color_Connus: ['#9cbce6'], color_Connectés: ['#97caa7'], fill: false, container_name: 'bounceRate-chart', graph_type: 'line', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.datasets[tooltipItem.datasetIndex].label; var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index].y; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips scales: { yAxes: [{ ticks: { beginAtZero:true, userCallback: function(value, index, values) { // Convert the number to a string and splite the string every 3 charaters from the end value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return value; } } }], xAxes: [{ ticks: { } }] }, legend: { position: 'right' } }, }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Navigateurs Web */ "users_and_browsers": function(start, end, limit){ // browser and users graph var graph_info = { data_name: 'users_browsers', db_tbl_abbrev: 'br', user_categories: 'none', container_name: 'browsers-chart', graph_type: 'pie', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.labels[tooltipItem.index]; var value = data.datasets[0].data[tooltipItem.index]; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips legend: { display: false, position: 'right' } }, colors: [ 'rgb(255, 139, 3)', 'rgb(255, 230, 3)', 'rgb(167, 255, 3)', 'rgb(27, 163, 0)', 'rgb(3, 255, 187)', 'rgb(3, 217, 255)', 'rgb(3, 126, 255)', 'rgb(4, 48, 161)', 'rgb(114, 3, 255)', 'rgb(255, 3, 33)', 'rgb(220, 3, 255)', 'rgb(125, 0, 0)', ], }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> Type de device */ "users_and_device_category": function(start, end, limit){ // browser and users graph var graph_info = { data_name: 'users_and_device_category', db_tbl_abbrev: 'dv', user_categories: 'none', container_name: 'device-categories-chart', graph_type: 'pie', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.labels[tooltipItem.index]; var value = data.datasets[0].data[tooltipItem.index]; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips legend: { display: false, position: 'right' } }, colors: [ 'rgb(255, 139, 3)', 'rgb(255, 230, 3)', 'rgb(167, 255, 3)', 'rgb(27, 163, 0)', 'rgb(3, 255, 187)', 'rgb(3, 217, 255)', 'rgb(3, 126, 255)', 'rgb(4, 48, 161)', 'rgb(114, 3, 255)', 'rgb(255, 3, 33)', 'rgb(220, 3, 255)', 'rgb(125, 0, 0)', ], }; dashboard._query_ga_data(start, end, graph_info); }, "source_mediums_graph": function(start, end, limit){ // browser and users graph var graph_info = { data_name: 'source_mediums_graph', db_tbl_abbrev: 'gsm', user_categories: 'none', container_name: 'source_mediums_graph-chart', graph_type: 'pie', options: { tooltips: { callbacks: { label: function(tooltipItem, data) { var label = data.labels[tooltipItem.index]; var value = data.datasets[0].data[tooltipItem.index]; value = value.toString(); value = value.split(/(?=(?:...)*$)/); value = value.join(' '); return `${label}: `+value; } } // end callbacks: }, //end tooltips legend: { display: false, position: 'right' } }, colors: [ 'rgb(255, 139, 3)', 'rgb(255, 230, 3)', 'rgb(167, 255, 3)', 'rgb(27, 163, 0)', 'rgb(3, 255, 187)', 'rgb(3, 217, 255)', 'rgb(3, 126, 255)', 'rgb(4, 48, 161)', 'rgb(114, 3, 255)', 'rgb(255, 3, 33)', 'rgb(220, 3, 255)', 'rgb(125, 0, 0)', ], }; dashboard._query_ga_data(start, end, graph_info); }, /* * first tab -> currently not in use */ // "visitor_types": function(start, end, limit){ // // browser and users graph // var graph_info = { // data_name: 'users_and_device_category', // db_tbl_abbrev: 'vistype', // user_categories: 'none', // // container_name: 'visitors-type-chart', // graph_type: 'pie', // data_name: 'visitors_type', // options: { // legend: { // position: 'bottom' // } // }, // colors: [], // }; // dashboard._query_ga_data(start, end, graph_info); // }, }, "_query_ga_data" : function(start, end, graph_info) { $.ajax({ type: 'POST', url: base_url+'get_ga_data/'+graph_info['data_name']+'/'+graph_info['db_tbl_abbrev']+'/'+graph_info['user_categories']+'/'+start+'/'+end, async: false, dataType : 'json', data : {type : "get_ga_data"}, success: function(data) { // reset the box values // console.log(00); // prepare graph data var data_label = []; var datasets = { [graph_info['data_name']]: [] }; var ga_data = {}, db_tbl_abbrev = graph_info['db_tbl_abbrev']; var data_user_totals = {}; var days_count = 0, table_data = ''; var pie_color_index = 0; try { data.forEach(function(row, value){ if (graph_info['graph_type'] != 'pie') { // console.log(row); switch (graph_info['user_categories']) { /*Get all users*/ case '1': if (row.user_type == 'Nouveaux') { days_count++; } break; case '2': if (row.user_type == 'Connus') { days_count++; } break; case '1_2': if (row.user_type == 'Connus') { days_count++; } break; default: if (row.user_type == 'Connectés') { days_count++; } } // avoid duplicates in data label if (!inArray(row[db_tbl_abbrev+'_rdate'], data_label)) { data_label.push(row[db_tbl_abbrev+'_rdate']); } /*Get bounce rate total box data*/ if ( graph_info['data_name'] == 'bounceRate' && row['user_type'] != 'Connectés' ) { /*Get the data in sessions value*/ if (data_user_totals[graph_info['data_name']+'___total_sess_data']) { // get total data for all users data_user_totals[graph_info['data_name']+'___total_sess_br'] += parseInt(row['sess_br']); data_user_totals[graph_info['data_name']+'___total_sess_data'] += parseInt(row['sess_rdata']); } else { data_user_totals[graph_info['data_name']+'___total_sess_br'] = parseInt(row['sess_br']); data_user_totals[graph_info['data_name']+'___total_sess_data'] = parseInt(row['sess_rdata']); } } /*Get bounce rate user box data*/ if ( graph_info['data_name'] == 'bounceRate' ) { /*Get the data in sessions value*/ if (data_user_totals[`${row['user_type']}__sess_data`]) { // get total data for all users data_user_totals[`${row['user_type']}__sess_br`] += parseInt(row['sess_br']); data_user_totals[`${row['user_type']}__sess_data`] += parseInt(row['sess_rdata']); } else { data_user_totals[`${row['user_type']}__sess_br`] = parseInt(row['sess_br']); data_user_totals[`${row['user_type']}__sess_data`] = parseInt(row['sess_rdata']); } } // get total data for all users if (data_user_totals[graph_info['data_name']+'___Total_u_data']) { // get total data for all users if (row[db_tbl_abbrev+'_rdata'] != null) { data_user_totals[graph_info['data_name']+'___Total_u_data'] += parseInt(row[db_tbl_abbrev+'_rdata']); } } else { if (row[db_tbl_abbrev+'_rdata'] != null) { data_user_totals[graph_info['data_name']+'___Total_u_data'] = parseInt(row[db_tbl_abbrev+'_rdata']); } } // get the totals for each user in each box if (ga_data[row['user_type']]) { // get total data for individual users data_user_totals[row['user_type']] += parseInt((row[db_tbl_abbrev+'_rdata'])?row[db_tbl_abbrev+'_rdata']:0); ga_data[row['user_type']].push({ t : row[db_tbl_abbrev+'_rdate'], y : parseInt((row[db_tbl_abbrev+'_rdata'])?(row[db_tbl_abbrev+'_rdata']):0) }); } else { ga_data[row['user_type']] = []; // get total data for individual users data_user_totals[row['user_type']] = parseInt((row[db_tbl_abbrev+'_rdata'])?row[db_tbl_abbrev+'_rdata']:0); ga_data[row['user_type']].push({ t : row[db_tbl_abbrev+'_rdate'], y : parseInt((row[db_tbl_abbrev+'_rdata'])?row[db_tbl_abbrev+'_rdata']:0) }); } } else { if (!ga_data['all']) { ga_data['all'] = []; } // insert table data table_data += '' +''+' ' +'' +''+row.rtype +'' +''+convertNumberToFr(row.vis_rdata)+' ('+ (parseFloat(row.percentage)).toFixed(2) +'%)' +''; // avoid duplicates in data label if (!inArray(row[db_tbl_abbrev+'_rdate'], data_label)) { data_label.push(row['rtype']); } ga_data['all'].push(row['vis_rdata']); } }) // insert table data for some graphs switch (graph_info['data_name']) { case 'users_browsers': $('.nav_web tbody').html(table_data); break; case 'users_and_device_category': $('.type_dev tbody').html(table_data); break; case 'source_mediums_graph': $('.source_meds tbody').html(table_data); break; default: } // prepare datasets for (var key in ga_data) { // console.log(graph_info['data_name']); // console.log('#'+graph_info['data_name']+'___'+key); // console.log(Math.round(data_user_totals[key])); // // console.log(key); // console.log(data_user_totals[graph_info['data_name']+'___Total_u_data']); // set dataset triggers button values users_total = convertNumberToFr(Math.round(data_user_totals[key]/days_count)); accu_users_total = convertNumberToFr(Math.round(data_user_totals[key])); graph_total = convertNumberToFr(Math.round(data_user_totals[graph_info['data_name']+'___Total_u_data']/days_count)); accu_graph_total = convertNumberToFr(Math.round(data_user_totals[graph_info['data_name']+'___Total_u_data'])); switch (graph_info['data_name']) { case 'session_duration': $('#'+graph_info['data_name']+'___'+key+' span.box_values').html(users_total); $('#'+graph_info['data_name']+'___Total_u_data'+' span.box_values').html(graph_total); break; case 'bounceRate': $('#'+graph_info['data_name']+'___'+key+' span.box_values').html( Math.round((data_user_totals[`${key}__sess_br`]/data_user_totals[`${key}__sess_data`])*100) ); $('#'+graph_info['data_name']+'___Total_u_data'+' span.box_values').html( Math.round((data_user_totals[`${graph_info['data_name']}___total_sess_br`]/data_user_totals[`${graph_info['data_name']}___total_sess_data`])*100) ); break; default: $('#'+graph_info['data_name']+'___'+key+' span.box_values').html(users_total); $('#'+graph_info['data_name']+'___'+key+' span.box_values_total').html(accu_users_total); $('#'+graph_info['data_name']+'___Total_u_data'+' span.box_values').html(graph_total); $('#'+graph_info['data_name']+'___Total_u_data'+' span.box_values_total').html(accu_graph_total); } // prepare datasets color if (graph_info['graph_type'] != 'line') { // if bar or pie, assign colors to each bar or slice for (var i = 0; i < ga_data[key].length; i++) { switch (graph_info['graph_type']) { case 'bar': // use the default color that was set for each metric if (i < (ga_data[key].length)) { graph_info['color_'+key].push(graph_info['color_'+key][0]); } break; case 'pie': // use random colors // rgb(156, 83, 24) if (i < (ga_data[key].length)) { graph_info['color_'+key] = graph_info['colors']; } break; default: } } } if (ga_data.hasOwnProperty(key)) { datasets[graph_info['data_name']].push({ label: key, fill: graph_info['fill'], data: ga_data[key], borderColor: graph_info['color_'+key], backgroundColor: graph_info['color_'+key] }); } } var stat_btn = ($('#'+graph_info['data_name']+'_triggers .stat_btn').toArray()); for (var i = 0; i < stat_btn.length; i++) { // console.log(stat_btn[i].id); // console.log($(stat_btn[i].id + ' .box_values').html()) box_val = parseInt($('#'+stat_btn[i].id + ' .box_values').html()); // console.log(box_val); if (box_val == 0) { $('#'+stat_btn[i].id).attr('disabled', 'disabled'); $('#'+stat_btn[i].id).addClass('disable-btn'); } else { $('#'+stat_btn[i].id).removeAttr('disabled'); $('#'+stat_btn[i].id).removeClass('disable-btn'); } } // reset the graph container $('#'+graph_info['container_name']).remove(); $('#'+graph_info['container_name']+'-container').html(''); // prepare graph details var ctx = document.getElementById(graph_info['container_name']).getContext('2d'); // graph it! the_chart[graph_info['container_name']] = new Chart(ctx,{ type: graph_info['graph_type'], options: graph_info['options'], data: { datasets: datasets[graph_info['data_name']], // These labels appear in the legend and in the tooltips when hovering different arcs labels: data_label }, }); console.log(the_chart[graph_info['container_name']].data); } catch (e) { $('#'+graph_info['container_name']).remove(); $('#'+graph_info['container_name']+'-container').append('

Pas de données

'); } } }); }, };//end of return // Pass in jQuery. })(jQuery, this); function inArray(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; } return false; } $(document).ready(function() { dashboard.generate_graphs(start_date, end_date); dashboard.generate_tables(start_date, end_date); app.remove_loader(); dashboard.initEventListeners(); });