$v) { $keyexp = explode('_',$key); if ($keyexp[0] == "marks") { $sql = "select question from $TBL_QUESTIONS where id = '$keyexp[1]'"; $result =api_sql_query($sql, __FILE__, __LINE__); $ques_name = Database::result($result,0,"question"); $query = "UPDATE $TBL_TRACK_ATTEMPT SET marks = '".Database::escape_string($v)."' WHERE question_id = '".Database::escape_string($keyexp[1])."' AND exe_id='".Database::escape_string($id)."'"; api_sql_query($query, __FILE__, __LINE__); $qry = 'SELECT sum(marks) as tot FROM '.$TBL_TRACK_ATTEMPT.' where exe_id = '.intval($id).' GROUP BY question_id'; $res = api_sql_query($qry,__FILE__,__LINE__); $tot = Database::result($res,0,'tot'); $totquery = "update $TBL_TRACK_EXERCICES set exe_result = '".Database::escape_string($tot)."' where exe_Id='".Database::escape_string($id)."'"; api_sql_query($totquery, __FILE__, __LINE__); $recording_changes = 'INSERT INTO '.$TBL_RECORDING.' ' . '(exe_id, question_id, marks, insert_date, author) VALUES ('."'$id','".$keyexp[1]."','$v','".date('Y-m-d H:i:s')."','".api_get_user_id()."'".')'; api_sql_query($recording_changes, __FILE__, __LINE__); } else { $query = "UPDATE $TBL_TRACK_ATTEMPT SET teacher_comment = '".Database::escape_string($v)."' WHERE question_id = '".Database::escape_string($keyexp[1])."' AND exe_id = '".Database::escape_string($id)."'"; api_sql_query($query, __FILE__, __LINE__); $recording_changes = 'INSERT INTO '.$TBL_RECORDING.' ' . '(exe_id, question_id, teacher_comment, insert_date, author) VALUES ('."'$id','".$keyexp[1]."','$v','".date('Y-m-d H:i:s')."','".api_get_user_id()."'".')'; api_sql_query($recording_changes, __FILE__, __LINE__); } } $qry = 'SELECT DISTINCT question_id, marks FROM '.$TBL_TRACK_ATTEMPT.' where exe_id = '.intval($id).' GROUP BY question_id'; $res = api_sql_query($qry,__FILE__,__LINE__); $tot = 0; while($row = Database::fetch_array($res,'ASSOC')) { $tot += $row ['marks']; } $totquery = "UPDATE $TBL_TRACK_EXERCICES SET exe_result = '".Database::escape_string($tot)."' WHERE exe_Id='".Database::escape_string($id)."'"; api_sql_query($totquery, __FILE__, __LINE__); $subject = get_lang('ExamSheetVCC'); $htmlmessage = ''. '' . '' . '' . '' . '
' . '

'.get_lang('DearStudentEmailIntroduction').'

' . '

'.get_lang('AttemptVCC').'

' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . '
  '.get_lang('Question').'#ques_name#
  '.get_lang('Exercice').'#test#
' . '

'.get_lang('ClickLinkToViewComment').' #url#
' . '
' . ' '.get_lang('Regards').'

' . '
' . ' ' . ' '; $message = '

'.sprintf(get_lang('AttemptVCCLong'),$test).' #url#


