UnknownSec Bypass
403
:
/
mnt
/
lmsestudio-instance-vol002
/
eagleead
/
app
/
Http
/
Controllers
/
Admin
/
Import
/ [
drwxr-xr-x
]
Menu
Upload
Mass depes
Mass delete
Terminal
Info server
About
name :
CSVController.php
<?php namespace EstudioLMS\Http\Controllers\Admin\Import; use EstudioLMS\Events\CourseHiredByAdmin; use EstudioLMS\Events\SendMail; use EstudioLMS\Http\Controllers\Controller; use EstudioLMS\Models\Group\Group; use EstudioLMS\Repositories\Auth\UserRepository; use EstudioLMS\Repositories\Courses\Course\CourseRepository; use EstudioLMS\Repositories\Environment\HiredCourseRepository; use EstudioLMS\Repositories\Financial\HiringRepository; use EstudioLMS\Repositories\Financial\PlanRepository; use EstudioLMS\Services\Import\CSVService; use Illuminate\Http\Request; use Storage; use File; use mjanssen\BreadcrumbsBundle\Breadcrumbs; use Respect\Validation\Validator as v; /** * Class CSVController * @package EstudioLMS\Http\Controllers\Admin\Import */ class CSVController extends Controller { /** * @var CSVService */ private $CSVService; /** * @var CourseRepository */ private $courseRepository; /** * @var Breadcrumbs */ private $breadCrumb; /** * @var PlanRepository */ private $planRepository; /** * @var UserRepository */ private $userRepository; /** * @var HiringRepository */ private $hiringRepository; /** * @var HiredCourseRepository */ private $hiredCourse; /** * CSVController constructor. * @param CSVService $CSVService * @param Breadcrumbs $breadCrumb * @param CourseRepository $courseRepository * @param PlanRepository $planRepository * @param UserRepository $userRepository * @param HiringRepository $hiringRepository * @param HiredCourseRepository $hiredCourse */ public function __construct( CSVService $CSVService, Breadcrumbs $breadCrumb, CourseRepository $courseRepository, PlanRepository $planRepository, UserRepository $userRepository, HiringRepository $hiringRepository, HiredCourseRepository $hiredCourse ) { $this->middleware('admins'); $this->CSVService = $CSVService; $this->courseRepository = $courseRepository; $this->breadCrumb = $breadCrumb; $this->planRepository = $planRepository; $this->userRepository = $userRepository; $this->hiringRepository = $hiringRepository; $this->hiredCourse = $hiredCourse; } /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\View\View */ public function index() { $env = 'import'; $title = trans('admin_import.title'); $this->breadCrumb->addBreadcrumb(trans('admin_user.breaddash'), route('admin.index')); $this->breadCrumb->addBreadcrumb(trans('admin_import.title'), route('admin.users.index')); $bread = $this->breadCrumb->generate(); $courses = ['' => trans('admin_import.selectCourse')] + $this->courseRepository->showCourseListing()->toArray(); $plans = ['' => trans('admin_import.selectPlan')] + $this->planRepository->plansListing()->toArray(); $groups = ['' => trans('admin_import.selectGroup')] + Group::all()->lists('name', 'id')->toArray(); return view('admin.import.csv.index', compact('env', 'title', 'bread', 'courses', 'plans', 'groups')); } /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\View\View * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function import(Request $request) { \Log::info(trans('admin_import.log') . date("H:i:s")); $data = $request->all(); $enrollLimite = \Session::get('planLimite.plan_users_limit'); //$enrolled = $this->hiredCourse->activeUsers(); $data['register_mail'] = isset($data['register_mail']); $data['enroll_course'] = isset($data['enroll_course']); $data['enroll_mail'] = isset($data['enroll_mail']); if (!isset($data['file']) || empty($data['file'])) { return redirect()->route('admin.import.index')->with('error', trans('admin_import.fileNotAdd')); } if ($data['enroll_course'] && (empty($data['course_id']) || empty($data['plan_id']))) { return redirect()->route('admin.import.index')->with('error', trans('admin_import.coursePlanNotSelected')); } else { if ($data['enroll_course']) { $data['price'] = floatval(str_replace(',', '.', str_replace('.', '', $data['price']))); $data['discount'] = floatval(str_replace(',', '.', str_replace('.', '', $data['discount']))); if (($data['price'] > 0 || $data['discount'] > 0) && $data['price'] <= $data['discount']) { return redirect()->route('admin.import.index')->with('error', trans('admin_import.errorDiscount')); } $plan = $this->planRepository->with(['duration'])->find($data['plan_id']); } } $rejecteds = collect([]); $inconsistencies = collect([]); $enrolleds = collect([]); $csv = fopen($data['file'], "r"); $count = 0; if (!empty($data['group_id'])) { $group = Group::find($data['group_id']); } while (($line = fgetcsv($csv, 1000, ",")) !== FALSE) { $empty = array_filter(array_map('trim', $line)); if (!empty($empty)) { /* Validações de Campos */ if (array_key_exists(1, $line)) { $name = preg_match("/^[A-zÀ-ú0-9 \p{L}]+$/", $line[0]) ? trim(substr($line[0], 0, 80)) : false; $email = v::email()->validate(strtolower(trim($line[1]))) ? strtolower(trim($line[1])) : false; $pwd = !empty($line[2]) ? $line[2] : bin2hex(openssl_random_pseudo_bytes(4)); $cpf = null; if (!empty($line[3])) { $tmpCpf = preg_replace('/[^0-9]/', '', $line[3]); if (strlen($tmpCpf) == 11) { $cpf = v::cpf()->validate($tmpCpf) ? $tmpCpf : false; } elseif (strlen($tmpCpf) == 14) { $cpf = v::cnpj()->validate($tmpCpf) ? $tmpCpf : false; } else { $cpf = false; } } /* Rejeições */ $temp = null; if (!$email || !$name) { $temp = [ 'name' => $line[0], 'email' => $line[1], 'password' => !empty($line[2]) ? $line[2] : '', 'cpf_cnpj' => !empty($line[3]) ? $line[3] : '', 'reason' => trans('admin_import.errorEmail') ]; $rejecteds->push($temp); continue; } /* Inconsistências */ if ($cpf === false) { $temp = [ 'name' => $line[0], 'email' => $line[1], 'password' => !empty($line[2]) ? $line[2] : '', 'cpf_cnpj' => !empty($line[3]) ? $line[3] : '', 'reason' => trans('admin_import.errorDocument') ]; $inconsistencies->push($temp); } $reg = [ 'name' => $name, 'email' => $email, 'password' => bcrypt($pwd), 'cpf' => !empty($cpf) ? $cpf : null ]; $user = $this->userRepository->withTrashed()->findByField('email', $email)->first(); if ($user) { $reason = !is_null($user->deleted_at) ? trans('admin_import.deleted') : ''; $temp = [ 'name' => $line[0], 'email' => $line[1], 'password' => !empty($line[2]) ? $line[2] : '', 'cpf_cnpj' => !empty($line[3]) ? $line[3] : '', 'reason' => trans('admin_import.errorEmailRegistered') . $reason, ]; $rejecteds->push($temp); } } else { $temp = [ 'name' => $line[0], 'email' => '', 'password' => '', 'cpf_cnpj' => '', 'reason' => trans('admin_import.errorLineFile') ]; $rejecteds->push($temp); continue; } if (!$user) { $user = $this->userRepository->create($reg); $user->attachRole('3'); $user['senha'] = $pwd; $count++; } if (isset($group)) { $group->students()->attach([$user->id]); } if ($data['register_mail']) { $sended = \Event::fire(new SendMail($user)); } if ($data['enroll_course']) { $studendHasActiveEnroll = count($this->hiredCourse->getStudentActiveEnrolls($user['id'])) > 0; //$enrolled += !$studendHasActiveEnroll ? 1 : 0; $enrolled = $this->hiredCourse->activeUsers(); if ($enrollLimite > $enrolled || $studendHasActiveEnroll) { $startDate = date('Y-m-d H:i:s'); $addDate = '+' . $plan['duration']['duration'] . ' months'; //$endDate = date('Y-m-d H:i:s', strtotime($addDate, mktime(23, 59, 59))); $endDate = date('Y-m-d 23:59:59', strtotime($addDate, strtotime($startDate))); $payCode = substr(bin2hex(openssl_random_pseudo_bytes(32)), 0, 50); $hiring = [ 'user_id' => $user['id'], 'gateway_id' => 'Internal', 'payment_code' => $payCode, 'gross_amount' => $data['price'], 'discount_amount' => $data['discount'], 'fee_amount' => 0, 'extra_amount' => 0, 'net_amount' => floatval($data['price']) - floatval($data['discount']), 'status' => 3, 'course_id' => $data['course_id'], 'plan_id' => $plan['id'], 'start' => $startDate, 'end' => $endDate ]; $newHiring = $this->hiringRepository->create($hiring); $hiredCourse = [ 'user_id' => $user['id'], 'course_id' => $data['course_id'], 'plan_id' => $plan['id'], 'hirings_id' => $newHiring['id'], 'status' => 3, 'start' => $startDate, 'end' => $endDate, 'is_free' => empty(floatval($data['price'])), 'completed' => false ]; $renew = $this->hiredCourse->findWhere([ ['user_id', '=', $user['id']], ['course_id', '=', $data['course_id']] ])->first(); if ($renew) { $this->hiredCourse->update($hiredCourse, $renew['id']); } else { $this->hiredCourse->create($hiredCourse); } $temp = [ 'name' => $line[0], 'email' => $line[1], 'password' => !empty($line[2]) ? $line[2] : '', 'cpf_cnpj' => !empty($line[3]) ? $line[3] : '', 'reason' => trans('admin_import.registeredCourse'), ]; $enrolleds->push($temp); if ($data['enroll_mail']) { $result = $this->hiringRepository ->with(['user', 'plan.duration', 'course']) ->findByField('payment_code', $payCode) ->first(); \Event::fire(new CourseHiredByAdmin($result)); } } else { $temp = [ 'name' => $line[0], 'email' => $line[1], 'password' => !empty($line[2]) ? $line[2] : '', 'cpf_cnpj' => !empty($line[3]) ? $line[3] : '', 'reason' => trans('admin_import.errorRegisteredCourse'), ]; $enrolleds->push($temp); } } } } fclose($csv); \Log::info(trans('admin_import.logFinished') . date("H:i:s")); $env = 'import'; $title = trans('admin_import.titleResultCsv'); $this->breadCrumb->addBreadcrumb(trans('admin_user.breaddash'), route('admin.index')); $this->breadCrumb->addBreadcrumb(trans('admin_import.titleResultCsv'), route('admin.users.index')); $bread = $this->breadCrumb->generate(); return view('admin.import.csv.result', compact('env', 'title', 'bread', 'rejecteds', 'inconsistencies', 'enrolleds')); } /** * @param Request $request * @return array * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ public function upload(Request $request) { $data = $request->all(); if ($request->hasFile('import')) { $upload = $request->file('import'); $name = $upload->getClientOriginalName(); $ext = $upload->getClientOriginalExtension(); $fileName = $name; Storage::disk('temp_video_upload') ->put( $fileName, File::get($request->file('import')) ); $file = Storage::disk('temp_video_upload')->getDriver()->getAdapter()->getPathPrefix() . $fileName; $newRecords = $this->CSVService->countRegisters($file); $enrollLimite = \Session::get('planLimite.plan_users_limit'); $enrolled = \Session::get('planLimite.activeUsers'); $sumEnrolls = $newRecords + $enrolled; if ($sumEnrolls > $enrollLimite && $data['enroll_course'] == 'true') { $msg = trans('admin_import.msgEnrollLimite'); $flag = false; } else { $msg = trans('admin_import.msgSuccess'); $flag = true; } if (!$this->CSVService->validateCsvFile($file)) { $msg = trans('admin_import.msgFileInvalid'); $flag = false; } return [ 'new_records' => $newRecords, 'enroll_limite' => $enrollLimite, 'enrolled' => $enrolled, 'msg' => $msg, 'flag' => $flag, 'file' => $file, 'file_name' => $fileName ]; } } }
Copyright © 2026 - UnknownSec