source : logCtrl.js

(function (angular) {
    'use strict';
    /**
     * @memberof spApp
     * @ngdoc controller
     * @name CsvCtrl
     * @description
     *   Display a CSV
     */
    angular.module('log-ctrl', ['map-service', 'biocache-service'])
        .controller('LogCtrl', ['$scope', 'MapService', '$timeout', 'LayoutService', '$uibModalInstance',
            'BiocacheService', 'LoggerService', 'MenuService', 'ToolsService', '$filter', 'data',
            function ($scope, MapService, $timeout, LayoutService, $uibModalInstance, BiocacheService, LoggerService,
                      MenuService, ToolsService, $filter, data) {
                $scope.data = data;
                // view type is one of ['action', 'session']
                $scope.viewType = 'actions'
                if ($scope.data && $scope.data.view) $scope.viewType = $scope.data.viewType
                // view level is 'action':[0-1], 'session':[0-1]
                $scope.viewLevel = 0
                if ($scope.data && $scope.data.viewLevel) $scope.viewLevel = $scope.data.viewLevel
                $scope.offset = 0
                $scope.max = 10
                $scope.totalCount = 0
                $scope.groupBy, $scope.countBy, $scope.sessionId, $scope.category1, $scope.category2
                $scope.content = []
                $scope.headers = []
                $scope.back = []
                LayoutService.addToSave($scope)
                $scope.goBack = function () {
                    var prev = $scope.back.pop()
                    $scope.viewType = prev.viewType
                    $scope.viewLevel = prev.viewLevel
                    $scope.offset = prev.offset
                    $scope.max = prev.max
                    $scope.totalCount = prev.totalCount
                    $scope.totalPages = prev.totalPages
                    $scope.groupBy = prev.groupBy
                    $scope.countBy = prev.countBy
                    $scope.sessionId = prev.sessionId
                    $scope.category1 = prev.category1
                    $scope.category2 = prev.category2
                    $scope.content = prev.content
                    $scope.header = prev.header
                    $scope.headerOrder = prev.headerOrder
                }
                $scope.updateContent = function (params) {
                    // keep history for 'back'
                    if (params.viewLevel !== undefined && params.viewLevel > $scope.viewLevel) {
                        $scope.back.push({
                            viewType: $scope.viewType, viewLevel: $scope.viewLevel, offset: $scope.offset,
                            max: $scope.max, totalCount: $scope.totalCount, totalPages: $scope.totalPages,
                            groupBy: $scope.groupBy, countBy: $scope.countBy, sessionId: $scope.sessionId,
                            category1: $scope.category1, category2: $scope.category2, content: $scope.content,
                            header: $scope.header, headerOrder: $scope.headerOrder
                        })
                    }
                    $scope.content = []
                    if (params.viewLevel !== undefined) $scope.viewLevel = params.viewLevel
                    if (params.viewType) $scope.viewType = params.viewType
                    if (params.offset !== undefined) $scope.offset = params.offset
                    if ($scope.viewType == 'sessions') {
                        if ($scope.viewLevel == 0) {
                            $scope.groupBy = 'sessionId'
                            $scope.countBy = 'category2'
                            $scope.sessionId = ''
                            $scope.category1 = ''
                            $scope.category2 = ''
                            $scope.header = [$i18n(431, "Date")]
                            $scope.headerOrder = []
                        } else if ($scope.viewLevel == 1) {
                            $scope.groupBy = ''
                            $scope.countBy = ''
                            $scope.sessionId = params.sessionId
                            $scope.category1 = ''
                            $scope.category2 = ''
                            $scope.header = [$i18n(431, "Date"), $i18n(432, "Action Type"), $i18n(433, "Data")]
                            $scope.headerOrder = ['sessionId', 'category2', 'data']
                        }
                    } else if ($scope.viewType == 'actions') {
                        if ($scope.viewLevel == 0) {
                            $scope.groupBy = 'category2'
                            $scope.countBy = 'record'
                            $scope.sessionId = ''
                            $scope.category1 = params.category1
                            $scope.category2 = ''
                            $scope.header = [$i18n(432, "Action Type"), $i18n(434, "Number of actions")]
                            $scope.headerOrder = []
                        } else if ($scope.viewLevel == 1) {
                            $scope.groupBy = ''
                            $scope.countBy = ''
                            $scope.sessionId = ''
                            $scope.category1 = ''
                            $scope.category2 = params.category2
                            $scope.header = [$i18n(431, "Date"), $i18n(432, "Action Type"), $i18n(433, "Data")]
                            $scope.headerOrder = ['sessionId', 'category2', 'data']
                        }
                    }
                    // Clear 'back' when $scope.viewLevel == 0
                    if ($scope.viewLevel == 0) {
                        $scope.back = []
                    }
                    LoggerService.search($scope.groupBy, $scope.countBy, $scope.sessionId, $scope.category1, $scope.category2, $scope.offset, $scope.max).then(function (response) {
                        $scope.content = response.data.records
                        $scope.totalCount = response.data.totalCount
                        $scope.totalPages = Math.ceil($scope.totalCount / $scope.max)
                    })
                }
                $scope.lookup = function (value) {
                    // lookup category2 (tool name) and sessionId (date/time)
                    if (value === undefined || value === 0) {
                        return ''
                    } else if (('' + value).match('^[1-9][0-9]{12}$')) {
                        return $filter('date')(value, 'yyyy-dd-MM hh:mm:ss')
                    } else if (!value.match) {
                        return value
                    } else {
                        var menu = MenuService.find(value)
                        var cap = ToolsService.getCap(value)
                        if (menu) {
                            return menu.parent + ' | ' + menu.name
                        } else if (cap) {
                            return 'Other' + ' | ' + cap.name
                        }
                    }
                    return value
                }
                $scope.prevPage = function () {
                    if ($scope.offset > 0) $scope.offset -= $scope.max
                    if ($scope.offset < 0) $scope.offset = 0
                    $scope.updateContent($scope)
                }
                $scope.nextPage = function () {
                    if ($scope.offset + $scope.max < $scope.totalCount) $scope.offset += $scope.max
                    $scope.updateContent($scope)
                }
                $scope.updateContent($scope)
            }
        ])
}(angular));