'; $mess= str_replace("#test#",$test,$message); //$message= str_replace("#ques_name#",$ques_name,$mess); $message = str_replace("#url#",$url,$mess); $mess = stripslashes($message); $headers = " MIME-Version: 1.0 \r\n"; $headers .= "User-Agent: Dokeos/1.6"; $headers .= "Content-Transfer-Encoding: 7bit"; $headers .= 'From: '.$from_name.' <'.$from.'>' . "\r\n"; $headers="From:$from_name\r\nReply-to: $to\r\nContent-type: text/html; charset=".($charset?$charset:'ISO-8859-15'); //mail($emailid, $subject, $mess,$headers); api_mail_html($emailid, $emailid, $subject, $mess, $from_name, $from); if (in_array($origin, array('tracking_course','user_course'))){ //Redirect to the reporting header('location: ../mySpace/myStudents.php?origin='.$origin.'&student='.$_GET['student'].'&details=true&course='.$_GET['course']); } } if ($_GET['gradebook'] && $_GET['exerciseId']) { $interbreadcrumb[]= array ( 'url' => '../gradebook/index.php', 'name' => get_lang('Gradebook') ); } if ($show!='result') { $nameTools=get_lang('Exercices'); } else { if($is_allowedToEdit || $is_tutor) { $nameTools=get_lang('StudentScore'); $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices')); } else { $nameTools=get_lang('YourScore'); $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices')); } } // need functions of statsutils lib to display previous exercices scores include_once(api_get_path(LIBRARY_PATH).'statsUtils.lib.inc.php'); if ($is_allowedToEdit && !empty($choice) && $choice == 'exportqti2') { require_once('export/qti2/qti2_export.php'); $export = export_exercise($exerciseId,true); require_once(api_get_path(LIBRARY_PATH).'pclzip/pclzip.lib.php'); $garbage_path = api_get_path(GARBAGE_PATH); $temp_dir_short = uniqid(); $temp_zip_dir = $garbage_path."/".$temp_dir_short; if(!is_dir($temp_zip_dir)) mkdir($temp_zip_dir); $temp_zip_file = $temp_zip_dir."/".md5(time()).".zip"; $temp_xml_file = $temp_zip_dir."/qti2export_".$exerciseId.'.xml'; file_put_contents($temp_xml_file,$export); $zip_folder=new PclZip($temp_zip_file); $zip_folder->add($temp_xml_file, PCLZIP_OPT_REMOVE_ALL_PATH); $name = 'qti2_export_'.$exerciseId.'.zip'; //DocumentManager::string_send_for_download($export,true,'qti2export_'.$exerciseId.'.xml'); DocumentManager::file_send_for_download($temp_zip_file,true,$name); unlink($temp_zip_file); unlink($temp_xml_file); rmdir($temp_zip_dir); exit(); //otherwise following clicks may become buggy } if (!empty($_POST['export_user_fields'])) { switch ($_POST['export_user_fields']) { case 'export_user_fields': $_SESSION['export_user_fields'] = true; break; case 'do_not_export_user_fields': default: $_SESSION['export_user_fields'] = false; break; } } if (!empty($_POST['export_report']) && $_POST['export_report'] == 'export_report') { if(api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { $user_id = null; if(empty($_SESSION['export_user_fields'])) $_SESSION['export_user_fields'] = false; if(!$is_allowedToEdit and !$is_tutor) { $user_id = api_get_user_id(); } require_once('exercise_result.class.php'); switch($_POST['export_format']) { case 'xls': $export = new ExerciseResult(); $export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields']); exit; break; case 'csv': default: $export = new ExerciseResult(); $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields']); exit; break; } } else { api_not_allowed(true); } } if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_header($nameTools,"Exercise"); if(isset($_GET['message'])) { if (in_array($_GET['message'], array('ExerciseEdited'))) { Display::display_confirmation_message(get_lang($_GET['message'])); } } } else { echo ''; } // used for stats include_once(api_get_path(LIBRARY_PATH).'events.lib.inc.php'); event_access_tool(TOOL_QUIZ); Display::display_introduction_section(TOOL_QUIZ); // selects $limitExPage exercises at the same time $from=$page*$limitExPage; $sql="SELECT count(id) FROM $TBL_EXERCICES"; $res = api_sql_query($sql,__FILE__,__LINE__); list($nbrexerc) = Database::fetch_array($res); HotPotGCt($documentPath,1,$_user['user_id']); // only for administrator if ($is_allowedToEdit) { if (!empty($choice)) { // construction of Exercise $objExerciseTmp=new Exercise(); if ($objExerciseTmp->read($exerciseId)) { switch ($choice) { case 'delete': // deletes an exercise $objExerciseTmp->delete(); Display::display_confirmation_message(get_lang('ExerciseDeleted')); break; case 'enable': // enables an exercise $objExerciseTmp->enable(); $objExerciseTmp->save(); // "WHAT'S NEW" notification: update table item_property (previously last_tooledit) api_item_property_update($_course, TOOL_QUIZ, $exerciseId, "QuizAdded", $_user['user_id']); Display::display_confirmation_message(get_lang('VisibilityChanged')); break; case 'disable': // disables an exercise $objExerciseTmp->disable(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('VisibilityChanged')); break; case 'disable_results' : //disable the results for the learners $objExerciseTmp->disable_results(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('ResultsDisabled')); break; case 'enable_results' : //disable the results for the learners $objExerciseTmp->enable_results(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('ResultsEnabled')); break; } } // destruction of Exercise unset($objExerciseTmp); } if (!empty($hpchoice)) { switch($hpchoice) { case 'delete': // deletes an exercise $imgparams = array(); $imgcount = 0; GetImgParams($file,$documentPath,$imgparams,$imgcount); $fld = GetFolderName($file); for($i=0;$i < $imgcount;$i++) { my_delete($documentPath.$uploadPath."/".$fld."/".$imgparams[$i]); update_db_info("delete", $uploadPath."/".$fld."/".$imgparams[$i]); } if ( my_delete($documentPath.$file)) { update_db_info("delete", $file); } my_delete($documentPath.$uploadPath."/".$fld."/"); break; case 'enable': // enables an exercise $newVisibilityStatus = "1"; //"visible" $query = "SELECT id FROM $TBL_DOCUMENT WHERE path='".Database::escape_string($file)."'"; $res = api_sql_query($query,__FILE__,__LINE__); $row = Database::fetch_array($res, 'ASSOC'); api_item_property_update($_course, TOOL_DOCUMENT, $row['id'], 'visible', $_user['user_id']); //$dialogBox = get_lang('ViMod'); break; case 'disable': // disables an exercise $newVisibilityStatus = "0"; //"invisible" $query = "SELECT id FROM $TBL_DOCUMENT WHERE path='".Database::escape_string($file)."'"; $res = api_sql_query($query,__FILE__,__LINE__); $row = Database::fetch_array($res, 'ASSOC'); api_item_property_update($_course, TOOL_DOCUMENT, $row['id'], 'invisible', $_user['user_id']); #$query = "UPDATE $TBL_DOCUMENT SET visibility='$newVisibilityStatus' WHERE path=\"".$file."\""; //added by Toon #api_sql_query($query,__FILE__,__LINE__); //$dialogBox = get_lang('ViMod'); break; default: break; } } if ($show == 'test') { $sql="SELECT id,title,type,active,description, results_disabled FROM $TBL_EXERCICES WHERE active<>'-1' ORDER BY title LIMIT ".(int)$from.",".(int)($limitExPage+1); $result=api_sql_query($sql,__FILE__,__LINE__); } } elseif($show == 'test') {// only for students $sql="SELECT id,title,type,description, results_disabled FROM $TBL_EXERCICES WHERE active='1' ORDER BY title LIMIT ".(int)$from.",".(int)($limitExPage+1); $result=api_sql_query($sql,__FILE__,__LINE__); } if ($show == 'test') { $nbrExercises=Database::num_rows($result); echo ''. ''; if (($is_allowedToEdit) and ($origin != 'learnpath')) { echo ''. '', '', '
'. 'new test '.get_lang('NewEx').''. ' | HotPotatoes '.get_lang('ImportHotPotatoesQuiz').''. ''; } else { echo ''; } //get HotPotatoes files (active and inactive) $res = api_sql_query ("SELECT * FROM $TBL_DOCUMENT WHERE path LIKE '".Database::escape_string($uploadPath)."/%/%'",__FILE__,__LINE__); $nbrTests = Database::num_rows($res); $res = api_sql_query ("SELECT * FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' AND ip.visibility='1'", __FILE__,__LINE__); $nbrActiveTests = Database::num_rows($res); if($is_allowedToEdit) {//if user is allowed to edit, also show hidden HP tests $nbrHpTests = $nbrTests; } else { $nbrHpTests = $nbrActiveTests; } $nbrNextTests = $nbrexerc-$nbrHpTests-(($page*$limitExPage)); //show pages navigation link for previous page if($page) { echo "<< ",get_lang("PreviousPage")." | "; } elseif($nbrExercises+$nbrNextTests > $limitExPage) { echo "<< ",get_lang("PreviousPage")." | "; } //show pages navigation link for previous page if($nbrExercises+$nbrNextTests > $limitExPage) { echo ">> ",get_lang("NextPage").""; } elseif($page) { echo get_lang("NextPage") . " >>"; } echo '
'; ?> '."\n"; ?> '; echo ''; ?> "; echo "\n"; } else {// student only ?> $nbrexerc) { if ($from>$nbrexerc) { $from = $from - $nbrexerc; $to = $limitExPage; } else { $to = $limitExPage-($nbrexerc-$from); $from = 0; } } else { $to = $limitExPage; } if($is_allowedToEdit) { $sql = "SELECT d.path as path, d.comment as comment, ip.visibility as visibility FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND (d.path LIKE '%htm%') AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' LIMIT ".(int)$from.",".(int)$to; // only .htm or .html files listed } else { $sql = "SELECT d.path as path, d.comment as comment, ip.visibility as visibility FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND (d.path LIKE '%htm%') AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' AND ip.visibility='1' LIMIT ".(int)$from.",".(int)$to; } $result = api_sql_query ($sql,__FILE__,__LINE__); while ($row = Database::fetch_array($result, 'ASSOC')) { $attribute['path' ][] = $row['path' ]; $attribute['visibility'][] = $row['visibility']; $attribute['comment' ][] = $row['comment' ]; } $nbrActiveTests = 0; if (is_array($attribute['path'])) { while (list($key,$path) = each($attribute['path'])) { list($a,$vis)=each($attribute['visibility']); if (strcmp($vis,"1")==0) { $active=1; } else { $active=0; } echo "\n"; $title = GetQuizName($path,$documentPath); if ($title =='') { $title = GetFileName($path); } // prof only if($is_allowedToEdit) { /************/ ?>
>
> 1?'Questions':'Question'))).' <?php echo htmlentities(get_lang('Modify'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Build'),ENT_QUOTES,$charset); ?> ')) return false;"> <?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?> '.htmlentities(get_lang('EnableResults'),ENT_QUOTES,$charset).''; } else { echo ''.htmlentities(get_lang('DisableResults'),ENT_QUOTES,$charset).''; } echo "
 
