/** Главный метод: гененрирует полотно вопросов на странице тестов */ public function showViews($id_test) { $test = new Test(); $result = new Result(); $user = new User(); $widgets = []; $saved_test = []; $current_date = date('U'); $query = $test->whereId_test($id_test)->select('amount', 'test_name', 'test_time', 'start', 'end', 'test_type')->first(); if ($current_date < strtotime($query->start) || $current_date > strtotime($query->end)) { //проверка открыт ли тест return view('no_access'); } $amount = $query->amount; //кол-во вопрососв в тесте $result->test_name = $query->test_name; $test_time = $query->test_time; $test_type = $query->test_type; if (!Session::has('test')) { //если в тест зайдено первый раз $test = new Test(); $test_controller = new TestController($test); $ser_array = $this->prepareTest($id_test); for ($i = 0; $i < $amount; $i++) { $id = $this->chooseQuestion($ser_array); if (!$test_controller->rybaTest($id)) { //проверка на вопрос по рыбе return view('no_access'); } $data = $this->showTest($id, $i + 1); //должны получать название view и необходимые параметры $saved_test[] = $data; $widgets[] = View::make($data['view'], $data['arguments']); } $start_time = date_create(); //время начала $int_end_time = date_format($start_time, 'U') + 60 * $test_time; //время конца Session::put('end_time', $int_end_time); $query = Result::max('id_result'); //пример использования агрегатных функций!!! $current_result = $query + 1; //создаем строку в таблице пройденных тестов $query2 = $user->whereEmail(Auth::user()['email'])->select('id')->first(); $result->id_result = $current_result; $result->id_user = $query2->id; $result->id_test = $id_test; $result->amount = $amount; $result->save(); $saved_test = serialize($saved_test); Result::where('id_result', '=', $current_result)->update(['saved_test' => $saved_test]); Session::put('test', $current_result); } else { //если была перезагружена страница теста или тест был покинут $current_test = Session::get('test'); $query = $result->whereId_result($current_test)->first(); $int_end_time = Session::get('end_time'); //время окончания теста $saved_test = $query->saved_test; $saved_test = unserialize($saved_test); for ($i = 0; $i < $amount; $i++) { $widgets[] = View::make($saved_test[$i]['view'], $saved_test[$i]['arguments']); } } $current_time = date_create(); //текущее время $int_left_time = $int_end_time - date_format($current_time, 'U'); //оставшееся время $left_min = floor($int_left_time / 60); //осталось минут $left_sec = $int_left_time % 60; //осталось секунд $widgetListView = View::make('questions.student.widget_list', compact('amount', 'id_test', 'left_min', 'left_sec', 'test_type'))->with('widgets', $widgets); $response = new Response($widgetListView); return $response; }
public function mobile_excel() { //excel标题 $GLOBALS['title'] = '惠付订单 ' . date('Y-m-d'); $stime = date("Y-m-d 00:00:00", strtotime("-1 day")); $etime = date('Y-m-d 00:00:00'); $db = DB::connection('mysql_ali')->select("select A.Mobile,A.CreateTime,A.`Status`,A.StatusDesc,A.productSize,A.TradeId,A.SellID,A.FinishTime,B.OrderID,B.channelName,p.provinceName FROM sellorder A LEFT JOIN base_mobile_location m ON LEFT(A.Mobile,7) = m.telPrefix7 LEFT JOIN base_province p ON p.provinceId = m.provinceId LEFT JOIN (select TradeID,OrderID,channelName from operatororder where ID in(select max(A.ID) from operatororder A where A.TradeID in (select TradeId FROM sellorder where SellID=110054 and CreateTime>='{$stime}' and CreateTime<'{$etime}') group by A.TradeID)) B on A.TradeId=B.TradeID where SellID=110054 and CreateTime>='{$stime}' and CreateTime<'{$etime}';"); //object转为数组 $db = tools\ShareFun::object_to_array($db); $data = array(array(' ', '订购手机号码', '创建时间', '订单状态', '状态码描述', '流量规格', '交易ID', '渠道编号', '订单完成时间', '运营商订单ID', '使用运营商通道', '省份')); //循环拼接数据 for ($i = 0; $i < count($db); $i++) { array_push($data, array('', $db[$i]['Mobile'], $db[$i]['CreateTime'], $db[$i]['Status'], $db[$i]['StatusDesc'], $db[$i]['productSize'], $db[$i]['TradeId'], $db[$i]['SellID'], $db[$i]['FinishTime'], $db[$i]['OrderID'], $db[$i]['channelName'], $db[$i]['provinceName'])); } Excel::create($GLOBALS['title'], function ($excel) use($data) { $excel->sheet('Sheetname', function ($sheet) use($data) { $sheet->fromArray($data); }); })->store('xls', public_path('file')); $mail = '*****@*****.**'; $data = ''; TestController::email($mail, $data); }
/** Генерирует pdf файлы с тестом с заданным количеством вариантов */ public function pdfTest(Request $request) { $question = new Question(); $test = new Test(); $test_controller = new TestController($test); $question_controller = new QuestionController($question); $test_name = $request->input('test'); $num_var = $request->input('num-variants'); $query = Test::whereTest_name($test_name)->select('amount', 'id_test')->first(); $id_test = $query->id_test; $amount = $query->amount; // кол-во вопрососв в тесте $today = date("Y-m-d H-i-s"); $dir = 'download/pdf_tests/' . $today; mkdir($dir); define('FPDF_FONTPATH', 'C:\\wamp\\www\\uir\\public\\fonts'); for ($k = 1; $k <= $num_var; $k++) { // генерируем необходимое число вариантов $fpdf = new Mypdf(); $answered_fpdf = new Mypdf(); $this->headOfPdf($fpdf, $test_name, $k, $amount); $this->headOfPdf($answered_fpdf, $test_name, $k, $amount); $ser_array = $question_controller->prepareTest($id_test); // подготавливаем тест for ($i = 0; $i < $amount; $i++) { // показываем каждый вопрос из теста $id = $question_controller->chooseQuestion($ser_array); if (!$test_controller->rybaTest($id)) { //проверка на вопрос по рыбе return view('no_access'); } $this->pdfQuestion($fpdf, $id, $i + 1); $this->pdfQuestion($answered_fpdf, $id, $i + 1, true); $fpdf->Ln(10); $answered_fpdf->Ln(10); } $fpdf->Output(iconv('utf-8', 'windows-1251', $dir . '/variant' . $k . '.pdf'), 'F'); $answered_fpdf->Output(iconv('utf-8', 'windows-1251', $dir . '/answered_variant' . $k . '.pdf'), 'F'); } $zip = $this->pdfToZip($dir); // создаем архив $this->delPdf($dir); // удаляем созданную папку с тестами $this->download($zip); // скачать архив }