'---'
ORDER BY SORT_KEY";
}
elseif ( $request === 'values[people]' )
{
$options_SQL = "SELECT DISTINCT p." . $col_name . ",upper(p." . $col_name . ") AS SORT_KEY
FROM people p,students_join_people sjp,students s,student_enrollment sse
WHERE p.PERSON_ID=sjp.PERSON_ID
AND s.STUDENT_ID=sjp.STUDENT_ID
AND sse.STUDENT_ID=s.STUDENT_ID
AND (sse.SYEAR='" . UserSyear() . "' OR sse.SYEAR='" . ( UserSyear() - 1 ) . "')
AND p." . $col_name . " IS NOT NULL
AND p." . $col_name . "<>'---'
ORDER BY SORT_KEY";
}
elseif ( $request === 'students' )
{
$options_SQL = "SELECT DISTINCT s." . $col_name . ",upper(s." . $col_name . ") AS SORT_KEY
FROM students s,student_enrollment sse
WHERE sse.STUDENT_ID=s.STUDENT_ID
AND (sse.SYEAR='" . UserSyear() . "' OR sse.SYEAR='" . ( UserSyear() - 1 ) . "')
AND s." . $col_name . " IS NOT NULL
AND s." . $col_name . "<>'---'
ORDER BY SORT_KEY";
}
elseif ( $request === 'staff' )
{
$options_SQL = "SELECT DISTINCT s." . $col_name . ",upper(s." . $col_name . ") AS SORT_KEY
FROM staff s
WHERE (s.SYEAR='" . UserSyear() . "' OR s.SYEAR='" . ( UserSyear() - 1 ) . "')
AND s." . $col_name . " IS NOT NULL
AND s." . $col_name . "<>'---'
ORDER BY SORT_KEY";
}
if ( empty( $options_RET )
&& ! empty( $options_SQL ) )
{
$options_RET = DBGet( $options_SQL );
}
foreach ( (array) $options_RET as $option )
{
$option_value = $option[ 'CUSTOM_' . $field['ID'] ];
if ( $option_value != ''
&& ! isset( $options[ $option_value ] ) )
{
$options[ $option_value ] = [
$option_value,
'' . $option_value . ''
];
}
}
}
// Make sure the current value is in the list.
if ( $value[ $column ] != ''
&& ! isset( $options[ $value[ $column ] ] ) )
{
$options[ $value[ $column ] ] = [
$value[ $column ],
'' . $value[ $column ] . ''
];
}
$input_name = $request . '[' . $column . ']';
if ( $value[ $column ] === '---'
|| count( $options ) < 1 )
{
// FJ new option.
return TextInput(
$value[ $column ] === '---' ?
[ '---', '-' . _( 'Edit' ) . '-' ] :
$value[ $column ],
$input_name,
$name,
( $field['REQUIRED'] === 'Y' ? 'required' : '' ),
$div
);
}
// When -Edit- option selected, change the auto pull-down to text field.
$return = '';
if ( AllowEdit()
&& ! isset( $_REQUEST['_ROSARIO_PDF'] )
&& ! $js_included )
{
$js_included = true;
ob_start();?>
36 chars.
$file_name_display = mb_strlen( $file_name ) <= 36 ?
$file_name :
mb_substr( $file_name, 0, 30 ) . '..' . mb_strrchr( $file_name, '.' );
$file = button(
'download',
$file_name_display,
'"' . URLEscape( $file_path ) . '" target="_blank" title="' . AttrEscape( $file_name . ' (' . $file_size . ')' ) . '"',
'bigger'
);
if ( AllowEdit() && $remove_url )
{
$file = button(
'remove',
'',
'"' . URLEscape( $remove_url . $file_name ) . '" title="' . AttrEscape( _( 'Delete' ) ) . '"'
) . ' ' . $file;
}
$files[] = $file;
}
$files_html = '';
if ( $files )
{
$files_html = '
| ' .
implode( ' |
| ', $files ) . ' |
';
}
$required = $field['REQUIRED'] == 'Y' && AllowEdit() && ! $files;
if ( AllowEdit() )
{
$files_html .= FileInput(
$request . $column,
'',
( $required ? ' required': '' )
);
}
elseif ( ! $files )
{
$files_html = '-';
}
return $files_html . FormatInputTitle(
$name,
( AllowEdit() ? $request . $column : '' ),
$required,
( AllowEdit() || ! $files ? '
' : '' )
);
}
/**
* Make Multiple Input
*
* @since 6.1 Return HTML instead of echo.
*
* @global array $value
* @global array $field
*
* @param string $column Field column.
* @param string $name Field name.
* @param string $request students|staff|values[people]|values[address].
*
* @return string Multiple Input
*/
function _makeMultipleInput( $column, $name, $request )
{
global $value,
$field;
if ( ! AllowEdit()
|| isset( $_REQUEST['_ROSARIO_PDF'] ) )
{
return ( ! empty( $value[ $column ] ) ?
str_replace( '||', ', ', mb_substr( $value[ $column ], 2, -2 ) ) :
'-' ) .
FormatInputTitle( $name );
}
$select_options = $options = [];
if ( $field['SELECT_OPTIONS'] )
{
$select_options = explode( "\r", str_replace( [ "\r\n", "\n" ], "\r", $field['SELECT_OPTIONS'] ) );
}
foreach ( $select_options as $option )
{
$options[ $option ] = $option;
}
$table = '';
$table .= FormatInputTitle( $name, '', false, '' );
if ( empty( $value[ $column ] ) )
{
return $table;
}
return InputDivOnclick(
GetInputID( $request . $column ),
$table,
str_replace( '||', ', ', mb_substr( $value[ $column ], 2, -2 ) ),
FormatInputTitle( $name )
);
}
/**
* Make Student Age
* FJ display age next to birthdate
*
* @global array $value
*
* @param string $column Field column.
* @param string $name Field name.
*
* @return string Student Age
*/
function _makeStudentAge( $column, $name )
{
global $value;
if ( $_REQUEST['student_id'] !== 'new'
&& date_create( (string) $value[ $column ] ) )
{
$datetime1 = date_create( (string) $value[ $column ] );
$datetime2 = date_create( 'now' );
$interval = date_diff( $datetime1, $datetime2 );
$age_text = _( '%Y Years %m Months %d Days' );
$age_text = $interval->format( $age_text );
return NoInput( $age_text, $name );
}
return '';
}
// MEDICAL.
/**
* Make Medical Immunization or Physical type Select Input
*
* @since 11.3 No N/A value for existing entries
*
* @global array $THIS_RET
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Medical Immunization or Physical type Select Input
*/
function _makeType( $value, $column )
{
global $THIS_RET;
if ( empty( $THIS_RET['ID'] ) )
{
$THIS_RET['ID'] = 'new';
}
return SelectInput(
$value,
'values[student_medical][' . $THIS_RET['ID'] . '][TYPE]',
'',
[ 'Immunization' => _( 'Immunization' ), 'Physical' => _( 'Physical' ) ],
( $THIS_RET['ID'] === 'new' ? 'N/A' : false )
);
}
/**
* Make Medical Date Input
*
* @since 11.3 No N/A value for existing entries (Nurse Visit only)
*
* @global array $THIS_RET
* @global string $table
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Medical Date Input
*/
function _makeDate( $value, $column = 'MEDICAL_DATE' )
{
global $THIS_RET,
$table;
if ( empty( $THIS_RET['ID'] ) )
{
$THIS_RET['ID'] = 'new';
}
return DateInput(
$value,
'values[' . $table . '][' . $THIS_RET['ID'] . '][' . $column . ']',
'',
true,
// No N/A value for existing entries (Nurse Visit only).
( $THIS_RET['ID'] !== 'new' && $column !== 'MEDICAL_DATE' ? false : 'N/A' )
);
}
/**
* Make Medical Comments Input
*
* @since 3.6 Add custom input size per column.
* @since 11.3 Required TITLE value for existing entries
*
* @global array $THIS_RET
* @global string $table
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Medical Comments Input
*/
function _makeComments( $value, $column )
{
global $THIS_RET,
$table;
if ( empty( $THIS_RET['ID'] ) )
{
$THIS_RET['ID'] = 'new';
}
$input_size = 12;
if ( $column === 'TIME_IN'
|| $column === 'TIME_OUT' )
{
$input_size = 5;
}
elseif ( $column === 'COMMENTS'
|| $column === 'TITLE' )
{
$input_size = 20;
}
$required = '';
if ( $column === 'TITLE'
&& $THIS_RET['ID'] !== 'new' )
{
$required = ' required';
}
return TextInput(
$value,
'values[' . $table . '][' . $THIS_RET['ID'] . '][' . $column . ']',
'',
'size="' . AttrEscape( $input_size ) . '"' . $required
);
}
// ENROLLMENT.
/**
* Make Enrollment Start Date & Code Inputs
*
* @since 5.4 Enrollment Start: No N/A option if already has Drop date.
*
* @global array $THIS_RET
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Enrollment Start Date & Code Inputs
*/
function _makeStartInput( $value, $column )
{
global $THIS_RET,
$_ROSARIO;
static $add_codes = [],
$RET_i = 0;
$RET_i++;
$add = '';
$na = 'N/A';
if ( ! empty( $THIS_RET['ID'] ) )
{
$id = $THIS_RET['ID'];
if ( ( $RET_i === 1 && ! empty( $value ) ) // @since 10.9 Enrollment Start: No N/A option for first entry.
|| ! empty( $THIS_RET['END_DATE'] ) )
{
// @since 5.4 Enrollment Start: No N/A option if already has Drop date.
$na = false;
}
}
elseif ( $_REQUEST['student_id'] === 'new' )
{
$id = 'new';
// @since 10.0 Enrollment Start: No N/A option for new student.
$na = false;
$default = DBGetOne( "SELECT min(SCHOOL_DATE) AS START_DATE
FROM attendance_calendar
WHERE SYEAR='" . UserSyear() . "'
AND SCHOOL_ID='" . UserSchool() . "'" );
if ( ! $default
|| DBDate() > $default )
{
$default = DBDate();
}
$value = $default;
}
else
{
$add = button( 'add' ) . ' ';
$id = 'new';
}
if ( ! $add_codes )
{
$options_RET = DBGet( "SELECT ID,TITLE AS TITLE
FROM student_enrollment_codes
WHERE SYEAR='" . UserSyear() . "'
AND TYPE='Add'
ORDER BY SORT_ORDER IS NULL,SORT_ORDER" );
foreach ( (array) $options_RET as $option )
{
$add_codes[$option['ID']] = $option['TITLE'];
}
}
$div = true;
if ( $_REQUEST['student_id'] === 'new' )
{
$div = false;
}
if ( AllowEdit()
&& ( User( 'PROFILE' ) === 'parent'
|| User( 'PROFILE' ) === 'student' ) )
{
// Do not allow Parents/Students to edit Enrollment Records.
$_ROSARIO['allow_edit'] = false;
$disallow_edit_parent_student = true;
}
$return = '' . $add .
DateInput(
$value,
'values[student_enrollment][' . $id . '][' . $column . ']',
'',
$div,
$na
) . ' - ' .
SelectInput(
issetVal( $THIS_RET['ENROLLMENT_CODE'] ),
'values[student_enrollment][' . $id . '][ENROLLMENT_CODE]',
'',
$add_codes,
$na,
'style="max-width:150px;"'
) .
'
';
if ( ! empty( $disallow_edit_parent_student ) )
{
// Do not allow Parents/Students to edit Enrollment Records.
$_ROSARIO['allow_edit'] = true;
}
return $return;
}
/**
* Make Enrollment End Date & Code Inputs
*
* @global array $THIS_RET
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Enrollment End Date & Code Inputs
*/
function _makeEndInput( $value, $column )
{
global $THIS_RET,
$_ROSARIO;
static $drop_codes;
$id = ! empty( $THIS_RET['ID'] ) ? $THIS_RET['ID'] : 'new';
if ( empty( $THIS_RET['START_DATE'] )
&& empty( $value ) )
{
// @since 10.9 Hide End Date input for Inactive Students (no Attendance Start Date)
return '';
}
if ( ! $drop_codes )
{
$options_RET = DBGet( "SELECT ID,TITLE AS TITLE
FROM student_enrollment_codes
WHERE SYEAR='" . UserSyear() . "'
AND TYPE='Drop'
ORDER BY SORT_ORDER IS NULL,SORT_ORDER" );
foreach ( (array) $options_RET as $option )
{
$drop_codes[$option['ID']] = $option['TITLE'];
}
}
if ( AllowEdit()
&& ( User( 'PROFILE' ) === 'parent'
|| User( 'PROFILE' ) === 'student' ) )
{
// Do not allow Parents/Students to edit Enrollment Records.
$_ROSARIO['allow_edit'] = false;
$disallow_edit_parent_student = true;
}
$return = '' .
DateInput(
$value,
'values[student_enrollment][' . $id . '][' . $column . ']'
) . ' - ' .
SelectInput(
$THIS_RET['DROP_CODE'],
'values[student_enrollment][' . $id . '][DROP_CODE]',
'',
$drop_codes,
'N/A',
'style="max-width:150px;"'
) .
'
';
if ( ! empty( $disallow_edit_parent_student ) )
{
// Do not allow Parents/Students to edit Enrollment Records.
$_ROSARIO['allow_edit'] = true;
}
return $return;
}
/**
* Make Enrollment School Select Input
*
* @global array $THIS_RET
*
* @param string $value Field value.
* @param string $column Field column.
*
* @return string Enrollment School Select Input
*/
function _makeSchoolInput( $value, $column )
{
global $THIS_RET;
static $schools;
$id = ! empty( $THIS_RET['ID'] ) ? $THIS_RET['ID'] : 'new';
if ( ! isset( $schools )
|| ! is_array( $schools ) )
{
$schools = DBGet( "SELECT ID,TITLE
FROM schools
WHERE SYEAR='" . UserSyear() . "'", [], [ 'ID' ] );
}
foreach ( (array) $schools as $sid => $school )
{
$options[ $sid ] = $school[1]['TITLE'];
}
// Mab - allow school to be edited if illegal value.
if ( $_REQUEST['student_id'] !== 'new' )
{
if ( $id !== 'new' )
{
if ( is_array( $schools[ $value ] ) )
{
return $schools[ $value ][1]['TITLE'];
}
return SelectInput(
$value,
'values[student_enrollment][' . $id . '][SCHOOL_ID]',
'',
$options
);
}
return SelectInput(
UserSchool(),
'values[student_enrollment][' . $id . '][SCHOOL_ID]',
'',
$options,
false,
'',
false
);
}
// FJ save new Student's Enrollment in Enrollment.inc.php.
return '' .
$schools[ UserSchool() ][1]['TITLE'];
}
/**
* Is New Student / User / People / Address?
* Local function
*
* @param string $request students|staff|values[people]|values[address].
*
* @return boolean true if new, else false
*/
function _isNew( $request )
{
switch ( $request )
{
case 'students':
$request_key = 'student_id';
break;
case 'staff':
$request_key = 'staff_id';
break;
case 'values[people]':
$request_key = 'person_id';
break;
case 'values[address]':
$request_key = 'address_id';
break;
default:
return false;
}
return isset( $_REQUEST[ $request_key ] ) && $_REQUEST[ $request_key ] === 'new';
}