Compare commits

...

10 Commits

Author SHA1 Message Date
rianbtk
4af7f08aaa D.Unity 2023-02-07 11:42:40 +07:00
rianbtk
b20c748008 D.Unity 2023-02-07 11:38:44 +07:00
Agus Salim Hadjrianto
5f29c5af80
Merge pull request #2 from rianbtk/add-license-1
MIT
2022-12-16 19:59:56 +07:00
Agus Salim Hadjrianto
f274faef9f
Create LICENSE 2022-12-16 19:59:22 +07:00
Agus Salim Hadjrianto
0c626d68da
MIT 2022-12-16 19:58:52 +07:00
Agus Salim Hadjrianto
dc375394f2
Delete tap.sql 2022-12-16 19:32:13 +07:00
Agus Salim Hadjrianto
21ab8a152f
Delete aplas_web.sql 2022-12-16 19:31:57 +07:00
Agus Salim Hadjrianto
7ea6182f20
D.Database 2022-12-16 19:31:44 +07:00
rianbtk
9fa10716c2 N 2022-11-25 07:09:53 +07:00
rianbtk
894bccf345 python DONE 2022-10-08 15:04:23 +07:00
19 changed files with 10987 additions and 70544 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Agus Salim Hadjrianto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -9,6 +9,9 @@ class StudentController extends Controller
public function index() {
return view('student/main');
}
public function android() {
return view('student/main');
}
public function androidcourse() {
return view('student/androidcourse/main');
}

View File