1?'Questions':'Question'))); ?> 0) { $row = Database::fetch_array($qryres); $percentage = 0; if($row['exe_weighting'] != 0) { $percentage = ($row['exe_result']/$row['exe_weighting'])*100; } echo get_lang('Attempted').' ('.get_lang('Score').':'; printf("%1.2f\n",$percentage); echo " %)"; } else { echo get_lang('NotAttempted'); } ?>
HotPotatoes >
<?php echo htmlentities(get_lang('Modify'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Build'),ENT_QUOTES,$charset); ?> ')) return false;"><?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?> '; /****************/ ?>
  ">
<< '.get_lang('Back').''; } }// end if($show == 'test') /*****************************************/ /* Exercise Results (uses tracking tool) */ /*****************************************/ // if tracking is enabled if ($_configuration['tracking_enabled']) { if ($show == 'result') { if (!function_exists('make_select')) { function make_select($name,$values,$checked=''){ $output .= ''; return $output; } } if (!function_exists('make_select_users')) { function make_select_users($name,$values,$checked=''){ $output .= ''; return $output; } } if (api_is_allowed_to_edit()) { if (!$_REQUEST['filter']) { $filter_by_not_revised = true; $filter=1; } $filter = (int)$_REQUEST['filter']; switch($filter){ case 1: $filter_by_not_revised = true; break; case 2: $filter_by_revised = true; break; default: null; } $form_filter = '
'; $form_filter .= make_select('filter',array(1=>get_lang('FilterByNotRevised'),2=>get_lang('FilterByRevised')),$filter); $form_filter .= '
'; echo $form_filter; } // the form if(api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; if($_SESSION['export_user_fields']==false) { $alt = get_lang('ExportWithUserFields'); echo ''; } else { $alt = get_lang('ExportWithoutUserFields'); echo ''; } echo '
'; echo ''.get_lang('ExportAsCSV').' '.get_lang('ExportAsCSV').''; echo ''.get_lang('ExportAsXLS').' '.get_lang('ExportAsXLS').''; echo ''.$alt.' '.$alt.''; echo '

