t = $t;
$this->upgradeCommand = $hooks->wrap( $upgradeCommand );
$this->self = $hooks->wrap($this);
$this->appCommand = $hooks->wrap( $appCommand );
$this->usersQuery = $hooks->wrap( $usersQuery );
$this->shiftTypes = $hooks->wrap($shiftTypes);
$this->shiftTypesCommand = $hooks->wrap($shiftTypesCommand);
$this->calendars = $hooks->wrap($calendars);
$this->calendarsCommand = $hooks->wrap($calendarsCommand);
$this->employees = $hooks->wrap($employees);
$this->employeesCommand = $hooks->wrap($employeesCommand);
$this->shifts = $hooks->wrap($shifts);
$this->shiftsCommand = $hooks->wrap($shiftsCommand);
}
public function execute()
{
global $wpdb;
$prfx = $wpdb->prefix . 'shiftcontroller_v3_';
$sql = "SELECT * FROM {$prfx}locations";
$oldLocations = $wpdb->get_results( $sql, ARRAY_A );
$level = 1;
$sql = "SELECT * FROM {$prfx}users WHERE level & $level";
$oldEmployees = $wpdb->get_results( $sql, ARRAY_A );
$sql = "SELECT * FROM {$prfx}shifts";
$oldShifts = $wpdb->get_results( $sql, ARRAY_A );
$this->upgradeCommand->upgrade( $oldLocations, $oldEmployees, $oldShifts );
return array('schedule', '__Upgraded__');
}
public function get()
{
global $wpdb;
$prfx = $wpdb->prefix . 'shiftcontroller_v3_';
$step = isset( $_GET['step'] ) ? $_GET['step'] : '';
$sql = "SELECT * FROM {$prfx}locations";
$oldLocations = $wpdb->get_results( $sql, ARRAY_A );
$level = 1;
$sql = "SELECT * FROM {$prfx}users WHERE level & $level";
$oldEmployees = $wpdb->get_results( $sql, ARRAY_A );
$sql = "SELECT * FROM {$prfx}shifts";
$oldShifts = $wpdb->get_results( $sql, ARRAY_A );
$this->upgradeCommand->upgrade( $oldLocations, $oldEmployees, $oldShifts );
echo 'Locations: ' . count( $oldLocations ) . '
';
echo 'Employees: ' . count( $oldEmployees ) . '
';
echo 'Shifts: ' . count( $oldShifts ) . '
';
// echo "__Upgraded__";
exit;
return array('schedule', '__Upgraded__');
}
public function old()
{
global $wpdb;
$prfx = $wpdb->prefix . 'shiftcontroller_v3_';
$sql = "SELECT * FROM {$prfx}locations";
$oldLocations = $wpdb->get_results( $sql, ARRAY_A );
$level = 1;
$sql = "SELECT * FROM {$prfx}users WHERE level & $level";
$oldEmployees = $wpdb->get_results( $sql, ARRAY_A );
$sql = "SELECT * FROM {$prfx}shifts";
$oldShifts = $wpdb->get_results( $sql, ARRAY_A );
$ret = array( $oldLocations, $oldEmployees, $oldShifts );
return $ret;
}
public function get1()
{
list( $oldLocations, $oldEmployees, $oldShifts ) = $this->old();
$onlyCalendars = [
];
// shift types
$this->shiftTypesCommand->deleteAll();
$newShiftTypesIds = array();
$newShiftTypesIds = array();
try {
$newShiftTypesIds[] = $this->shiftTypesCommand->createHours( 'Full Time', 9*60*60, 18*60*60, 13*60*60, 14*60*60 );
$newShiftTypesIds[] = $this->shiftTypesCommand->createHours( 'Morning', 9*60*60, 13*60*60 );
$newShiftTypesIds[] = $this->shiftTypesCommand->createHours( 'Evening', 17*60*60, 21*60*60 );
$holidaysId = $this->shiftTypesCommand->createDays( 'Holidays', 2, 30 );
}
catch( HC3_ExceptionArray $e ){
echo "ERROR!";
_print_r( $e->getErrors() );
exit;
}
$newShiftTypes = $this->shiftTypes->findManyById( $newShiftTypesIds );
$holidaysShiftType = $this->shiftTypes->findById( $holidaysId );
// locations
$this->calendarsCommand->deleteAll();
$newCalendarsIds = array();
$oldToNew_Calendars = array();
foreach( $oldLocations as $e ){
if( $onlyCalendars ){
if( ! in_array($e['name'], $onlyCalendars) ) continue;
}
try {
$newId = $this->calendarsCommand->create( $e['name'], $e['color'], $e['description'] );
}
catch( HC3_ExceptionArray $e ){
echo "ERROR!";
_print_r( $e->getErrors() );
exit;
}
$oldToNew_Calendars[ $e['id'] ] = $newId;
$newCalendarsIds[] = $newId;
}
$newCalendars = $this->calendars->findManyActiveById( $newCalendarsIds );
reset( $newCalendars );
foreach( $newCalendars as $calendar ){
reset( $newShiftTypes );
foreach( $newShiftTypes as $shiftType ){
$this->appCommand->addShiftTypeToCalendar( $shiftType, $calendar );
}
}
// timeoff
try {
$newTimeoffId = $this->calendarsCommand->create( 'Time Off', '#a9a9a9' );
}
catch( HC3_ExceptionArray $e ){
echo "ERROR!";
_print_r( $e->getErrors() );
exit;
}
$newTimeoffCalendar = $this->calendars->findById( $newTimeoffId );
$this->appCommand->addShiftTypeToCalendar( $holidaysShiftType, $newTimeoffCalendar );
$newCalendars[ $newTimeoffId ] = $newTimeoffCalendar;
echo "NEW CALENDARS: " . count( $newCalendars ) . '
';
exit;
}
public function get2()
{
list( $oldLocations, $oldEmployees, $oldShifts ) = $this->old();
$newEmployeesIds = array();
$oldToNew_Employees = array();
$nextOffset = null;
$perStep = 100;
$totalCount = count($oldEmployees);
$offset = 0;
if( $totalCount > $perStep ){
$offset = isset( $_GET['offset'] ) ? $_GET['offset'] : 0;
if( ! $offset ){
// employees
$this->employeesCommand->deleteAll();
}
$nextOffset = $offset + $perStep;
if( $nextOffset > $totalCount ) $nextOffset = NULL;
$oldEmployees = array_slice( $oldEmployees, $offset, $perStep );
}
else {
// employees
$this->employeesCommand->deleteAll();
}
reset( $oldEmployees );
foreach( $oldEmployees as $e ){
$title = array();
if( strlen($e['first_name']) ){
$title[] = $e['first_name'];
}
if( strlen($e['last_name']) ){
$title[] = $e['last_name'];
}
$title = join(' ', $title);
$try = 1;
$newId = 0;
$srcTitle = $title;
while( ! $newId ){
try {
$newId = $this->employeesCommand->create( $title );
if( ! $e['active'] ){
$newEmpl = $this->employees->findById( $newId );
$this->employeesCommand->archive( $newEmpl );
}
}
catch( HC3_ExceptionArray $ex ){
$errors = $ex->getErrors();
if( isset($errors['title']) ){
$try++;
$title = $srcTitle . ' (' . $try . ')';
}
else {
echo "ERROR IN EMPLOYEES!";
_print_r( $errors );
exit;
}
}
}
$oldToNew_Employees[ $e['id'] ] = $newId;
$newEmployeesIds[] = $newId;
}
$newUsersIds = array_keys( $oldToNew_Employees );
$newUsers = $this->usersQuery->findManyById( $newUsersIds );
$newEmployees = $this->employees->findManyActiveById( $newEmployeesIds );
$openShiftEmployee = $this->employees->findById( 0 );
reset( $newUsers );
foreach( $newUsers as $user ){
$userId = $user->getId();
$employeeId = $oldToNew_Employees[ $userId ];
if( ! isset($newEmployees[ $employeeId ]) ){
continue;
}
$employee = $newEmployees[ $employeeId ];
$this->appCommand->linkEmployeeToUser( $employee, $user );
}
echo "NEW EMPLOYEES: " . $offset . '-' . ($offset + count($newEmployeesIds) ) . '/' . $totalCount . '
';
if( $nextOffset ){
echo 'next' . '
';
}
exit;
}
public function get3()
{
$newCalendars = $this->calendars->findAll();
$newEmployees = $this->employees->findAll();
$openShiftEmployee = $this->employees->findById( 0 );
reset( $newCalendars );
foreach( $newCalendars as $calendar ){
reset( $newEmployees );
foreach( $newEmployees as $employee ){
if( ! $employee->isActive() ){
continue;
}
$this->appCommand->addEmployeeToCalendar( $employee, $calendar );
}
$this->appCommand->addEmployeeToCalendar( $openShiftEmployee, $calendar );
}
echo "NEW EMPLOYEES TO CALENDARS: " . count( $newEmployees ) . ' - ' . count( $newCalendars ) . '
';
exit;
}
public function get4()
{
list( $oldLocations, $oldEmployees, $oldShifts ) = $this->old();
$nextOffset = null;
$perStep = 100;
$totalCount = count($oldShifts);
$offset = 0;
if( $totalCount > $perStep ){
$offset = isset( $_GET['offset'] ) ? $_GET['offset'] : 0;
if( ! $offset ){
$this->shiftsCommand->deleteAll();
}
$nextOffset = $offset + $perStep;
if( $nextOffset > $totalCount ) $nextOffset = NULL;
$oldShifts = array_slice( $oldShifts, $offset, $perStep );
}
else {
$this->shiftsCommand->deleteAll();
}
$newCalendars = $this->calendars->findAll();
$newEmployees = $this->employees->findAll();
$newTimeoffId = NULL;
foreach( $newCalendars as $e ){
if( $e->isTimeoff() ){
$newTimeoffId = $e->getId();
break;
}
}
$oldToNew_Calendars = array();
foreach( $oldLocations as $e ){
reset( $newCalendars );
foreach( $newCalendars as $e2 ){
if( $e2->getTitle() == $e['name'] ){
$oldToNew_Calendars[ $e['id'] ] = $e2->getId();
break;
}
}
}
$oldToNew_Employees = array();
foreach( $oldEmployees as $e ){
$title = array();
if( strlen($e['first_name']) ){
$title[] = $e['first_name'];
}
if( strlen($e['last_name']) ){
$title[] = $e['last_name'];
}
$title = join(' ', $title);
reset( $newEmployees );
foreach( $newEmployees as $e2 ){
if( $e2->getTitle() == $title ){
$oldToNew_Employees[ $e['id'] ] = $e2->getId();
break;
}
}
}
// shifts
$newShiftIds = array();
foreach( $oldShifts as $e ){
// timeoff
if( 2 == $e['type'] ){
$newCalendarId = $newTimeoffId;
}
else {
if( ! isset($oldToNew_Calendars[$e['location_id']]) ){
continue;
}
$newCalendarId = $oldToNew_Calendars[$e['location_id']];
}
if( ! $newCalendarId ) continue;
$calendar = $newCalendars[ $newCalendarId ];
if( $e['user_id'] ){
if( ! isset($oldToNew_Employees[$e['user_id']]) ){
continue;
}
$newEmployeeId = $oldToNew_Employees[$e['user_id']];
}
else {
$newEmployeeId = 0;
}
if( ! array_key_exists($newEmployeeId, $newEmployees) ){
continue;
}
$employee = $newEmployees[ $newEmployeeId ];
$start = $this->t->setDateDb( $e['date'] )->modify('+' . $e['start'] . ' seconds')->formatDateTimeDb();
$end = $this->t->setDateDb( $e['date_end'] )->modify('+' . $e['end'] . ' seconds')->formatDateTimeDb();
$status = ( $e['status'] == 1 ) ? SH4_Shifts_Model::STATUS_PUBLISH : SH4_Shifts_Model::STATUS_DRAFT;
try {
$newShiftIds[] = $this->shiftsCommand->create( $calendar, $start, $end, $employee, NULL, NULL, $status );
}
catch( HC3_ExceptionArray $e ){
echo "ERROR!";
_print_r( $e->getErrors() );
exit;
}
}
echo "NEW SHIFTS: " . $offset . '-' . ($offset + count( $newShiftIds )) . '/' . $totalCount . '
';
// $nextOffset = $offset + count($newShiftIds);
// if( $nextOffset > $totalCount ) $nextOffset = NULL;
if( $nextOffset ){
$to = 'admin.php?page=shiftcontroller4&hca=upgrade3-4&offset=' . $nextOffset;
$html = "";
echo 'next' . '
';
echo $html;
}
exit;
}
}