View file upload/js/XenCentral/Feedback/Stats.js

File size: 5.71Kb
/*
 * @package XenCentral Feedback System
 * @author DNF Technology
 * @copyright Drnoyan & Nalyan LDA, Portugal, EU
 * @license http://dnf.technology/terms/
 * @link http://customers.dnf.technology
 * @version 2.0.0 Beta 10
 * @revision 12
 */
$(function() {
	$('a.disableLink').click(function(evt) {
		evt.preventDefault();
	});

	$('div#feedbackTypeFilterPopup ul li a').click(function(evt) {
		evt.preventDefault();
		evt.stopPropagation();

		if ($(this).hasClass('checked')) {
			$(this).removeClass('checked');
		} else {
			$(this).addClass('checked');
		}

		var hasClass = false;

		$('div#feedbackTypeFilterPopup ul li a').each(function(index, el) {
			if ($(el).hasClass('checked')) {
				hasClass = true;
			}
		});

		if (hasClass) {
			$('a.feedbackTypeFilterPopup').addClass('active');
		} else {
			$('a.feedbackTypeFilterPopup').removeClass('active');
		}
	});

    // handle date shortcut links
    $('.dateShortcut a').click(function(evt){
        evt.preventDefault();
        $("input[name=generateFeedbackGraph]", $(this).parents('ul')).trigger('click', $(this).attr('data-date'));
    });

	$("input[name=generateFeedbackGraph]").click(function(evt, dateInteval) {
        var $buttonElem = $(this);
		var $graphContainer = $buttonElem.parents(".graphContainer");
		var $graphImageContainer = $('.graphImageContainer', $graphContainer);
		var dataId = $buttonElem.attr('data-id');
		var dataUrl = $buttonElem.attr('data-url');
		var functionName = $buttonElem.attr('data-function');

		$graphImageContainer.html('').removeClass('empty');

		if (!$graphImageContainer.hasClass('progress')) {
			$graphImageContainer.addClass('progress');
		}

		if (dataId) {
			var filter = [];

			$('div#' + dataId + ' ul li a.checked').each(function(index, el) {
				filter[filter.length] = $(el).attr('data-filter');
			});

			if (filter.length == 0) {
				$graphImageContainer.removeClass('progress').addClass('empty').html($buttonElem.attr('data-error'));
				return;
			}
		}

		var from = $('input[name=from]', $graphContainer).val();

		var to = $('input[name=to]', $graphContainer).val();

		var disableFlash = $('input[name=disableFlash]', $graphContainer).is(':checked');

		$.ajax({
			url:dataUrl,
			'success':function(response) {
				
				$graphImageContainer.removeClass('progress');

				if (response.error) {
					$graphImageContainer.addClass('empty').html(response.error);
					return;
				}

                if(dateInteval) {
                    if(response.data.from) {
                        $('input[name=from]', $graphContainer).val(response.data.from);
                    }
                    if (response.data.to) {
                        $('input[name=to]', $graphContainer).val(response.data.to);
                    }
                }

				window[functionName]($graphImageContainer, response.data, disableFlash);
			},
			complete:function(response, status) {
				$graphImageContainer.removeClass('progress');
				if (status != 'success' && status != 'notmodified') {
					try {
						var data = $.parseJSON(response.responseText);
						
						try {
							$graphImageContainer.html(data.error);
						} catch($ex1) {
							$graphImageContainer.html(data);
						}
					} catch ($ex2) {
						$graphImageContainer.html(response.responseText);
					}
				}
			},
			data:{
				'from':from,
				'to':to,
				'filter':filter,
                'dateInterval':dateInteval,
				_xfResponseType: 'json',
				_xfToken: XF.config.csrf
			},
			type:'GET',
			dataType:'json'
		});
	});

	$('input.button.autoSubmit').click();

});

function XenCentral_Feedback_Draw_Line($container, data, disableFlash) {
	var dataTable = new google.visualization.DataTable();

	var columnIndexMap = {};

	var rowIndexCounter = {};

	var colCount = 0;

	for (var columnIndex in data.columns) {
		var column = data.columns[columnIndex];

		dataTable.addColumn(column.type, column.label)

		columnIndexMap[columnIndex] = colCount;

		rowIndexCounter[columnIndex] = 0;

		colCount++;
	}

	// convert first argument from unix timestamp to date object
	var rowIndex = 0;

	dataTable.addRows(data.dataCount);

	for (var dateline in data.rows) {
		var row = data.rows[dateline];

		for (var colIndex in row) {
			var dataCount = row[colIndex];

			dataTable.setValue(rowIndexCounter[colIndex], 0, new Date(dateline * 1000));
			dataTable.setValue(rowIndexCounter[colIndex], columnIndexMap[colIndex], dataCount);

			rowIndexCounter[colIndex]++;
		}
	}

	if (disableFlash) {
		var chart = new google.visualization.LineChart($container.get(0));
	} else {
		var chart = new google.visualization.AnnotatedTimeLine($container.get(0));
	}

	chart.draw(dataTable, {width: 750, height: 300, title: data.title, enableInteractivity:true, 'wmode':'transparent'});
}

function XenCentral_Feedback_Draw_Pie($container, data)
{
    var dataTable = new google.visualization.DataTable();

	for (var columnIndex in data.columns)
	{
		var column = data.columns[columnIndex];

		dataTable.addColumn(column.type, column.label)
	}

	dataTable.addRows(data.rows);

    // empty the container and create to elements
    $container.html('');

    var $pieChartContainer=$('<div class="statsCol"></div>').appendTo($container);
    var $tableChartContainer = $('<div class="statsCol"></div>').appendTo($container);

    var containerWidth= $container.width();

	var chart = new google.visualization.PieChart($pieChartContainer.get(0));
    chart.draw(dataTable, {width:containerWidth/2, height:300, title:data.title, enableInteractivity:true});

    var tableDataTable = jQuery.extend(true, {}, dataTable);
    tableDataTable.addRow([data.total_phrase, data.total]);

    var table = new google.visualization.Table($tableChartContainer.get(0));
    table.draw(tableDataTable, {width:containerWidth / 2, height:300, title:data.title, enableInteractivity:true});
}