function add_calendar_user() {
                ajx_current("empty");
                if($_POST){                    
                    if (!array_var($_POST, 'auth_user')) {
                            flash_error(lang('must enter a account gmail'));
                            ajx_current("empty");
                            return;
                    }
                    $user_email = ExternalCalendarUsers::findByEmail(array_var($_POST, 'auth_user'));
                    if($user_email) {
                            flash_error(lang('account has already'));
                            ajx_current("empty");
                            return;
                    } 
                    if (!array_var($_POST, 'auth_pass')) {
                            flash_error(lang('must enter the password gmail'));
                            ajx_current("empty");
                            return;
                    }
                    
                    $sync = 0;
                    if(array_var($_POST, 'sync')){
                        $sync = 1;
                    }
                    
                    $member_ids = json_decode(array_var($_POST, 'related_to'));
                    $members = "";
                    foreach($member_ids as $member_id){
                        $members .= $member_id.",";
                    }
                    $members = rtrim($members, ",");
                    
                    $user_cal = ExternalCalendarUsers::findById(get_id('cal_user_id'));
                    if($user_cal){
                        $user_cal->setAuthUser(array_var($_POST, 'auth_user'));
                        $user_cal->setAuthPass(array_var($_POST, 'auth_pass'));
                        $user_cal->setRelatedTo($members);
                        $user_cal->setSync($sync);
                        $user_cal->save();
                        
                        flash_success(lang('success edit account gmail'));
                        
                    }else{
                        $user_cal = new ExternalCalendarUser();
                        $user_cal->setAuthUser(array_var($_POST, 'auth_user'));
                        $user_cal->setAuthPass(array_var($_POST, 'auth_pass'));
                        $user_cal->setContactId(logged_user()->getId());
                        $user_cal->setRelatedTo($members);
                        $user_cal->setType("google");
                        $user_cal->setSync($sync);
                        $user_cal->save();
                        
                        flash_success(lang('success add account gmail'));
                    }                   
                    ajx_current("reload");
                }
                
                $this->update_sync_cron_events();
	}
 function calendar_sinchronization()
 {
     $user = ExternalCalendarUsers::findByContactId();
     $user_data = array();
     $client = new Google_Client();
     // Step 2: The user accepted your access now you need to exchange it.
     $google_code = array_var($_GET, 'google_code', false);
     if ($google_code) {
         try {
             $credentials = $client->authenticate(urldecode(array_var($_GET, 'google_code')));
             $google_acces_token = $client->getAccessToken();
             $service = new Google_Service_Oauth2($client);
             $user_info = $service->userinfo->get();
             $user_email = ExternalCalendarUsers::findByEmail($user_info['email']);
             if (!$user_email) {
                 $user_email = new ExternalCalendarUser();
                 $user_email->setAuthUser($user_info['email']);
                 $user_email->setAuthPass($credentials);
                 $user_email->setContactId(logged_user()->getId());
                 $user_email->setType("google");
                 $user_email->save();
                 $this->update_sync_cron_events();
             } else {
                 $user_email->setAuthPass($credentials);
                 $user_email->save();
             }
         } catch (Exception $e) {
             Logger::log("ERROR Google Sync Step 2");
             Logger::log($e->getMessage());
         }
     }
     $service_is_working = true;
     if ($user) {
         //calendars actions
         $calendars_actions = array();
         //1 = start sync
         $calendars_actions[1] = array();
         $calendars_actions[1]['text'] = lang('start sync');
         $calendars_actions[1]['function'] = 'og.google_calendar_start_sync_calendar';
         //2 = stop sync
         $calendars_actions[2] = array();
         $calendars_actions[2]['text'] = lang('stop sync');
         $calendars_actions[2]['function'] = 'og.google_calendar_stop_sync_calendar';
         //3 = restart sync
         $calendars_actions[3] = array();
         $calendars_actions[3]['text'] = lang('restart sync');
         $calendars_actions[3]['function'] = 'og.google_calendar_start_sync_calendar';
         //4 = delete calendar
         $calendars_actions[4] = array();
         $calendars_actions[4]['text'] = lang('delete calendar');
         $calendars_actions[4]['function'] = 'og.google_calendar_delete_calendar';
         //5 = delete calendar
         $calendars_actions[5] = array();
         $calendars_actions[5]['text'] = lang('classify');
         $calendars_actions[5]['function'] = 'og.google_calendar_classify';
         tpl_assign('calendars_actions', $calendars_actions);
         //calendars status
         //1 = never sync
         //2 = in sync
         //3 = not in sync
         //4 = deleted from google
         $calendars_status = array();
         //1 = never sync
         $calendars_status[1] = array();
         $calendars_status[1]['text'] = lang('never sync');
         $calendars_status[1]['actions'] = array(1);
         //2 = in sync
         $calendars_status[2] = array();
         $calendars_status[2]['text'] = lang('in sync');
         $calendars_status[2]['actions'] = array(2, 4, 5);
         //3 = not in sync
         $calendars_status[3] = array();
         $calendars_status[3]['text'] = lang('not in sync');
         $calendars_status[3]['actions'] = array(3, 4);
         //4 = deleted from google
         $calendars_status[4] = array();
         $calendars_status[4]['text'] = lang('deleted from google');
         $calendars_status[4]['actions'] = array(4);
         //5 = delete calendar
         $calendars_actions[5] = array();
         $calendars_actions[5]['text'] = lang('classify');
         $calendars_actions[5]['function'] = 'og.google_calendar_classify';
         tpl_assign('calendars_status', $calendars_status);
         $user_data['id'] = $user->getId();
         $user_data['auth_user'] = $user->getAuthUser();
         $user_data['sync'] = $user->getSync();
         tpl_assign('user', $user_data);
         // Step 3: We have access we can now create our service
         try {
             $service = $this->connect_with_google_calendar($user);
             $calendarList = $service->calendarList->listCalendarList();
             $instalation = explode("/", ROOT_URL);
             $instalation_name = end($instalation);
             $feng_calendar_name = lang('feng calendar', $instalation_name);
             while (true) {
                 foreach ($calendarList->getItems() as $calendarListEntry) {
                     //is feng calendar
                     if ($calendarListEntry->getSummary() == $feng_calendar_name) {
                         continue;
                     }
                     $external_calendars[$calendarListEntry->getId()] = array('original_calendar_id' => $calendarListEntry->getId(), 'title' => $calendarListEntry->getSummary(), 'calendar_status' => 1);
                 }
                 $pageToken = $calendarList->getNextPageToken();
                 if ($pageToken) {
                     $optParams = array('pageToken' => $pageToken);
                     $calendarList = $service->calendarList->listCalendarList($optParams);
                 } else {
                     break;
                 }
             }
         } catch (Exception $e) {
             $service_is_working = false;
         }
         //Calendars status
         $view_calendars = array();
         $calendars = ExternalCalendars::findByExtCalUserId($user->getId(), true);
         foreach ($calendars as $ext_calendar) {
             $view_calendar = array();
             $view_calendar['original_calendar_id'] = $ext_calendar->getOriginalCalendarId();
             $view_calendar['title'] = $ext_calendar->getCalendarName();
             $members = array();
             $member_ids = explode(",", $ext_calendar->getRelatedTo());
             foreach ($member_ids as $member_id) {
                 $members[$member_id] = $member_id;
             }
             if (count($members)) {
                 $view_calendar['members'] = json_encode(array(1 => $members));
             }
             $view_calendar['calendar_id'] = $ext_calendar->getId();
             //deleted on google
             $view_calendar['calendar_status'] = 4;
             if (array_key_exists($ext_calendar->getOriginalCalendarId(), $external_calendars)) {
                 //not in sync
                 $view_calendar['calendar_status'] = 3;
                 if ($ext_calendar->getSync()) {
                     //in sync
                     $view_calendar['calendar_status'] = 2;
                 }
                 unset($external_calendars[$ext_calendar->getOriginalCalendarId()]);
             }
             $view_calendars[$ext_calendar->getOriginalCalendarId()] = $view_calendar;
         }
         $all_calendars = array_merge($external_calendars, $view_calendars);
         ksort($all_calendars);
         tpl_assign('external_calendars', $all_calendars);
         $sync_from_feng = false;
         if ($user->getSync() == 1) {
             $calendar_feng = ExternalCalendars::findFengCalendarByExtCalUserIdValue($user->getId());
             if ($calendar_feng instanceof ExternalCalendar && $calendar_feng->getSync() == 0) {
                 $sync_from_feng = false;
             } else {
                 $sync_from_feng = true;
             }
         }
         if ($sync_from_feng) {
             $sync_from_feng_action = "og.google_calendar_stop_sync_feng_calendar";
             $sync_from_feng_color = "2";
             $sync_from_feng_text = lang('stop sync');
         } else {
             $sync_from_feng_action = "og.google_calendar_start_sync_feng_calendar";
             $sync_from_feng_color = "3";
             $sync_from_feng_text = lang('start sync');
         }
         tpl_assign('sync_from_feng_action', $sync_from_feng_action);
         tpl_assign('sync_from_feng_color', $sync_from_feng_color);
         tpl_assign('sync_from_feng_text', $sync_from_feng_text);
     }
     if (!$user || !$service_is_working) {
         // Step 1:  The user has not authenticated we give them a link to login
         if (!$google_code) {
             $client->setScopes(array('https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'));
             $client->setState(ROOT_URL . '/index.php?c=external_calendar&a=calendar_sinchronization');
             $authUrl = $client->createAuthUrl();
             tpl_assign('auth_url', $authUrl);
         }
     }
 }