Esempio n. 1
0
 /** Главный метод: гененрирует полотно вопросов на странице тестов */
 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;
 }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
 /** Генерирует 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);
     // скачать архив
 }