Migration: Added dates fix for new sessions and a branch id to the room number

skala
Yannick Warnier 12 years ago
parent 10209ebb37
commit b02f260a98
  1. 95
      tests/migrate/migration.custom.class.php

@ -351,11 +351,12 @@ class MigrationCustom {
'weight' => '20',
'max' => '20'
);*/
//Here the $data variable has $data['course_code'] that will be added when creating the session
self::fix_access_dates($data);
// Here the $data variable has $data['course_code'] that will be added
// when creating the session
// If session already exists, it will return the existing session id
$session_id = SessionManager::add($data, true);
//error_log('create_session');
if (!$session_id) {
error_log('Error: Failed to create_session '.$data['name']);
} else{
@ -1067,6 +1068,8 @@ class MigrationCustom {
if ($session_info['error'] == false) {
unset($session_info['error']);
// check dates (only do this at session creation)
self::fix_access_dates($session_info);
$session_id = SessionManager::add($session_info);
$session_info = api_get_session_info($session_id, true);
if ($session_id) {
@ -1245,6 +1248,10 @@ class MigrationCustom {
$data = Migration::soap_call($web_service_details, $function_name, array('intIdSede'=> $original_data['branch_id'], "uidid".$extra_field_variable => $original_data['item_id']));
if ($data['error'] == false) {
// Exceptional treatment for specific fields
if ($extra_field_variable == 'aula') {
$data['name'] = $original_data['branch_id'].' - '.$data['name'];
}
$extra_field = new ExtraField($type);
$extra_field_info = $extra_field->get_handler_field_info_by_field_variable($extra_field_variable);
if ($extra_field_info) {
@ -1308,6 +1315,10 @@ class MigrationCustom {
$data = Migration::soap_call($web_service_details, $function_name, $params);
if ($data['error'] == false) {
// Exceptional treatment for specific fields
if ($extra_field_variable == 'aula') {
$data['name'] = $original_data['branch_id'].' - '.$data['name'];
}
//Update 1 item
if (!empty($extra_field_option_info)) {
@ -1949,4 +1960,82 @@ error_log('Editing extra field: '.print_r($extra_field_option_info,1));
unset($result['end']);
return $result;
}
/**
* Review the dates given in the session details array and make sure we
* define them in the best possible way
* @param array Array of session data passed by reference (modified in-place)
* @return bool Always returns true
*/
static function fix_access_dates(&$data) {
// Check the $data array for access_start_date, access_end_date,
// coach_access_start_date and coach_access_end_date. If any is not
// defined, reuse the period or other dates to fill it
$nt = '0000-00-00 00:00:00'; //declar a "null time"
$period = (!empty($data['extra_field_periodo'])?$data['extra_field_periodo']:'000000');
$asd = (!empty($data['access_start_date'])?$data['access_start_date']:$nt);
$aed = (!empty($data['access_end_date'])?$data['access_end_date']:$nt);
$casd = (!empty($data['coach_access_start_date'])?$data['coach_access_start_date']:$nt);
$caed = (!empty($data['coach_access_end_date'])?$data['coach_access_end_date']:$nt);
$vstart = $vend = $nt;
$matches = array();
$match = preg_match('/-\s(\d{4})(\d{2})\s-/',$row['name'],$matches);
$now = new DateTime(null);
$cy = $now->format('Y');
$cm = $now->format('m');
if (!empty($match)) {
$ny = $y = $matches[1];
$nm = 1 + $m = $matches[2];
//ignore current month
if ($y == $cy && $m == $cm) { break; }
if ($m == 12) {
$ny = $y+1;
$nm = 1;
}
$start = new DateTime();
$end = new DateTime();
$start->setDate($y, $m, 1);
$end->setDate($ny, $nm, 1);
$end->modify('-1 day');
$vstart = $start->format('Y-m-d H:i:s');
$vend = $end->format('Y-m-d H:i:s');
}
// Now assess the situation
if ($period != '000000') {
if ($asd != $nt && $aed != $nt && $casd != $nt && $caed != $nt) {
//everything is defined, perfect, nothing to do
break;
}
if ($asd == $nt) {
//if access_start_date is undefined, re-use the period's date
$asd = $vstart;
}
if ($casd == $nt) {
//access_start_date is defined but not coach_access_start_date,
// so re-use access_start_date
$casd = $asd;
}
if ($aed == $nt) {
//if access_end_date is undefined, re-use the period's date
$aed = $vend;
}
if ($caed == $nt) {
//access_end_date is defined but not coach_access_end_date,
// so re-use access_end_date
$caed = $aed;
}
} else {
// if the period is not defined
if ($asd != $nt && $casd == $nt) {
$casd = $asd;
}
if ($aed != $nt && $caed == $nt) {
$caed = $aed;
}
}
$params['access_start_date'] = $asd;
$params['access_end_date'] = $aed;
$params['coach_access_start_date'] = $casd;
$params['coach_access_end_date'] = $caed;
return true;
}
}

Loading…
Cancel
Save