'; } ?> 1 $user_id_and $session_id_and AND ce.active <>-1 ORDER BY users, te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC"; $hpsql="SELECT CONCAT(tu.lastname,' ',tu.firstname), tth.exe_name, tth.exe_result , tth.exe_weighting, UNIX_TIMESTAMP(tth.exe_date) FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '".Database::escape_string($_cid)." $user_id_and ' ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; } else { // get only this user's results $user_id_and = ' AND te.exe_user_id = ' . Database::escape_string ( api_get_user_id() ).' '; $sql="SELECT CONCAT(lastname,' ',firstname) as users,ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id,email,UNIX_TIMESTAMP(te.start_date),steps_counter,user_id FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te, $TBL_USER AS user WHERE te.exe_exo_id = ce.id AND te.status != 'incomplete' AND user_id=te.exe_user_id AND te.exe_cours_id='".Database::escape_string($_cid)."' AND user.status<>1 $user_id_and $session_id_and AND ce.active <>-1 ORDER BY users, te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC"; $hpsql="SELECT '',exe_name, exe_result , exe_weighting, UNIX_TIMESTAMP(exe_date) FROM $TBL_TRACK_HOTPOTATOES WHERE exe_user_id = '".$_user['user_id']."' AND exe_cours_id = '".Database::escape_string($_cid)."' ORDER BY exe_cours_id ASC, exe_date DESC"; //error_log($hpsql); } $results=getManyResultsXCol($sql,10); $hpresults=getManyResultsXCol($hpsql,5); $NoTestRes = 0; $NoHPTestRes = 0; //Print the results of tests $lang_nostartdate = get_lang('NoStartDate').' / '; if (is_array($results)) { $users_array_id = array(); if ($_GET['gradebook']=='view') { $filter_by_no_revised = true; $from_gradebook = true; } $sizeof = sizeof($results); $user_list_name = $user_list_id = array(); for ($i = 0; $i < $sizeof; $i++) { $revised = false; $sql_exe='SELECT exe_id FROM '.Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING).' WHERE author != '."''".' AND exe_id = '."'".$results[$i][5]."'".' LIMIT 1'; $query = api_sql_query($sql_exe,__FILE__,__LINE__); if ( Database::num_rows($query) > 0) { $revised = true; } if ($filter_by_not_revised && $revised == true) { continue; } if($filter_by_revised && $revised == false) { continue; } if($from_gradebook && ($is_allowedToEdit || $is_tutor)) { if(in_array($results[$i][1].$results[$i][0],$users_array_id)) { continue; } $users_array_id[] = $results[$i][1].$results[$i][0]; } $user_list_name[] = $results[$i][0]; $user_list_id[] = $results[$i][9]; $id = $results[$i][5]; $mailid = $results[$i][6]; $user = $results[$i][0]; $test = $results[$i][1]; $dt = strftime($dateTimeFormatLong,$results[$i][4]); $res = $results[$i][2]; echo ''; $add_start_date = $lang_nostartdate; if ($is_allowedToEdit || $is_tutor) { $user = $results[$i][0]; echo ''; } echo ''; echo ''; echo '';//get_lang('dateTimeFormatLong') echo ''; echo ''; echo ''; } } else { $NoTestRes = 1; } // Print the Result of Hotpotatoes Tests if (is_array($hpresults)) { for($i = 0; $i < sizeof($hpresults); $i++) { $title = GetQuizName($hpresults[$i][1],$documentPath); if ($title =='') { $title = GetFileName($hpresults[$i][1]); } echo ''; if ($is_allowedToEdit) { echo ''; } echo ''; echo ''; echo ''; echo ''; //there is no possibility to edit the results of a Hotpotatoes test echo ''; } } else { $NoHPTestRes = 1; } if ($NoTestRes==1 && $NoHPTestRes==1) { ?>
'.$user.' '.$duration.''.$test.''; if ($results[$i][7] > 1) { echo ceil((($results[$i][4] - $results[$i][7])/60)).' '.get_lang('Min'); if($results[$i][8] > 1) { echo ' ( '.$results[$i][8].' '.get_lang('Steps').' )'; } $add_start_date = format_locale_date('%b %d, %Y %H:%M',$results[$i][7]).' / '; } else { echo get_lang('NoLogOfDuration'); } echo ''.$add_start_date.format_locale_date('%b %d, %Y %H:%M',$results[$i][4]).''.round(($res/($results[$i][3]!=0?$results[$i][3]:1))*100).'% ('.$res.' / '.$results[$i][3].')'.(($is_allowedToEdit||$is_tutor)? "". (($revised)?get_lang('Edit'):get_lang('Qualify'))."". ((api_is_platform_admin() || $is_tutor)?' - '.get_lang('Delete').'':'') .(($is_allowedToEdit)?' - '.get_lang('ViewHistory').'':'') :(($revised)?"".get_lang('Show')."":'')).'
'.$hpresults[$i][0].''.$title.''.strftime($dateTimeFormatLong,$hpresults[$i][4]).''.round(($hpresults[$i][2]/($hpresults[$i][3]!=0?$hpresults[$i][3]:1))*100).'% ('.$hpresults[$i][2].' / '.$hpresults[$i][3].')

0 ) { $form_filter = '
'; $user_list_for_select =array(); for ($i=0;$i<$user_count;$i++) { $user_list_for_select[$user_list_id[$i]]=$user_list_name[$i]; } $form_filter .= make_select_users('filter_by_user',$user_list_for_select,(int)$_REQUEST['filter_by_user']); $form_filter .= ''; $form_filter .= '
'; echo $form_filter; } } } else { echo '

 '.get_lang("Results").' >>

'; } // end if($show == 'result') }// end if tracking is enabled if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_footer(); } else { ?>