123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568 |
- <?php
-
- class FiveYearPlansController extends \BaseController {
-
-
-
- private function userHasAccess($program_id)
- {
- $user = Auth::user();
-
- switch ($user->role) {
- case '3':
- $programs = $user->programs->lists('id');
-
-
- if(!in_array($program_id, $programs))
- return false;
-
- break;
-
- case '2':
- $programs = Program::where('school_id', $user->school_id)->lists('id');
-
-
- if(!in_array($program_id, $programs))
- return false;
-
- break;
- case '4':
- return false;
- }
-
- return true;
- }
-
-
-
- public function create(Program $program)
- {
- $title = 'New Five Year Plan for '.$program->name;
- $user = Auth::user();
- $outcomes = Outcome::orderBy('name')->get();
-
- $current_quinquennium = Quinquennium::
- where('start_date', '<=', date('Y-m-d'))
- ->where('end_date', '>=', date('Y-m-d'))
- ->first();
-
- $courses = Course::
- select('id', 'code', 'number', 'name')
- ->where('program_id', $program->id)
- ->groupBy('name')
- ->orderBy('code','ASC')
- ->orderBy('number','ASC')
- ->orderBy('name','ASC')
- ->get();
-
-
- if(!$this->userHasAccess($program->id))
- {
- return View::make('global.403');
- }
-
- return View::make('local.managers.shared.create_five_year_plan', compact('title', 'program', 'current_quinquennium', 'outcomes', 'courses'));
- }
-
-
-
- public function index()
- {
- $title = 'Five Year Plans';
- $user = Auth::user();
- $quinquenniums = Quinquennium::all();
- $current_quinquennium = Quinquennium::
- where('start_date', '<=', date('Y-m-d'))
- ->where('end_date', '>=', date('Y-m-d'))
- ->first();
-
- switch ($user->role) {
- case '1':
- $programs = Program::all();
- break;
- case '2':
- $programs = Program::where('school_id', $user->school_id)->get();
- break;
- case 3:
- $programs = $user->programs;
- break;
- default:
- App::abort('404');
- break;
- }
-
- return View::make('local.managers.shared.index_five_year_plans', compact('title', 'quinquenniums', 'programs', 'current_quinquennium'));
- }
-
-
-
- public function store()
- {
- header('Content-Type: application/json');
-
- $input = json_decode(Input::get('five_year_plan'));
-
- DB::beginTransaction();
-
- try {
-
-
- $plan = FiveYearPlan::create(array(
- 'program_id' => $input->program_id,
- 'quinquennium_id' => $input->quinquennium_id,
- )
- );
-
- foreach ($input->mini_plans as $mini_plan_input) {
-
- $mini_plan_validator = Validator::make(
- array(
- 'year_start' => $mini_plan_input->year_start,
- 'year_end' => $mini_plan_input->year_end
- ),
- array(
- 'year_start' => 'required|integer|digits:4',
- 'year_end' => 'required|integer|digits:4'
- )
- );
-
-
- if ($mini_plan_validator->fails())
- {
- $response = array(
- 'status' => 'danger',
- );
- }
-
-
- $mini_plan = FypPart::create(array(
- 'five_year_plan_id' => $plan->id,
- 'year_start' => $mini_plan_input->year_start,
- 'year_end' => $mini_plan_input->year_end,
- )
- );
-
- foreach ($mini_plan_input->outcomes as $index => $outcome_input) {
-
- $outcomes_validator = Validator::make(
- array(
- 'fyp_part_id'=> $mini_plan->id,
- 'outcome_id'=> $outcome_input->id,
- 'objectives'=> json_encode($outcome_input->objectives),
- 'courses'=> json_encode($outcome_input->courses),
- ),
- array(
- 'fyp_part_id'=> 'required|integer',
- 'outcome_id'=> 'required|integer',
- 'objectives'=> 'required',
- 'courses'=> 'required',
- )
- );
-
-
- if ($outcomes_validator->fails())
- {
- $response = array(
- 'status' => 'danger',
- );
- }
-
- FypPartOutcome::create(array(
- 'fyp_part_id'=> $mini_plan->id,
- 'outcome_id'=> $outcome_input->id,
- 'objectives'=> json_encode($outcome_input->objectives),
- 'courses'=> json_encode($outcome_input->courses),
- 'display_order'=> $index + 1,
- )
- );
- }
- }
-
-
- DB::commit();
-
- Session::flash('status', 'success');
- Session::flash('message', 'Five Year Plan created. You can review it below. Click the Edit button if you want to make any changes. To submit your plan, click the Submit button. Please note that submitted plans are final.');
-
- $response = array(
- 'status' => 'success',
- 'message' => $input->quinquennium_id,
- 'redirect_url' => URL::action('FiveYearPlansController@show', array('program'=> $plan->program_id, 'five_year_plan'=> $plan->id))
- );
-
- echo json_encode($response);
- return;
-
- } catch (Exception $e) {
-
- DB::rollBack();
-
- $response = array(
- 'status' => 'danger',
- 'message' => $e->getMessage()
- );
-
- echo json_encode($response);
-
- }
- }
-
-
-
-
- public function show(Program $program, FiveYearPlan $plan)
- {
-
- $outcomes = Outcome::orderBy('name')->get();
-
- $quinquennium_start_date = date('Y', strtotime($plan->quinquennium->start_date));
- $quinquennium_end_date = date('Y', strtotime($plan->quinquennium->end_date));
-
- $title = $quinquennium_start_date.'-'.$quinquennium_end_date.' Five Year Plan for '.$program->name;
-
-
- if(!$this->userHasAccess($program->id))
- {
- return View::make('global.403');
- }
-
- return View::make('local.managers.shared.show_five_year_plan', compact('title', 'program', 'plan', 'outcomes'));
- }
-
-
-
- public function edit(Program $program, FiveYearPlan $plan)
- {
- $title = 'Edit Five Year Plan for '.$program->name;
- $user = Auth::user();
- $outcomes = Outcome::orderBy('name')->get();
-
- $current_quinquennium = Quinquennium::
- where('start_date', '<=', date('Y-m-d'))
- ->where('end_date', '>=', date('Y-m-d'))
- ->first();
-
- $courses = Course::
- select('id', 'code', 'number', 'name')
- ->where('program_id', $program->id)
- ->groupBy('name')
- ->orderBy('code','ASC')
- ->orderBy('number','ASC')
- ->orderBy('name','ASC')
- ->get();
-
-
- if(!$this->userHasAccess($program->id))
- {
- return View::make('global.403');
- }
-
- return View::make('local.managers.shared.edit_five_year_plan', compact('title', 'program', 'current_quinquennium', 'outcomes', 'courses', 'plan'));
- }
-
-
-
- public function update()
- {
- if(Input::get('submit'))
- {
-
- }
- elseif(Input::get('revert'))
- {
-
- }
- else
- {
- header('Content-Type: application/json');
-
- $input = json_decode(Input::get('five_year_plan'));
-
- DB::beginTransaction();
-
- try {
-
- $plan = FiveYearPlan::find($input->plan_id);
- $plan->updated_at = date('Y-m-d H:i:s');
- $plan->save();
-
-
- FypPart::where('five_year_plan_id', $plan->id)->delete();
-
- foreach ($input->mini_plans as $mini_plan_input) {
-
- $mini_plan_validator = Validator::make(
- array(
- 'year_start' => $mini_plan_input->year_start,
- 'year_end' => $mini_plan_input->year_end
- ),
- array(
- 'year_start' => 'required|integer|digits:4',
- 'year_end' => 'required|integer|digits:4'
- )
- );
-
-
- if ($mini_plan_validator->fails())
- {
- $response = array(
- 'status' => 'danger',
- );
- }
-
-
- $mini_plan = FypPart::create(array(
- 'five_year_plan_id' => $plan->id,
- 'year_start' => $mini_plan_input->year_start,
- 'year_end' => $mini_plan_input->year_end,
- )
- );
-
- foreach ($mini_plan_input->outcomes as $index => $outcome_input) {
-
- $outcomes_validator = Validator::make(
- array(
- 'fyp_part_id'=> $mini_plan->id,
- 'outcome_id'=> $outcome_input->id,
- 'objectives'=> json_encode($outcome_input->objectives),
- 'courses'=> json_encode($outcome_input->courses),
- ),
- array(
- 'fyp_part_id'=> 'required|integer',
- 'outcome_id'=> 'required|integer',
- 'objectives'=> 'required',
- 'courses'=> 'required',
- )
- );
-
-
- if ($outcomes_validator->fails())
- {
- $response = array(
- 'status' => 'danger',
- );
- }
-
- FypPartOutcome::create(array(
- 'fyp_part_id'=> $mini_plan->id,
- 'outcome_id'=> $outcome_input->id,
- 'objectives'=> json_encode($outcome_input->objectives),
- 'courses'=> json_encode($outcome_input->courses),
- 'display_order'=> $index + 1,
- )
- );
- }
- }
-
-
- DB::commit();
-
- Session::flash('status', 'success');
- Session::flash('message', 'Five Year Plan updated.');
-
- $response = array(
- 'status' => 'success',
- 'message' => $input->quinquennium_id,
- 'redirect_url' => URL::action('FiveYearPlansController@show', array('program'=> $plan->program_id, 'five_year_plan'=> $plan->id))
- );
-
- echo json_encode($response);
- return;
-
- } catch (Exception $e) {
-
- DB::rollBack();
-
- $response = array(
- 'status' => 'danger',
- 'message' => $e->getMessage().' '.$e->getLine()
- );
-
- echo json_encode($response);
-
- }
- }
- }
-
-
- public function msWord(FiveYearPlan $plan)
- {
- try {
-
- $filename = 'OLAS Five Year Plan for '.$plan->program->name.' ('.date('d-m-Y').').docx';
- require_once 'PHPWord-0.12.1/src/PhpWord/Autoloader.php';
- \PhpOffice\PhpWord\Autoloader::register();
-
-
- $phpWord = new \PhpOffice\PhpWord\PhpWord();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $section_style = array(
- 'orientation' => 'landscape',
- 'lineNumbering' => array(
- 'start' => 1
- ),
- );
- $section = $phpWord->addSection($section_style);
-
-
-
- $table_styles = $tableStyle = array(
- 'borderColor' => 'd0d0d0',
- 'borderSize' => 6,
- 'cellMargin' => 500
- );
- $header_styles = array(
- 'bgColor' => 'FDFBE2',
- 'valign' => 'center',
- 'bold' => true,
- );
-
- $first_column_styles = array(
- 'bgColor' => 'F5F5F5',
- 'valign' => 'center',
- 'bold' => true,
- );
-
- $rowspan_restart = array('vMerge' => 'restart');
- $rowspan_continue = array('vMerge' => 'continue');
-
-
- foreach($plan->fypParts as $number => $mini_plan)
- {
- $table = $section->addTable('table'.$number, $table_styles);
-
-
- $table->addRow(700, array('exactHeight'=>true));
- $table->addCell(3300, $header_styles)->addText("Academic Year");
- $table->addCell(3300, $header_styles)->addText("Learning Outcome to be assessed");
- $table->addCell(3300, $header_styles)->addText("Learning Objectives");
- $table->addCell(3300, $header_styles)->addText("Courses to use for assessment");
-
-
- foreach($mini_plan->fypPartOutcomes as $index => $outcome)
- {
- $table->addRow();
-
-
- if($index == 0)
- {
- $table->addCell(3300, array_merge($first_column_styles, $rowspan_restart))->addText($mini_plan->year_start.'-'.$mini_plan->year_end);
- }
- else
- {
- $table->addCell(3300, array_merge($first_column_styles, $rowspan_continue))->addText('');
- }
-
-
- $table->addCell(3300)->addText($outcome->outcome->name);
-
-
- $cell = $table->addCell(3300);
-
- foreach(json_decode($outcome->objectives) as $objective)
- {
- $cell->addText('• '.$objective->text);
- }
-
-
- $cell = $table->addCell(3300);
-
- foreach(json_decode($outcome->courses) as $course)
- {
- $cell->addText(trim('• '.$course->code.$course->number.': '.$course->name));
- }
- }
-
- $section->addTextBreak(2);
- }
-
-
-
-
- $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
-
-
- $objWriter->save('exports/'.$filename);
-
- return Response::download('exports/'.$filename);
-
- }
- catch(Exception $e)
- {
- Session::flash('status', 'danger');
- Session::flash('message', 'An error occurred while generating the document. Try again later or contact an administrator.');
-
- return Redirect::back();
- }
- }
-
- }
|