/**
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
'use strict';

AppServices.Controllers.controller('GroupsActivitiesCtrl', ['ug', '$scope', '$rootScope', '$location',
  function (ug, $scope, $rootScope, $location) {

    $scope.activitiesSelected = 'active';

    if (!$rootScope.selectedGroup) {
      $location.path('/groups');
      return;
    } else {
      $rootScope.selectedGroup.activities = [];
      $rootScope.selectedGroup.getActivities(function(err, data){
        if (err) {

        } else {
//          $rootScope.selectedGroup.activities = data;
          if(!$rootScope.$$phase) {
            $rootScope.$apply();
          }
        }

      });
    }


  }]);