@ -1,249 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
class UnityController extends Controller
{
//
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index(Request $request) {
if (Auth::user()->roleid=='student/unitycourse') {
$check=\App\User::find(Auth::user()->id);
if ($check->status!='active') return view('student/unitycourse/home')->with(['status'=>$check->status]);
}
$topiclist=\App\UnityTopic::where('status','=','1')
->orderBy('name','asc')->get();
$items = \App\UnityTopic::where('status','=','1')
->orderBy('status','desc')
->orderBy('name','asc')
->pluck('name', 'id');
$itemslearning = \App\UnityTopic::where('status','=','1')
->orderBy('status','desc')
->orderBy('name','asc')
->where('level','=','1')
->pluck('name', 'id');
$filter = $request->input('topicList',$topiclist[0]['id']);
if ($filter=='0') {
$entities=\App\UnityTask::all();
} else {
$entities = \App\UnityTask::where('topic','=',$filter)
->select(
'tasks.id',
'tasks.taskno',
'tasks.desc',
'tasks.topic',
'topics.name'
)
->join(
'topics',
'topics.id','=','tasks.topic'
)
->orderBy('tasks.taskno','asc')
->get();
}
if (Auth::user()->roleid=='admin') {
return view('admin/tasks/index')
->with(compact('entities'))
->with(compact('items'))
->with(compact('filter'));
} else {
$topic = \App\UnityTopic::where('topics.id','=',$filter)
->select(
'topics.id',
'topics.name',
'topics.desc',
'learning_files.guide',
'learning_files.testfile',
'learning_files.supplement',
'learning_files.other'
)
->leftJoin('learning_files', 'learning_files.topic', '=', 'topics.id')
->first();
return view('student/unitycourse/tasks/index')
->with(compact('entities'))
->with(compact('items'))
->with(compact('itemslearning'))
->with(compact('filter'))
->with(compact('topic'));
}
}
public function getTopic($id){
$items = \App\UnityTopic::find($id);
return $items['name'];
}
public function filterTask() {
$filters = \App\UnityTopic::get();
$filter = \App\UnityTopic::findOrFail(Input::get('filter_id'));
$data= \App\UnityTask::with('topic')->where('topic', '=' , $filter->id )->latest()->get();
return View::make('admin.tasks.index',compact('filters'))->withProfiles($data)->with('title', 'filter');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
$items = \App\UnityTopic::pluck('name', 'id');
//echo "kljasd;lkasdl";
return view('admin/tasks/create')->with(compact('items'));
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store(Request $request)
{
//echo "YAAANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN";
//
$rules =[
'taskno'=>'required',
'desc'=>'required'
];
$msg=[
'taskno.required'=>'Task number must not empty',
'desc.required'=>'Description must not empty'
];
$validator=Validator::make($request->all(),$rules,$msg);
//jika data ada yang kosong
if ($validator->fails()) {
//refresh halaman
return Redirect::to('admin/tasks/create')
->withErrors($validator);
}else{
$entity=new \App\UnityTask;
$entity->desc=$request->get('desc');
$entity->taskno=$request->get('taskno');
$entity->topic=$request->get('topic');
$entity->save();
Session::flash('message','A New Task Stored');
//return "Add new topic is success";
return Redirect::to('admin/tasks');
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show(Request $request, $id)
{
$entity = \App\UnityTask::find($id);
$topic = \App\UnityTopic::find($entity->topic);
$x=['data'=>$entity, 'topic'=>$topic];
if ($request->is('admin/*')) {
return view('admin/tasks/show')->with($x);
} else {
return view('student/unitycourse/tasks/show')->with($x);
}
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//
$entity = \App\UnityTask::find($id);
$x=['data'=>$entity];
$items = \App\UnityTopic::pluck('name', 'id');
return view('admin/tasks/edit')->with($x)->with(compact('items'));
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
$rules =[
'taskno'=>'required',
'desc'=>'required'
];
$msg=[
'taskno.required'=>'Task number must not empty',
'desc.required'=>'Description must not empty'
];
$validator=Validator::make($request->all(),$rules,$msg);
if ($validator->fails()) {
return Redirect::to('admin/topics/'.$id.'/edit')
->withErrors($validator);
}else{
$entity=\App\UnityTask::find($id);
$entity->desc=$request->get('desc');
$entity->taskno=$request->get('taskno');
$entity->topic=$request->get('topic');
$entity->save();
Session::flash('message','Task with Id='.$id.' is changed');
return Redirect::to('admin/tasks');
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
$entity = \App\UnityTask::find($id);
$entity->delete();
Session::flash('message','Task with Id='.$id.' is deleted');
return Redirect::to('admin/tasks');
}
}

View File

@ -1,131 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
class UnityFileResultController extends Controller
{
public function create($id) {
//
$topic = \App\UnityTopic::find($id);
$files = \App\UnityTopicFiles::where('topic','=',$id)->get();
return view('student/unitycourse/lfiles/create')
->with(compact('files'))
->with(compact('topic'));
}
public function store(Request $request)
{
//
$rules =[
'rscfile'=>'required'
];
$msg=[
'rscfile.required'=>'Resource File must not empty'
];
$validator=Validator::make($request->all(),$rules,$msg);
//jika data ada yang kosong
if ($validator->fails()) {
return Redirect::to('student/unitycourse/lfiles/create/'.$request->get('topic'))
->withErrors($validator);
} else {
$file = $request->file('rscfile');
$filename = $file->getClientOriginalName();
$fileinfo = \App\UnityTopicFiles::find($request->get('fileid'));
if ($fileinfo['fileName']!=$filename) {
return Redirect::to('student/unitycourse/lfiles/create/'.$request->get('topic'))
->withErrors("File name should be ".$fileinfo['fileName']);
} else {
$result = \App\UnityFileResult::where('userid','=',Auth::user()->id)
->where('fileid','=',$request->get('fileid'))
->get();
if (count($result)>0) {
return Redirect::to('student/unitycourse/lfiles/create/'.$request->get('topic'))
->withErrors('File '.$fileinfo['fileName'].' was already submitted');
} else {
$rsc=$file->store('resource','public');
$entity=new \App\UnityFileResult;
$entity->userid=Auth::user()->id;
$entity->fileid=$request->get('fileid');
$entity->rscfile=$rsc;
$entity->save();
Session::flash('message','A New File Result Stored');
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$fileinfo['topic'])->with( [ 'topic' => $request->get('topic') ] );
}
}
}
}
public function destroy(Request $request,$id)
{
//
$entity = \App\UnityFileResult::find($id);
$path = storage_path('app\\public\\').$entity['rscfile'];
//$path = str_replace('\\',DIRECTORY_SEPARATOR,$path);
//$dirpath = storage_path('app\\public\\\');
File::delete(getPath($path));
$entity->delete();
Session::flash('File Result with Id='.$id.' is deleted');
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic'));
}
public function delete($id,$topic)
{
//
$entity = \App\UnityFileResult::find($id);
$path = storage_path('app\\public\\').$entity['rscfile'];
//$path = str_replace('\\',DIRECTORY_SEPARATOR,$path);
//$dirpath = storage_path('app\\public\\\');
File::delete($path);
$entity->delete();
Session::flash('File Result with Id='.$id.' is deleted');
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=files');
}
public function submit($id) {
//
$entity=new \App\UnityStudentSubmit;
$entity->userid=Auth::user()->id;
$entity->topic=$id;
$entity->validstat="valid";
$entity->save();
$topic = \App\UnityTopic::find($id);
Session::flash('message','Topic '.$topic['name'].' Validation is Success');
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$id);
}
public function getPath($path) {
$res = str_replace('\\',DIRECTORY_SEPARATOR,$path);
return str_replace('/',DIRECTORY_SEPARATOR,$res);
}
}

View File

@ -1,385 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
class UnityResultController extends Controller
{
public function index(Request $request) {
//$check=\App\StudentTeacher::where('student','=',Auth::user()->id);
//if ($check->count()==0) return view('student/home')->with(['count'=>$check->count()]);
$check=\App\User::find(Auth::user()->id);
if ($check->status!='active') return view('student/unitycourse/home')->with(['status'=>$check->status]);
$filter = $request->input('topicList','6');
if ($filter=='0') {
$entities=\App\UnityTaskResult::where('userid','=',Auth::user()->id);
} else {
$entities = \App\UnityTask::where('tasks.topic','=',$filter)
->select(
'task_results.id',
'task_results.taskid',
'task_results.userid',
'task_results.status',
'task_results.duration',
'task_results.comment',
'task_results.imgFile',
'tasks.taskno',
'tasks.desc',
'tasks.topic'
)
->leftJoin('task_results', function($join)
{
$join->on('tasks.id','=','task_results.taskid')
->where('task_results.userid', '=', Auth::user()->id);
}
)
->orderBy('tasks.taskno', 'asc')
->get();
}
$lfiles = \App\UnityTopicFiles::where('topic_files.topic','=',$filter)
->select(
'file_results.id',
'file_results.userid',
'file_results.rscfile',
'file_results.fileid',
'topic_files.fileName',
'topic_files.path',
'topic_files.desc'
)
->leftJoin('file_results', function($join)
{
$join->on('topic_files.id','=','file_results.fileid')
->where('file_results.userid', '=', Auth::user()->id);
}
)
->orderBy('topic_files.fileName', 'asc')
->get();
$items = \App\UnityTopic::
where('status','>=','0')
->where('androidclass','=','AndroidX')
->orderBy('name','asc')
->orderBy('level','asc')
->pluck('name', 'id');
$valid = \App\UnityStudentSubmit::where('userid','=',Auth::user()->id)
->where('topic','=',$filter)
->get()->count();
$option = $request->input('option','github');
$currtopic = \App\UnityTopic::find($filter);
return view('student/unitycourse/results/index')
->with(compact('entities'))
->with(compact('lfiles'))
->with(compact('items'))
->with(compact('filter'))
->with(compact('option'))
->with(compact('currtopic'))
->with(compact('valid'));
}
public function getTaskData($topic) {
$items = \App\UnityTask::where('tasks.topic','=',$topic)
->select(
'tasks.id',
'tasks.taskno',
'tasks.desc',
'topics.name'
)
->join(
'topics',
'topics.id','=','tasks.topic'
)
->orderBy('topics.name', 'asc')
->orderBy('tasks.taskno', 'asc')
->get();
return $items;
}
public function create($id)
{
$items = \App\UnityTask::where('topic','=',$id)
->orderBy('taskno', 'asc')
->get();
$topic = \App\UnityTopic::find($id);
return view('student/unitycourse/results/create')
->with(compact('topic'))
->with(compact('items'));
}
private function validateByFiles($userid, $topic) {
//
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation is Success');
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=files');
}
private function validateZipFile($userid, $topic, $file, $path) {
//
//$file = $request->file('zipfile');
if ($path!='' ) {
//$array = explode('.', $path);
//$ext = strtolower(end($array));
$ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
if ($ext=="zip") {
$zipFile=$file->store('results','public');
if ($zipFile!='') {
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->projectfile=$zipFile;
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation by Uploading Zip Project is Success');
} else {
Session::flash('message','Storing file '.$request->file('zipfile').' was FAILED');
}
} else {
Session::flash('message','File extension is not zip -> '.$path.' is wrong .'.$ext);
}
} else {
Session::flash('message','Zip File is empty');
}
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=zipfile');
}
private function validateGithubLink($userid, $topic, $link, $projname) {
//
$trimmedlink = trim($link);
if ($this->validateUrl($trimmedlink,$projname)) {
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->githublink=$trimmedlink;
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation by submitting GitHub link is Success');
//Session::flash('message','URL valid '.$link);
} else {
Session::flash('message','URL is not VALID '.$link);
}
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=github');
}
private function validateUrl($url,$projname) {
$path = parse_url($url, PHP_URL_PATH);
$encoded_path = array_map('urlencode', explode('/', $path));
$url = str_replace($path, implode('/', $encoded_path), $url);
if (filter_var($url, FILTER_VALIDATE_URL)) {
$result = parse_url($url);
if ( ($result['scheme']=='https') && ($this->endsWith($result['host'],'github.com'))
&& (strpos($result['path'],$projname)) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
private function endsWith($haystack, $needle) {
return substr_compare($haystack, $needle, -strlen($needle)) === 0;
}
private function saveTaskResult(Request $request)
{
//
$rules =[
'duration'=>'required',
'image'=>'required',
'comment'=>'required'
];
$msg=[
'duration.required'=>'Duration time must not empty',
'image.required'=>'Evidence image file must not empty',
'comment.required'=>'Comment must not empty'
];
$validator=Validator::make($request->all(),$rules,$msg);
//jika data ada yang kosong
if ($validator->fails()) {
//refresh halaman
return Redirect::to('student/unitycourse/results/create/'.$request->get('topic'))
->withErrors($validator);
} else {
$check = \App\UnityTaskResult::where('userid','=',Auth::user()->id)
->where('taskid','=',$request->get('taskid'))
->get();
if (sizeof($check)>0) {
$task = \App\UnityTask::find($request->get('taskid'));
$message = 'Result of Task '.$task['desc'].' is already submitted!!';
//Session::flash('message',);
return Redirect::to('student/unitycourse/results/create'.$request->get('topic'))->withErrors($message);
} else {
$file = $request->file('image');
$imgFile=$file->store('results','public');
$entity=new \App\UnityTaskResult;
$comment = ($request->get('comment')==null)?'-':$request->get('comment');
$entity->userid=Auth::user()->id;
$entity->taskid=$request->get('taskid');
$entity->status=$request->get('status');
$entity->duration=$request->get('duration');
$entity->comment=$comment;
$entity->imgFile=$imgFile;
$entity->save();
Session::flash('message','A New Task Result Stored');
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic'))->with( [ 'topic' => $request->get('topic') ] );
}
}
}
public function store(Request $request)
{
if (strlen($request->get('option'))>3) {
if (($request->get('action')=='validate') && (strlen($request->submitbutton)>5)) {
if ($request->get('option')=='files') {
return $this->validateByFiles(Auth::user()->id, $request->get('topic'));
} else if ($request->get('option')=='zipfile') {
$file = $request->file('zipfile');
$filename = $file->getClientOriginalName();
return $this->validateZipFile(Auth::user()->id, $request->get('topic'), $file, $filename);
} else if ($request->get('option')=='github') {
return $this->validateGithubLink(Auth::user()->id, $request->get('topic'), $request->get('githublink'),
$request->get('projname'));
} else {
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic').'&option='.$request->get('option').
'&submit='.$request->submitbutton);
}
} else { //clicking radio button
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic').'&option='.$request->get('option'));
//'&submit='.$request->submitbutton);
}
} else { //echo $request;
return $this->saveTaskResult($request);
}
}
public function destroy(Request $request, $id)
{
//
$entity = \App\UnityTaskResult::find($id);
$entity->delete();
Session::flash('message','Task Result with Id='.$id.' is deleted');
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic'));
}
public function edit($id)
{
//
$entity = \App\UnityTaskResult::where('id','=',$id)->first();
$task = \App\UnityTask::where('id','=',$entity['taskid'])->first();
return view('student/unitycourse/results/edit')->with(compact('entity'))
->with(compact('task'));
}
public function valsub(Request $request)
{
$items = \App\UnityTask::where('topic','=',$id)
->orderBy('taskno', 'asc')
->get();
$topic = \App\UnityTopic::find($id);
return view('student/unitycourse/results/create')
->with(compact('topic'))
->with(compact('items'));
}
public function update(Request $request, $id) {
//
$rules =[
'duration'=>'required',
];
$msg=[
'duration.required'=>'Duration time must not empty',
];
$validator=Validator::make($request->all(),$rules,$msg);
if ($validator->fails()) {
return Redirect::to('student/unitycourse/results/'.$id.'/edit')
->withErrors($validator);
}else{
$file = $request->file('image');
$entity=\App\UnityTaskResult::find($id);
$entity->taskid=$request->get('taskid');
$entity->status=$request->get('status');
$entity->duration=$request->get('duration');
$entity->comment=$request->get('comment');
if ($file!='') {
$imgFile=$file->store('results','public');
$entity->imgFile=$imgFile;
}
$entity->save();
Session::flash('message','Task Result with Id='.$id.' is changed');
$task = \App\UnityTask::find($request->get('taskid'));
return Redirect::to('student/unitycourse/results?topicList='.$task['topic']);
}
}
}

View File

@ -1,379 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;
class UnityTaskResultController extends Controller
{
public function index(Request $request) {
$check=\App\UnityUser::find(Auth::user()->id);
if ($check->status!='active') return view('student/unitycourse/home')->with(['status'=>$check->status]);
$filter = $request->input('topicList','6');
if ($filter=='0') {
$entities=\App\UnityTaskResult::where('userid','=',Auth::user()->id);
} else {
$entities = \App\UnityTask::where('tasks.topic','=',$filter)
->select(
'task_results.id',
'task_results.taskid',
'task_results.userid',
'task_results.status',
'task_results.duration',
'task_results.comment',
'task_results.imgFile',
'tasks.taskno',
'tasks.desc',
'tasks.topic'
)
->leftJoin('task_results', function($join)
{
$join->on('tasks.id','=','task_results.taskid')
->where('task_results.userid', '=', Auth::user()->id);
}
)
->orderBy('tasks.taskno', 'asc')
->get();
}
$lfiles = \App\UnityTopicFiles::where('topic_files.topic','=',$filter)
->select(
'file_results.id',
'file_results.userid',
'file_results.rscfile',
'file_results.fileid',
'topic_files.fileName',
'topic_files.path',
'topic_files.desc'
)
->leftJoin('file_results', function($join)
{
$join->on('topic_files.id','=','file_results.fileid')
->where('file_results.userid', '=', Auth::user()->id);
}
)
->orderBy('topic_files.fileName', 'asc')
->get();
$items = \App\UnityTopic::
where('status','>=','0')
->where('androidclass','=','AndroidX')
->orderBy('name','asc')
->orderBy('level','asc')
->pluck('name', 'id');
$valid = \App\UnityStudentSubmit::where('userid','=',Auth::user()->id)
->where('topic','=',$filter)
->get()->count();
$option = $request->input('option','github');
$currtopic = \App\UnityTopic::find($filter);
return view('student/unitycourse/results/index')
->with(compact('entities'))
->with(compact('lfiles'))
->with(compact('items'))
->with(compact('filter'))
->with(compact('option'))
->with(compact('currtopic'))
->with(compact('valid'));
}
public function getTaskData($topic) {
$items = \App\UnityTask::where('tasks.topic','=',$topic)
->select(
'tasks.id',
'tasks.taskno',
'tasks.desc',
'topics.name'
)
->join(
'topics',
'topics.id','=','tasks.topic'
)
->orderBy('topics.name', 'asc')
->orderBy('tasks.taskno', 'asc')
->get();
return $items;
}
public function create($id)
{
$items = \App\UnityTask::where('topic','=',$id)
->orderBy('taskno', 'asc')
->get();
$topic = \App\UnityTopic::find($id);
return view('student/unitycourse/results/create')
->with(compact('topic'))
->with(compact('items'));
}
private function validateByFiles($userid, $topic) {
//
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation is Success');
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=files');
}
private function validateZipFile($userid, $topic, $file, $path) {
if ($path!='' ) {
$ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
if ($ext=="zip") {
$zipFile=$file->store('results','public');
if ($zipFile!='') {
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->projectfile=$zipFile;
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation by Uploading Zip Project is Success');
} else {
Session::flash('message','Storing file '.$request->file('zipfile').' was FAILED');
}
} else {
Session::flash('message','File extension is not zip -> '.$path.' is wrong .'.$ext);
}
} else {
Session::flash('message','Zip File is empty');
}
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=zipfile');
}
private function validateGithubLink($userid, $topic, $link, $projname) {
//
$trimmedlink = trim($link);
if ($this->validateUrl($trimmedlink,$projname)) {
$entity=new \App\UnityStudentSubmit;
$entity->userid=$userid;
$entity->topic=$topic;
$entity->validstat="valid";
$entity->githublink=$trimmedlink;
$entity->save();
$data = \App\UnityTopic::find($topic);
Session::flash('message','Topic '.$data['name'].' Validation by submitting GitHub link is Success');
//Session::flash('message','URL valid '.$link);
} else {
Session::flash('message','URL is not VALID '.$link);
}
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$topic.'&option=github');
}
private function validateUrl($url,$projname) {
$path = parse_url($url, PHP_URL_PATH);
$encoded_path = array_map('urlencode', explode('/', $path));
$url = str_replace($path, implode('/', $encoded_path), $url);
if (filter_var($url, FILTER_VALIDATE_URL)) {
$result = parse_url($url);
if ( ($result['scheme']=='https') && ($this->endsWith($result['host'],'github.com'))
&& (strpos($result['path'],$projname)) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
private function endsWith($haystack, $needle) {
return substr_compare($haystack, $needle, -strlen($needle)) === 0;
}
private function saveTaskResult(Request $request)
{
//
$rules =[
'duration'=>'required',
'image'=>'required',
'comment'=>'required'
];
$msg=[
'duration.required'=>'Duration time must not empty',
'image.required'=>'Evidence image file must not empty',
'comment.required'=>'Comment must not empty'
];
$validator=Validator::make($request->all(),$rules,$msg);
//jika data ada yang kosong
if ($validator->fails()) {
//refresh halaman
return Redirect::to('student/unitycourse/results/create/'.$request->get('topic'))
->withErrors($validator);
} else {
$check = \App\UnityTaskResult::where('userid','=',Auth::user()->id)
->where('taskid','=',$request->get('taskid'))
->get();
if (sizeof($check)>0) {
$task = \App\UnityTask::find($request->get('taskid'));
$message = 'Result of Task '.$task['desc'].' is already submitted!!';
//Session::flash('message',);
return Redirect::to('student/unitycourse/results/create'.$request->get('topic'))->withErrors($message);
} else {
$file = $request->file('image');
$imgFile=$file->store('result','public');
$entity=new \App\UnityTaskResult;
$comment = ($request->get('comment')==null)?'-':$request->get('comment');
$entity->userid=Auth::user()->id;
$entity->taskid=$request->get('taskid');
$entity->status=$request->get('status');
$entity->duration=$request->get('duration');
$entity->comment=$comment;
$entity->imgFile=$imgFile;
$entity->save();
Session::flash('message','A New Task Result Stored');
//return "Add new topic is success";
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic'))->with( [ 'topic' => $request->get('topic') ] );
}
}
}
public function store(Request $request)
{
if (strlen($request->get('option'))>3) {
if (($request->get('action')=='validate') && (strlen($request->submitbutton)>5)) {
if ($request->get('option')=='files') {
return $this->validateByFiles(Auth::user()->id, $request->get('topic'));
} else if ($request->get('option')=='zipfile') {
$file = $request->file('zipfile');
$filename = $file->getClientOriginalName();
return $this->validateZipFile(Auth::user()->id, $request->get('topic'), $file, $filename);
} else if ($request->get('option')=='github') {
return $this->validateGithubLink(Auth::user()->id, $request->get('topic'), $request->get('githublink'),
$request->get('projname'));
} else {
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic').'&option='.$request->get('option').
'&submit='.$request->submitbutton);
}
} else { //clicking radio button
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic').'&option='.$request->get('option'));
//'&submit='.$request->submitbutton);
}
} else { //echo $request;
return $this->saveTaskResult($request);
}
}
public function destroy(Request $request, $id)
{
//
$entity = \App\UnityTaskResult::find($id);
$entity->delete();
Session::flash('message','Task Result with Id='.$id.' is deleted');
return Redirect::to('student/unitycourse/results?topicList='.$request->get('topic'));
}
public function edit($id)
{
//
$entity = \App\UnityTaskResult::where('id','=',$id)->first();
$task = \App\UnityTask::where('id','=',$entity['taskid'])->first();
return view('student/unitycourse/results/edit')->with(compact('entity'))
->with(compact('task'));
}
public function valsub(Request $request)
{
$items = \App\UnityTask::where('topic','=',$id)
->orderBy('taskno', 'asc')
->get();
$topic = \App\UnityTopic::find($id);
return view('student/unitycourse/results/create')
->with(compact('topic'))
->with(compact('items'));
}
public function update(Request $request, $id) {
//
$rules =[
'duration'=>'required',
];
$msg=[
'duration.required'=>'Duration time must not empty',
];
$validator=Validator::make($request->all(),$rules,$msg);
if ($validator->fails()) {
return Redirect::to('student/unitycourse/results/'.$id.'/edit')
->withErrors($validator);
}else{
$file = $request->file('image');
$entity=\App\UnityTaskResult::find($id);
$entity->taskid=$request->get('taskid');
$entity->status=$request->get('status');
$entity->duration=$request->get('duration');
$entity->comment=$request->get('comment');
if ($file!='') {
$imgFile=$file->store('results','public');
$entity->imgFile=$imgFile;
}
$entity->save();
Session::flash('message','Task Result with Id='.$id.' is changed');
$task = \App\UnityTask::find($request->get('taskid'));
return Redirect::to('student/unitycourse/results?topicList='.$task['topic']);
}
}
}

View File

@ -52,7 +52,7 @@ class ResultController extends Controller
}
// view
return view('student.python_result.result_student', compact('dt_hasil'));
return view('student.pythoncourse.python_result.result_student', compact('dt_hasil'));
}

View File

@ -1,12 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityStudentSubmit extends Model
{
protected $table='student_submits';
public $primaryKey='id';
}

View File

@ -1,25 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityTask extends Model
{
//
protected $table='tasks';
public $primaryKey='id';
public function topic() {
return $this->belongsTo(App\UnityTopic::class);
}
public function getTopic($id) {
return \App\UnityTopic::find($id)->name;
}
public function getListTopic() {
return \App\UnityTopic::pluck('name', 'id');
}
}

View File

@ -1,11 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityTaskResult extends Model
{
protected $table='task_results';
public $primaryKey='id';
}

View File

@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityTestFiles extends Model
{
//
}

View File

@ -1,22 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityTopic extends Model
{
//
protected $table='topics';
public function tasks() {
return $this->hasMany('App\UnityTask');
}
public function topic_files() {
return $this->hasMany('App\UnityTopicFiles');
}
public function test_files() {
return $this->hasMany('App\UnityTestFiles');
}
}

View File

@ -1,15 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UnityTopicFiles extends Model
{
//
protected $table='topic_files';
public $primaryKey='id';
public function topic() {
return $this->belongsTo(App\UnityTopic::class);
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class UnityUser extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'roleid', 'email', 'password','uplink','status'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function checkRoleId($roleid) {
if ($roleid=='student') {
return Redirect::to('student/unitycourse/home');
} elseif ($roleid=='teacher') {
return Redirect::to('teacher/home');
} elseif ($roleid=='admin') {
return Redirect::to('admin/admin');
} else {
return Redirect::to('/home');
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
# Tuliskan variabel dibawah ini
def konversi(umur):
#Tuliskan kode program dibawah ini

View File

@ -111,21 +111,6 @@
</div>
</div>
<div onclick="window.open('{{URL::to('/student/unitycourse/')}}','unitycourse-aplas');" class="col-md-6 col-lg-3 d-flex align-items-stretch mb-5">
<div class="icon-box" data-aos="fade-up" data-aos-delay="100">
<div class="icon"><i class='bx bxs-game'></i></div>
<h4 class="title"><a href="">Unity</a></h4>
<p class="description">Unity 3D is a software engine for developing games with casual, AR (Augmented Reality) and VR (Virtual Reality) genres. The game results from Unity 3D are cross-platform. Which means you can publish your game to multiple platforms.</p>
</div>
</div>
<!-- <div onclick="window.open('{{URL::to('/student/flutter')}}','fluttercourse-aplas');" class="col-md-6 col-lg-3 d-flex align-items-stretch mb-5">
<div class="icon-box" data-aos="fade-up" data-aos-delay="200">
<div class="icon"><i class='bx bxl-flutter'></i></div>
<h4 class="title"><a href="">Flutter</a></h4>
<p class="description">Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore</p>
</div>
</div> -->
<div onclick="window.open('{{URL::to('/student/fluttercourse/')}}','fluttercourse-aplas');" class="col-md-6 col-lg-3 d-flex align-items-stretch mb-5">
<div class="icon-box" data-aos="fade-up" data-aos-delay="100">
<div class="icon"><i class='bx bxl-flutter'></i></div>
@ -143,6 +128,13 @@
<p class="description">MySQL is a DBMS (Database Management System) using SQL (Structured Query Language) commands.So, MySQL is a free database server licensed under the GNU General Public License (GPL) so you can use it for personal or commercial purposes without having to pay for an existing license.</p>
</div>
</div>
<div onclick="window.open('{{URL::to('/student/android/')}}','android-aplas');" class="col-md-6 col-lg-3 d-flex align-items-stretch mb-5">
<div class="icon-box" data-aos="fade-up" data-aos-delay="100">
<div class="icon"><i class='bx bxl-medium-old'></i></div>
<h4 class="title"><a href="">APLAS</a></h4>
<p class="description">Aplas lama</p>
</div>
</div>
</div>
</section><!-- End Featured Services Section -->

View File

@ -196,17 +196,6 @@ Route::group(['middleware' => ['auth', 'student']], function () {
Route::get('/student/lfiles/nodejscourse/create/{topic}', 'NodejsFileResultController@create');
Route::get('/student/lfiles/nodejscourse/valid/{topic}', 'NodejsFileResultController@submit');
Route::get('/student/lfiles/nodejscourse/delete/{id}/{topic}', 'NodejsFileResultController@delete');
//Unity//
Route::patch('/student/unitycourse/results/valsub', ['as' => 'results.valsub', 'uses' => 'UnityTaskResultController@valsub']);
Route::get('/student/unitycourse/results/create/{topic}', 'UnityTaskResultController@create');
Route::get('/student/unitycourse', 'StudentController@unitycourse');
Route::get('/student/unitycourse/topic', 'StudentController@unitycoursetopic');
Route::resource('/student/unitycourse/tasks', 'UnityController');
Route::resource('/student/unitycourse/results', 'UnityResultController');
Route::resource('/student/unitycourse/lfiles', 'UnityFileResultController');
Route::get('/student/lfiles/unitycourse/create/{topic}', 'UnityFileResultController@create');
Route::get('/student/lfiles/unitycourse/valid/{topic}', 'UnityFileResultController@submit');
Route::get('/student/lfiles/unitycourse/delete/{id}/{topic}', 'UnityFileResultController@delete');
/** Python */
@ -232,6 +221,7 @@ Route::group(['middleware' => ['auth', 'student']], function () {
Route::get('/student/androidcourse/asynctask', 'StudentController@asynctask');
Route::get('/student/androidcourse/firebase', 'StudentController@firebase');
Route::get('/student/android', 'StudentController@android');
Route::get('/student', 'StudentController@index');
Route::resource('/student/tasks', 'TaskStdController');