public function doTransition($note = null) { // Make sure the transition makes sense based on the current state of the internship $currStateName = $this->internship->getStateName(); $sourceStateName = $this->t->getSourceState(); if (is_array($sourceStateName)) { if (!in_array($currStateName, $sourceStateName)) { throw new InvalidArgumentException('Invalid transition source state.'); } } else { if ($sourceStateName != '*' && $sourceStateName != $currStateName) { throw new InvalidArgumentException('Invalid transition source state.'); } } if (!$this->t->allowed($this->internship)) { throw new Exception("You do not have permission to set the internship to the requested status."); } // Check that the fields required to take this transition have been filled in // Will throw an exception in the case of any missing data. $this->t->checkRequiredFields($this->internship); $sourceState = WorkflowStateFactory::getState($currStateName); $destStateName = $this->t->getDestState(); if ($destStateName == null) { // No destination state, so see if we need to add a note (no state change) if (!is_null($note)) { $changeHistory = new ChangeHistory($this->internship, Current_User::getUserObj(), time(), $sourceState, $sourceState, $note); $changeHistory->save(); } return; } $destState = WorkflowStateFactory::getState($destStateName); $this->t->onTransition($this->internship); $this->internship->setState($destState); $this->internship->save(); $changeHistory = new ChangeHistory($this->internship, Current_User::getUserObj(), time(), $sourceState, $destState, $note); $changeHistory->save(); }
/** * Builds the body of the internship form. */ public function buildInternshipForm() { javascript('jquery'); javascript('jquery_ui'); javascriptMod('intern', 'spinner'); javascriptMod('intern', 'formGoodies'); // Form Submission setup $this->form->setAction('index.php?module=intern&action=add_internship'); $this->form->addSubmit('submit', 'Save'); /********************* * Workflow / Status * */ PHPWS_Core::initModClass('intern', 'WorkflowStateFactory.php'); PHPWS_Core::initModClass('intern', 'WorkflowTransitionView.php'); // Check the Internship's state, and set a default state if it's a new internship $workflowState = $this->intern->getWorkflowState(); if (is_null($workflowState)) { $state = WorkflowStateFactory::getState('CreationState'); $this->intern->setState($state); // Set this initial value } // Workflow Transitions View, adds fields to the form by reference $transView = new WorkflowTransitionView($this->intern, $this->form); $transView->show(); /***************** * OIED Approval * */ $this->form->addCheck('oied_certified'); $this->form->setLabel('oied_certified', 'Certified by Office of International Education and Development'); // If the user is not allowed to do OIED certification, disable the checkbox if (!Current_User::allow('intern', 'oied_certify') || $this->intern->isDomestic()) { $this->form->setExtra('oied_certified', 'disabled'); } // Hidden field that shadows the real field, to ensure a value is always submitted, // because disabled fields are not submitted $this->form->addHidden('oied_certified_hidden'); /****************** * Student fields * */ $this->form->addText('student_first_name'); $this->form->setLabel('student_first_name', 'First Name'); $this->form->addCssClass('student_first_name', 'form-control'); $this->form->addText('student_middle_name'); $this->form->setLabel('student_middle_name', 'Middle Name/Initial'); $this->form->addCssClass('student_middle_name', 'form-control'); $this->form->addText('student_last_name'); $this->form->setLabel('student_last_name', 'Last Name'); $this->form->addCssClass('student_last_name', 'form-control'); $this->form->addText('banner'); $this->form->setLabel('banner', 'Banner ID'); // Digits only $this->form->addCssClass('banner', 'form-control'); $this->form->addText('student_phone'); $this->form->setLabel('student_phone', 'Phone'); $this->form->addCssClass('student_phone', 'form-control'); $this->form->addText('student_email'); $this->form->setLabel('student_email', 'ASU Email'); $this->form->addCssClass('student_email', 'form-control'); /* Student Address */ $this->form->addText('student_address'); $this->form->setLabel('student_address', 'Address'); $this->form->addCssClass('student_address', 'form-control'); $this->form->addText('student_city'); $this->form->setLabel('student_city', 'City'); $this->form->addCssClass('student_city', 'form-control'); $this->form->addDropBox('student_state', State::$UNITED_STATES); $this->form->setLabel('student_state', 'State'); $this->form->addCssClass('student_state', 'form-control'); $this->form->addText('student_zip'); $this->form->setLabel('student_zip', 'Zip Code'); $this->form->addCssClass('student_zip', 'form-control'); // GPA $this->form->addText('student_gpa'); $this->form->setLabel('student_gpa', 'GPA'); $this->form->addCssClass('student_gpa', 'form-control'); // Campus $this->form->addRadioAssoc('campus', array('main_campus' => 'Main Campus', 'distance_ed' => 'Distance Ed')); $this->form->setMatch('campus', 'main_campus'); // Student level $levels = array('-1' => 'Choose level', 'ugrad' => 'Undergraduate', 'grad' => 'Graduate'); $this->form->addDropBox('student_level', $levels); $this->form->setLabel('student_level', 'Level'); $this->form->addCssClass('student_level', 'form-control'); // Student Major dummy box (gets replaced by dropdowns below using JS when student_level is selected) $levels = array('-1' => 'Choose student level first'); $this->form->addDropBox('student_major', $levels); $this->form->setLabel('student_major', 'Major / Program'); $this->form->addCssClass('student_major', 'form-control'); /***************************** * Undergrad Major Drop Down * */ if (isset($this->intern)) { $majors = Major::getMajorsAssoc($this->intern->ugrad_major); } else { $majors = Major::getMajorsAssoc(); } $this->form->addSelect('ugrad_major', $majors); $this->form->setLabel('ugrad_major', 'Undergraduate Majors & Certificate Programs'); $this->form->addCssClass('ugrad_major', 'form-control'); /**************************** * Graduate Major Drop Down * */ if (isset($this->intern)) { $progs = GradProgram::getGradProgsAssoc($this->intern->grad_prog); } else { $progs = GradProgram::getGradProgsAssoc(); } $this->form->addSelect('grad_prog', $progs); $this->form->setLabel('grad_prog', 'Graduate Majors & Certificate Programs'); $this->form->addCssClass('grad_prog', 'form-control'); /************************ * Department Drop Down * */ if (Current_User::isDeity()) { if (!is_null($this->intern)) { $depts = Department::getDepartmentsAssoc($this->intern->department_id); } else { $depts = Department::getDepartmentsAssoc(); } } else { if (!is_null($this->intern)) { $depts = Department::getDepartmentsAssocForUsername(Current_User::getUsername(), $this->intern->department_id); } else { $depts = Department::getDepartmentsAssocForUsername(Current_User::getUsername()); } } $this->form->addSelect('department', $depts); $this->form->setLabel('department', 'Department'); $this->form->addCssClass('department', 'form-control'); // If the user only has one department, select it for them // sizeof($depts) == 2 because of the 'Select Deparmtnet' option if (sizeof($depts) == 2) { $keys = array_keys($depts); $this->form->setMatch('department', $keys[1]); } /******************** * Faculty Member Dropdown * * The options for this drop down are provided through AJAX on page-load and * when the user changes the department dropdown above. */ $this->form->addSelect('faculty', array(-1 => 'Select Faculty Advisor')); $this->form->setExtra('faculty', 'disabled'); $this->form->setLabel('faculty', 'Faculty Advisor / Instructor of Record'); $this->form->addCssClass('faculty', 'form-control'); // Hidden field for selected faculty member $this->form->addHidden('faculty_id'); /*************** * Agency info * */ $this->form->addText('agency_name'); $this->form->setLabel('agency_name', 'Agency Name'); $this->form->addCssClass('agency_name', 'form-control'); $this->form->addCheck('copy_address_agency'); $this->form->setLabel('copy_address_agency', "Agency's address is same as Internship's"); $this->form->addText('agency_address'); $this->form->setLabel('agency_address', 'Address'); $this->form->addCssClass('agency_address', 'form-control'); $this->form->addText('agency_city'); $this->form->setLabel('agency_city', 'City'); $this->form->addCssClass('agency_city', 'form-control'); $this->form->addSelect('agency_state', State::$UNITED_STATES); $this->form->setLabel('agency_state', 'State'); $this->form->addCssClass('agency_state', 'form-control'); $this->form->addText('agency_zip'); $this->form->setLabel('agency_zip', 'Zip Code'); $this->form->addCssClass('agency_zip', 'form-control'); $this->form->addText('agency_province'); $this->form->setLabel('agency_province', 'Province/Territory'); $this->form->addCssClass('agency_province', 'form-control'); $this->form->addText('agency_country'); $this->form->setLabel('agency_country', 'Country'); $this->form->addCssClass('agency_country', 'form-control'); $this->form->addText('agency_phone'); $this->form->setLabel('agency_phone', 'Phone'); $this->form->addCssClass('agency_phone', 'form-control'); /*** * Agency supervisor info */ $this->form->addText('agency_sup_first_name'); $this->form->setLabel('agency_sup_first_name', 'First Name'); $this->form->addCssClass('agency_sup_first_name', 'form-control'); $this->form->addText('agency_sup_last_name'); $this->form->setLabel('agency_sup_last_name', 'Last Name'); $this->form->addCssClass('agency_sup_last_name', 'form-control'); $this->form->addText('agency_sup_title'); $this->form->setLabel('agency_sup_title', 'Title'); $this->form->addCssClass('agency_sup_title', 'form-control'); $this->form->addText('agency_sup_phone'); $this->form->setLabel('agency_sup_phone', 'Phone'); $this->form->addCssClass('agency_sup_phone', 'form-control'); $this->form->addText('agency_sup_email'); $this->form->setLabel('agency_sup_email', 'Email'); $this->form->addCssClass('agency_sup_email', 'form-control'); $this->form->addCheck('copy_address'); $this->form->setLabel('copy_address', "Supervisor's address is same as agency's"); $this->form->addText('agency_sup_address'); $this->form->setLabel('agency_sup_address', 'Address'); $this->form->addCssClass('agency_sup_address', 'form-control'); $this->form->addText('agency_sup_city'); $this->form->setLabel('agency_sup_city', 'City'); $this->form->addCssClass('agency_sup_city', 'form-control'); $this->form->addSelect('agency_sup_state', State::$UNITED_STATES); $this->form->setLabel('agency_sup_state', 'State'); $this->form->addCssClass('agency_sup_state', 'form-control'); $this->form->addText('agency_sup_zip'); $this->form->setLabel('agency_sup_zip', 'Zip Code'); $this->form->addCssClass('agency_sup_zip', 'form-control'); $this->form->addText('agency_sup_province'); $this->form->setLabel('agency_sup_province', 'Province'); $this->form->addCssClass('agency_sup_province', 'form-control'); $this->form->addText('agency_sup_country'); $this->form->setLabel('agency_sup_country', 'Country'); $this->form->addCssClass('agency_sup_country', 'form-control'); $this->form->addText('agency_sup_fax'); $this->form->setLabel('agency_sup_fax', 'Fax'); $this->form->addCssClass('agency_sup_fax', 'form-control'); /********************** * Internship details * */ /*********************** * Internship location * */ $loc = array('domestic' => 'Domestic', 'internat' => 'International'); $this->form->addRadioAssoc('location', $loc); //$this->form->setMatch('location', 'domestic'); // Default to domestic //$this->form->setRequired('location'); // Domestic fields $this->form->addText('loc_address'); $this->form->setLabel('loc_address', 'Address'); $this->form->addCssClass('loc_address', 'form-control'); $this->form->addText('loc_city'); $this->form->setLabel('loc_city', 'City'); $this->form->addCssClass('loc_city', 'form-control'); $this->form->addSelect('loc_state', State::getAllowedStates()); $this->form->setLabel('loc_state', 'State'); $this->form->addCssClass('loc_state', 'form-control'); $this->form->addText('loc_zip'); $this->form->setLabel('loc_zip', 'Zip'); $this->form->addCssClass('loc_zip', 'form-control'); // Itn'l location fields $this->form->addText('loc_province'); $this->form->setLabel('loc_province', 'Province/Territory'); $this->form->addCssClass('loc_province', 'form-control'); $this->form->addText('loc_country'); $this->form->setLabel('loc_country', 'Country'); $this->form->addCssClass('loc_country', 'form-control'); /************* * Term Info * */ $terms = Term::getFutureTermsAssoc(); $terms[-1] = 'Select Term'; $this->form->addSelect('term', $terms); $this->form->setLabel('term', 'Select Term'); $this->form->addCssClass('term', 'form-control'); $this->form->addText('start_date'); $this->form->setLabel('start_date', 'Start Date'); $this->form->addCssClass('start_date', 'form-control'); $this->form->addText('end_date'); $this->form->setLabel('end_date', 'End Date'); $this->form->addCssClass('end_date', 'form-control'); $this->form->addText('credits'); $this->form->setLabel('credits', 'Credit Hours'); $this->form->addCssClass('credits', 'form-control'); $this->form->addText('avg_hours_week'); $this->form->setLabel('avg_hours_week', 'Average Hours per Week'); $this->form->addCssClass('avg_hours_week', 'form-control'); $this->form->addCheck('multipart'); $this->form->setLabel('multipart', 'This internship is part of a multi-part experience.'); $this->form->addCheck('secondary_part'); $this->form->setLabel('secondary_part', 'This is a secondary part (enrollment complete through primary part).'); /*************** * Course Info * */ $subjects = Subject::getSubjects(); $this->form->addSelect('course_subj', $subjects); $this->form->setLabel('course_subj', 'Subject'); $this->form->addCssClass('course_subj', 'form-control'); $this->form->addText('course_no'); $this->form->setLabel('course_no', 'Number'); $this->form->addCssClass('course_no', 'form-control'); $this->form->addText('course_sect'); $this->form->setLabel('course_sect', 'Section'); $this->form->addCssClass('course_sect', 'form-control'); $this->form->addText('course_title'); $this->form->setLabel('course_title', 'Title'); $this->form->setMaxSize('course_title', 28); // Limit to 28 chars, per Banner $this->form->addCssClass('course_title', 'form-control'); // Corequisite if (!is_null($this->intern)) { $dept = $this->intern->getDepartment(); if ($dept->hasCorequisite()) { $this->form->addText('corequisite_course_num'); $this->form->addCssClass('corequisite_course_num', 'form-control'); $this->form->addText('corequisite_course_sect'); $this->form->addCssClass('corequisite_course_sect', 'form-control'); } } /************ * Pay Info * */ $pay = array('unpaid' => 'Unpaid', 'paid' => 'Paid'); $this->form->addRadioAssoc('payment', $pay); $this->form->setMatch('payment', 'unpaid'); // Default to unpaid $this->form->addCheck('stipend'); $this->form->setLabel('stipend', 'Stipend'); $this->form->addText('pay_rate'); $this->form->setLabel('pay_rate', 'Pay Rate'); $this->form->addCssClass('pay_rate', 'form-control'); /******************* * Internship Type * */ $this->form->addRadioAssoc('experience_type', Internship::getTypesAssoc()); $this->form->setMatch('experience_type', 'internship'); /********* * Notes * */ $this->form->addTextArea('notes'); $this->form->setLabel('notes', 'Notes'); $this->form->addCssClass('notes', 'form-control'); }
/** * Returns the WorkflowState object represeting this internship's current state/status. * Returns null if no state has been set yet. * * @return WorkflowState */ public function getWorkflowState() { $stateName = $this->getStateName(); if (is_null($stateName)) { return null; } PHPWS_Core::initModClass('intern', 'WorkflowStateFactory.php'); return WorkflowStateFactory::getState($stateName); }
public function execute() { PHPWS_Core::initModClass('intern', 'Internship.php'); PHPWS_Core::initModClass('intern', 'Agency.php'); PHPWS_Core::initModClass('intern', 'Department.php'); PHPWS_Core::initModClass('intern', 'Faculty.php'); /************** * Sanity Checks */ // Required fields check $missing = self::checkRequest(); if (!is_null($missing) && !empty($missing)) { // checkRequest returned some missing fields. $url = 'index.php?module=intern&action=edit_internship'; $url .= '&missing=' . implode('+', $missing); // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, 'Please fill in the highlighted fields.'); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check the Banner ID if (!preg_match('/^\\d{9}$/', $_REQUEST['banner'])) { $url = 'index.php?module=intern&action=edit_internship&missing=banner'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The Banner ID you entered is not valid. No changes were saved. The student's Banner ID should be nine digits only (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check student email if (isset($_REQUEST['student_email']) && preg_match("/@/", $_REQUEST['student_email'])) { $url = 'index.php?module=intern&action=edit_internship&missing=student_email'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The student's email address is invalid. No changes were saved. Enter only the username portion of the student's email address. The '@appstate.edu' portion is not necessary."); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check student zip if (isset($_REQUEST['student_zip']) && $_REQUEST['student_zip'] != "" && (strlen($_REQUEST['student_zip']) != 5 || !is_numeric($_REQUEST['student_zip']))) { $url = 'index.php?module=intern&action=edit_internship&missing=student_zip'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The student's zip code is invalid. No changes were saved. Zip codes should be 5 digits only (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } // Course start date must be before end date if (!empty($_REQUEST['start_date']) && !empty($_REQUEST['end_date'])) { $start = strtotime($_REQUEST['start_date']); $end = strtotime($_REQUEST['end_date']); if ($start > $end) { $url = 'index.php?module=intern&action=edit_internship&missing=start_date+end_date'; // Restore the values in the fields the user already entered unset($_POST['start_date']); unset($_POST['end_date']); foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_WARNING, 'The internship start date must be before the end date.'); NQ::close(); return PHPWS_Core::reroute($url); } } // Sanity check internship location zip if (isset($_REQUEST['loc_zip']) && $_REQUEST['loc_zip'] != "" && (strlen($_REQUEST['loc_zip']) != 5 || !is_numeric($_REQUEST['loc_zip']))) { $url = 'index.php?module=intern&action=edit_internship&missing=loc_zip'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The internship location's zip code is invalid. No changes were saved. Zip codes should be 5 digits only (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check agency zip if (isset($_REQUEST['agency_zip']) && $_REQUEST['agency_zip'] != "" && (strlen($_REQUEST['agency_zip']) != 5 || !is_numeric($_REQUEST['agency_zip']))) { $url = 'index.php?module=intern&action=edit_internship&missing=agency_zip'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The agency's zip code is invalid. No changes were saved. Zip codes should be 5 digits only (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check supervisor's zip if (isset($_REQUEST['agency_sup_zip']) && $_REQUEST['agency_sup_zip'] != "" && (strlen($_REQUEST['agency_sup_zip']) != 5 || !is_numeric($_REQUEST['agency_sup_zip']))) { $url = 'index.php?module=intern&action=edit_internship&missing=agency_sup_zip'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The agency supervisor's zip code is invalid. No changes were saved. Zip codes should be 5 digits only (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } // Sanity check course number if (isset($_REQUEST['course_no']) && $_REQUEST['course_no'] != '' && (strlen($_REQUEST['course_no']) > 20 || !is_numeric($_REQUEST['course_no']))) { $url = 'index.php?module=intern&action=edit_internship&missing=course_no'; // Restore the values in the fields the user already entered foreach ($_POST as $key => $val) { $url .= "&{$key}={$val}"; } NQ::simple('intern', INTERN_ERROR, "The course number provided is invalid. No changes were saved. Course numbers should be less than 20 digits (no letters, spaces, or punctuation)."); NQ::close(); return PHPWS_Core::reroute($url); } PHPWS_DB::begin(); // Create/Save agency $agency = new Agency(); if (isset($_REQUEST['agency_id'])) { // User is editing internship try { $agency = new Agency($_REQUEST['agency_id']); } catch (Exception $e) { // Rollback and re-throw the exception so that admins gets an email PHPWS_DB::rollback(); throw $e; } } $agency->name = $_REQUEST['agency_name']; $agency->address = $_REQUEST['agency_address']; $agency->city = $_REQUEST['agency_city']; $agency->zip = $_REQUEST['agency_zip']; $agency->phone = $_REQUEST['agency_phone']; if ($_REQUEST['location'] == 'internat') { /* Location is INTERNATIONAL. Country is required. Province was typed in. */ $agency->state = $_REQUEST['agency_state']; $agency->province = $_REQUEST['agency_province']; $agency->country = $_REQUEST['agency_country']; $agency->supervisor_state = $_REQUEST['agency_sup_state']; $agency->supervisor_province = $_REQUEST['agency_sup_province']; $agency->supervisor_country = $_REQUEST['agency_sup_country']; } else { /* Location is DOMESTIC. Country is U.S. State was chosen from drop down */ $agency->state = $_REQUEST['agency_state'] == -1 ? null : $_REQUEST['agency_state']; $agency->country = 'United States'; $agency->supervisor_state = $_REQUEST['agency_sup_state'] == -1 ? null : $_REQUEST['agency_sup_state']; $agency->supervisor_country = 'United States'; } $agency->supervisor_first_name = $_REQUEST['agency_sup_first_name']; $agency->supervisor_last_name = $_REQUEST['agency_sup_last_name']; $agency->supervisor_title = $_REQUEST['agency_sup_title']; $agency->supervisor_phone = $_REQUEST['agency_sup_phone']; $agency->supervisor_email = $_REQUEST['agency_sup_email']; $agency->supervisor_fax = $_REQUEST['agency_sup_fax']; $agency->supervisor_address = $_REQUEST['agency_sup_address']; $agency->supervisor_city = $_REQUEST['agency_sup_city']; $agency->supervisor_zip = $_REQUEST['agency_sup_zip']; $agency->address_same_flag = isset($_REQUEST['copy_address']) ? 't' : 'f'; try { $agencyId = $agency->save(); } catch (Exception $e) { // Rollback and re-throw the exception so that admins gets an email PHPWS_DB::rollback(); throw $e; } /********************************** * Create and/or save the Internship */ if (isset($_REQUEST['internship_id']) && $_REQUEST['internship_id'] != '') { // User is editing internship try { PHPWS_Core::initModClass('intern', 'InternshipFactory.php'); $i = InternshipFactory::getInternshipById($_REQUEST['internship_id']); } catch (Exception $e) { // Rollback and re-throw the exception so that admins gets an email PHPWS_DB::rollback(); throw $e; } } else { $i = new Internship(); } $i->term = $_REQUEST['term']; $i->agency_id = $agencyId; $i->faculty_id = $_REQUEST['faculty_id'] > 0 ? $_REQUEST['faculty_id'] : null; $i->department_id = $_REQUEST['department']; $i->start_date = !empty($_REQUEST['start_date']) ? strtotime($_REQUEST['start_date']) : 0; $i->end_date = !empty($_REQUEST['end_date']) ? strtotime($_REQUEST['end_date']) : 0; // Credit hours must be an integer (because of database column type), // so round the credit hours to nearest int if (isset($_REQUEST['credits'])) { $i->credits = round($_REQUEST['credits']); } $avg_hours_week = (int) $_REQUEST['avg_hours_week']; $i->avg_hours_week = $avg_hours_week ? $avg_hours_week : null; $i->paid = $_REQUEST['payment'] == 'paid'; $i->stipend = isset($_REQUEST['stipend']) && $i->paid; $i->unpaid = $_REQUEST['payment'] == 'unpaid'; $i->pay_rate = $_REQUEST['pay_rate']; // Internship experience type if (isset($_REQUEST['experience_type'])) { $i->setExperienceType($_REQUEST['experience_type']); } // Set fields depending on domestic/international if ($_REQUEST['location'] == 'domestic') { // Set Flags $i->domestic = 1; $i->international = 0; // Set state if ($_POST['loc_state'] != '-1') { $i->loc_state = strip_tags($_POST['loc_state']); } else { $i->loc_state = null; } // Clear province, country $i->loc_province = ''; $i->loc_country = ''; } else { if ($_REQUEST['location'] == 'internat') { // Set flags $i->domestic = 0; $i->international = 1; // Set province, country $i->loc_province = $_POST['loc_province']; $i->loc_country = strip_tags($_POST['loc_country']); // Clear state $i->loc_state = null; } } // Address, city, zip are always set (no matter domestic or international) $i->loc_address = strip_tags($_POST['loc_address']); $i->loc_city = strip_tags($_POST['loc_city']); $i->loc_zip = strip_tags($_POST['loc_zip']); if (isset($_POST['course_subj']) && $_POST['course_subj'] != '-1') { $i->course_subj = strip_tags($_POST['course_subj']); } else { $i->course_subj = null; } // Course info $i->course_no = strip_tags($_POST['course_no']); $i->course_sect = strip_tags($_POST['course_sect']); $i->course_title = strip_tags($_POST['course_title']); // Multipart course if (isset($_POST['multipart'])) { $i->multi_part = 1; } else { $i->multi_part = 0; } if (isset($_POST['multipart']) && isset($_POST['secondary_part'])) { $i->secondary_part = 1; } else { $i->secondary_part = 0; } // Corequisite Course Info if (isset($_POST['corequisite_course_num'])) { $i->corequisite_number = $_POST['corequisite_course_num']; } if (isset($_POST['corequisite_course_sect'])) { $i->corequisite_section = $_POST['corequisite_course_sect']; } // Student Information $i->first_name = $_REQUEST['student_first_name']; $i->middle_name = $_REQUEST['student_middle_name']; $i->last_name = $_REQUEST['student_last_name']; $i->setFirstNameMetaphone($_REQUEST['student_first_name']); $i->setLastNameMetaphone($_REQUEST['student_last_name']); $i->banner = $_REQUEST['banner']; $i->phone = $_REQUEST['student_phone']; $i->email = $_REQUEST['student_email']; $i->level = $_REQUEST['student_level']; // Check the level and record the major/program for this level. // Be sure to set/clear the other leve's major/program to null // in case the user is switching levels. if ($i->getLevel() == 'ugrad') { $i->ugrad_major = $_REQUEST['ugrad_major']; $i->grad_prog = null; } else { if ($i->getLevel() == 'grad') { $i->grad_prog = $_REQUEST['grad_prog']; $i->ugrad_major = null; } } $i->gpa = $_REQUEST['student_gpa']; $i->campus = $_REQUEST['campus']; $i->student_address = $_REQUEST['student_address']; $i->student_city = $_REQUEST['student_city']; if ($_REQUEST['student_state'] != '-1') { $i->student_state = $_REQUEST['student_state']; } else { $i->student_state = ""; } $i->student_zip = $_REQUEST['student_zip']; /* $i->emergency_contact_name = $_REQUEST['emergency_contact_name']; $i->emergency_contact_relation = $_REQUEST['emergency_contact_relation']; $i->emergency_contact_phone = $_REQUEST['emergency_contact_phone']; */ /************ * OIED Certification */ // If OIED certification has changed, then double check permissions $cert = $i->oied_certified == 1 ? true : false; $certSubmitted = $_POST['oied_certified_hidden'] == 'true' ? true : false; $certChanged = $cert != $certSubmitted; if ($certChanged && !Current_User::allow('intern', 'oied_certify')) { $url = "index.php?module=intern&action=edit_internship&internship_id={$i->getId()}"; NQ::simple('intern', INTERN_ERROR, "You do not have permission to change the OIED certification checkbox. No changes were saved."); NQ::close(); return PHPWS_Core::reroute($url); } // Check if this has changed from non-certified->certified so we can log it later if ($i->oied_certified == 0 && $_POST['oied_certified_hidden'] == 'true') { // note the change for later $oiedCertified = true; } else { $oiedCertified = false; } if ($_POST['oied_certified_hidden'] == 'true') { $i->oied_certified = 1; } else { if ($_POST['oied_certified_hidden'] == 'false') { $i->oied_certified = 0; } else { $i->oied_certified = 0; } } // If we don't have a state and this is a new internship, // the set an initial state if ($i->id == 0 && is_null($i->state)) { PHPWS_Core::initModClass('intern', 'WorkflowStateFactory.php'); $state = WorkflowStateFactory::getState('CreationState'); $i->setState($state); // Set this initial value } try { $i->save(); } catch (Exception $e) { // Rollback and re-throw the exception so that admins gets an email PHPWS_DB::rollback(); throw $e; } PHPWS_DB::commit(); /*************************** * State/Workflow Handling * ***************************/ PHPWS_Core::initModClass('intern', 'WorkflowController.php'); PHPWS_Core::initModClass('intern', 'WorkflowTransitionFactory.php'); $t = WorkflowTransitionFactory::getTransitionByName($_POST['workflow_action']); $workflow = new WorkflowController($i, $t); try { $workflow->doTransition(isset($_POST['notes']) ? $_POST['notes'] : null); } catch (MissingDataException $e) { NQ::simple('intern', INTERN_ERROR, $e->getMessage()); NQ::close(); return PHPWS_Core::reroute('index.php?module=intern&action=edit_internship&internship_id=' . $i->id); } // Create a ChangeHisotry for the OIED certification. if ($oiedCertified) { $currState = WorkflowStateFactory::getState($i->getStateName()); $ch = new ChangeHistory($i, Current_User::getUserObj(), time(), $currState, $currState, 'Certified by OIED'); $ch->save(); } $workflow->doNotification(isset($_POST['notes']) ? $_POST['notes'] : null); if (isset($_REQUEST['internship_id'])) { // Show message if user edited internship NQ::simple('intern', INTERN_SUCCESS, 'Saved internship for ' . $i->getFullName()); NQ::close(); return PHPWS_Core::reroute('index.php?module=intern&action=edit_internship&internship_id=' . $i->id); } else { NQ::simple('intern', INTERN_SUCCESS, 'Added internship for ' . $i->getFullName()); NQ::close(); return PHPWS_Core::reroute('index.php?module=intern&action=edit_internship&internship_id=' . $i->id); } }
public function getToStateFriendlyName() { $toState = WorkflowStateFactory::getState($this->to_state); return $toState->getFriendlyName(); }