public function process(Vtiger_Request $request) { $moduleName = $request->getModule(); $ics = $request->get('ics') . '.ics'; $icsUrl = 'cache/import/' . $ics; if (file_exists($icsUrl)) { $currentUserModel = Users_Record_Model::getCurrentUserModel(); $userId = $currentUserModel->getId(); $lastImport = new iCalLastImport(); $lastImport->clearRecords($userId); $eventModule = 'Events'; $todoModule = 'Calendar'; $skipFields = array($eventModule => array('duration_hours'), $todoModule => array('eventstatus')); $requiredFields = array(); $modules = array($eventModule, $todoModule); $calendarModel = Vtiger_Module_Model::getInstance($moduleName); foreach ($modules as $module) { $moduleRequiredFields = array_keys($calendarModel->getRequiredFields($module)); $requiredFields[$module] = array_diff($moduleRequiredFields, $skipFields[$module]); $totalCount[$module] = 0; $skipCount[$module] = 0; } $ical = new iCal(); $icalActivities = $ical->iCalReader($ics); $noOfActivities = count($icalActivities); for ($i = 0; $i < $noOfActivities; $i++) { if ($icalActivities[$i]['TYPE'] == 'VEVENT') { $activity = new iCalendar_event(); $module = $eventModule; } else { $activity = new iCalendar_todo(); $module = $todoModule; } $totalCount[$module]++; $activityFieldsList = $activity->generateArray($icalActivities[$i]); if (!array_key_exists('visibility', $activityFieldsList)) { $activityFieldsList['visibility'] = ' '; } if (array_key_exists('taskpriority', $activityFieldsList)) { $priorityMap = array('0' => 'Medium', '1' => 'High', '2' => 'Medium', '3' => 'Low'); $priorityval = $activityFieldsList['taskpriority']; if (array_key_exists($priorityval, $priorityMap)) { $activityFieldsList['taskpriority'] = $priorityMap[$priorityval]; } } $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName); $recordModel->setData($activityFieldsList); $recordModel->set('assigned_user_id', $userId); $skipRecord = false; foreach ($requiredFields[$module] as $key) { $value = $recordModel->get($key); if (empty($value)) { $skipCount[$module]++; $skipRecord = true; break; } } $recordModel->save(); $lastImport = new iCalLastImport(); $lastImport->setFields(array('userid' => $userId, 'entitytype' => $todoModule, 'crmid' => $recordModel->getId())); $lastImport->save(); if (!empty($icalActivities[$i]['VALARM'])) { $recordModel->setActivityReminder(0, '', ''); } } $return = 'LBL_IMPORT_ICS_ERROR_NO_RECORD'; $importedEvents = $totalCount[$eventModule] - $skipCount[$eventModule]; $importedTasks = $totalCount[$todoModule] - $skipCount[$todoModule]; if ($importedEvents > 0 || $importedTasks > 0) { $return = 'LBL_IMPORT_ICS_SUCCESS'; } @unlink($icsUrl); } else { $return = 'LBL_IMPORT_ICS_ERROR_NO_RECORD'; } $response = new Vtiger_Response(); $response->setResult(vtranslate($return, $moduleName)); $response->emit(); }
$file_details = $_FILES['ics_file']; $binFile = 'vtiger_import' . date('YmdHis'); $file = $import_dir . '' . $binFile; $filetmp_name = $file_details['tmp_name']; $upload_status = move_uploaded_file($filetmp_name, $file); $skip_fields = array('Events' => array('duration_hours'), 'Calendar' => array('eventstatus')); $required_fields = array(); $modules = array('Events', 'Calendar'); foreach ($modules as $module) { $calendar = CRMEntity::getInstance('Calendar'); $calendar->initRequiredFields($module); $val = array_keys($calendar->required_fields); $required_fields[$module] = array_diff($val, $skip_fields[$module]); } $ical = new iCal(); $ical_activities = $ical->iCalReader($binFile); $count['Events'] = $count['Calendar'] = $skip_count['Events'] = $skip_count['Calendar'] = 0; for ($i = 0; $i < count($ical_activities); $i++) { if ($ical_activities[$i]['TYPE'] == 'VEVENT') { $activity = new iCalendar_event(); $module = 'Events'; } else { $activity = new iCalendar_todo(); $module = 'Calendar'; } $count[$module]++; $calendar = CRMEntity::getInstance('Calendar'); $calendar->column_fields = $activity->generateArray($ical_activities[$i]); $calendar->column_fields['assigned_user_id'] = $current_user->id; foreach ($required_fields[$module] as $key) { if (empty($calendar->column_fields[$key])) {
/** * Function to show result of import * @param Vtiger_Request $request */ public function importResult(Vtiger_Request $request) { $currentUserModel = Users_Record_Model::getCurrentUserModel(); $userId = $currentUserModel->getId(); $moduleName = $request->getModule(); $viewer = $this->getViewer($request); $request->set('type', 'ics'); if (Import_Utils_Helper::validateFileUpload($request)) { $lastImport = new iCalLastImport(); $lastImport->clearRecords($userId); $eventModule = 'Events'; $todoModule = 'Calendar'; $skipFields = array($eventModule => array('duration_hours'), $todoModule => array('activitystatus')); $requiredFields = array(); $modules = array($eventModule, $todoModule); $calendarModel = Vtiger_Module_Model::getInstance($moduleName); foreach ($modules as $module) { $moduleRequiredFields = array_keys($calendarModel->getRequiredFields($module)); $requiredFields[$module] = array_diff($moduleRequiredFields, $skipFields[$module]); $totalCount[$module] = 0; $skipCount[$module] = 0; } $ical = new iCal(); $icalActivities = $ical->iCalReader("IMPORT_" . $userId); $noOfActivities = count($icalActivities); for ($i = 0; $i < $noOfActivities; $i++) { if ($icalActivities[$i]['TYPE'] == 'VEVENT') { $activity = new iCalendar_event(); $module = $eventModule; } else { $activity = new iCalendar_todo(); $module = $todoModule; } $totalCount[$module]++; $activityFieldsList = $activity->generateArray($icalActivities[$i]); if (!array_key_exists('visibility', $activityFieldsList)) { $activityFieldsList['visibility'] = ' '; } if (array_key_exists('taskpriority', $activityFieldsList)) { $priorityMap = array('0' => 'Medium', '1' => 'High', '2' => 'Medium', '3' => 'Low'); $priorityval = $activityFieldsList['taskpriority']; if (array_key_exists($priorityval, $priorityMap)) { $activityFieldsList['taskpriority'] = $priorityMap[$priorityval]; } } $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName); $recordModel->setData($activityFieldsList); $recordModel->set('assigned_user_id', $userId); $skipRecord = false; foreach ($requiredFields[$module] as $key) { $value = $recordModel->get($key); if (empty($value)) { $skipCount[$module]++; $skipRecord = true; break; } } if ($skipRecord === true) { continue; } $recordModel->save(); $lastImport = new iCalLastImport(); $lastImport->setFields(array('userid' => $userId, 'entitytype' => $todoModule, 'crmid' => $recordModel->getId())); $lastImport->save(); if (!empty($icalActivities[$i]['VALARM'])) { $recordModel->setActivityReminder(0, '', ''); } } $importedEvents = $totalCount[$eventModule] - $skipCount[$eventModule]; $importedTasks = $totalCount[$todoModule] - $skipCount[$todoModule]; $viewer->assign('SUCCESS_EVENTS', $importedEvents); $viewer->assign('SKIPPED_EVENTS', $skipCount[$eventModule]); $viewer->assign('SUCCESS_TASKS', $importedTasks); $viewer->assign('SKIPPED_TASKS', $skipCount[$todoModule]); } else { $viewer->assign('ERROR_MESSAGE', $request->get('error_message')); } $viewer->assign('MODULE', $moduleName); $viewer->assign('VIEW', 'List'); $viewer->view('ImportResult.tpl', $moduleName); }
public function import() { if (isset($this->urlParams['ID'])) { $file = Director::baseFolder() . "/event_calendar/import/" . $this->urlParams['ID'] . ".ics"; } if (file_exists($file)) { $parser = new iCal(array($file)); $ics_events = $parser->iCalReader(); if (is_array($ics_events) && is_array($ics_events[$file])) { $dt_start = null; $dt_end = null; $i = 1; foreach ($ics_events[$file] as $event) { if (!$dt_start && !$dt_end || (!isset($event[$dt_start]) || !isset($event[$dt_end]))) { foreach ($event as $k => $v) { if (substr($k, 0, 7) == "DTSTART") { $dt_start = $k; } if (substr($k, 0, 5) == "DTEND") { $dt_end = $k; } } } if (isset($event[$dt_start]) && isset($event[$dt_end])) { list($start_date, $end_date, $start_time, $end_time) = CalendarUtil::date_info_from_ics($event[$dt_start], $event[$dt_end]); $c = $this->getModel()->getEventDateTimeClass(); $new_date = new $c(); $new_date->StartDate = $start_date; $new_date->StartTime = $start_time; $new_date->EndDate = $end_date; $new_date->EndTime = $end_time; if (isset($event['DESCRIPTION']) && !empty($event['DESCRIPTION'])) { $new_date->Content = $event['DESCRIPTION']; } if (isset($event['SUMMARY']) && !empty($event['SUMMARY'])) { $new_date->Title = $event['SUMMARY']; } $new_date->is_announcement = 1; $new_date->CalendarID = $this->ID; $new_date->write(); echo sprintf("<p style='color:green;'>Event <em>%s</em> imported successfully, and was assigned ID %d</p>", $new_date->Title, $new_date->ID); } else { echo sprintf("<p style='color:red;'>Event #%d could not be imported.</p>", $i); } $i++; } } die; } else { die("The file {$file} could not be found."); } }