From 4e25d3baa0a7cbad971c4366e558e12b01d0af2c Mon Sep 17 00:00:00 2001 From: RemyTombez Date: Thu, 9 Jul 2020 14:45:54 +0200 Subject: [PATCH] Patch 0.1 First preversion, partially usable --- application/config/MY_constants.php | 26 + application/config/constants.php | 7 + application/config/routes.php | 2 +- application/controllers/Admin.php | 600 ++++++++++++ application/controllers/Apprentice.php | 486 ++++++++++ .../language/french/MY_application_lang.php | 202 +++- .../models/acquisition_level_model.php | 26 + .../models/acquisition_status_model.php | 33 + application/models/comment_model.php | 30 + .../models/competence_domain_model.php | 30 + application/models/course_plan_model.php | 27 + application/models/objective_model.php | 28 + .../models/operational_competence_model.php | 30 + .../models/trainer_apprentice_model.php | 30 + application/models/user_course_model.php | 33 + .../models/user_course_status_model.php | 26 + application/views/acquisition_status/view.php | 55 ++ .../views/admin/competence_domain/delete.php | 23 + .../views/admin/competence_domain/list.php | 76 ++ .../views/admin/competence_domain/save.php | 67 ++ .../views/admin/competence_domain/view.php | 50 + .../views/admin/course_plan/delete.php | 23 + application/views/admin/course_plan/list.php | 76 ++ application/views/admin/course_plan/save.php | 73 ++ application/views/admin/course_plan/view.php | 41 + application/views/admin/objective/delete.php | 23 + application/views/admin/objective/list.php | 76 ++ application/views/admin/objective/save.php | 79 ++ application/views/admin/objective/view.php | 70 ++ .../admin/operational_competence/delete.php | 23 + .../admin/operational_competence/list.php | 76 ++ .../admin/operational_competence/save.php | 98 ++ .../admin/operational_competence/view.php | 77 ++ application/views/apprentice/delete.php | 25 + application/views/apprentice/link.php | 57 ++ application/views/apprentice/list.php | 72 ++ application/views/apprentice/view.php | 76 ++ application/views/comment/save.php | 50 + application/views/user_course/delete.php | 25 + application/views/user_course/save.php | 75 ++ application/views/user_course/view.php | 69 ++ database/20200709_plafor_v01.sql | 913 ++++++++++++++++++ database/SAMPLE_DATAS.sql | 297 ++++++ database/core.sql | 52 - database/plafor_beginning_database.sql | 133 --- documentation/Gantt.gan | 70 ++ documentation/database/plaforMCD.graphml | 390 ++++++++ documentation/database/plaforMLD.graphml | 413 ++++++++ documentation/pages/plaforNavigation.graphml | 743 ++++++++++++++ tests/Bootstrap.php | 76 -- tests/README.md | 226 ----- tests/mocks/autoloader.php | 119 --- tests/mocks/ci_testcase.php | 384 -------- tests/mocks/ci_testconfig.php | 20 - tests/mocks/core/common.php | 153 --- tests/mocks/core/input.php | 49 - tests/mocks/core/security.php | 35 - tests/mocks/core/uri.php | 32 - tests/mocks/core/utf8.php | 19 - tests/mocks/database/ci_test.sqlite | Bin 19456 -> 0 bytes tests/mocks/database/config/mysql.php | 34 - tests/mocks/database/config/mysqli.php | 34 - tests/mocks/database/config/pdo/mysql.php | 37 - tests/mocks/database/config/pdo/pgsql.php | 37 - tests/mocks/database/config/pdo/sqlite.php | 37 - tests/mocks/database/config/pgsql.php | 34 - tests/mocks/database/config/sqlite.php | 34 - tests/mocks/database/db.php | 142 --- tests/mocks/database/db/driver.php | 40 - tests/mocks/database/drivers/mysql.php | 16 - tests/mocks/database/drivers/mysqli.php | 16 - tests/mocks/database/drivers/pdo.php | 15 - tests/mocks/database/drivers/postgre.php | 16 - tests/mocks/database/drivers/sqlite.php | 16 - tests/mocks/database/schema/skeleton.php | 155 --- tests/mocks/libraries/driver.php | 27 - tests/mocks/libraries/encrypt.php | 16 - tests/mocks/libraries/encryption.php | 39 - tests/mocks/libraries/session.php | 38 - tests/mocks/libraries/table.php | 16 - tests/mocks/uploads/ci_logo.gif | Bin 3270 -> 0 bytes tests/phpunit.xml | 24 - 82 files changed, 5895 insertions(+), 2123 deletions(-) create mode 100644 application/config/MY_constants.php create mode 100644 application/controllers/Admin.php create mode 100644 application/controllers/Apprentice.php create mode 100644 application/models/acquisition_level_model.php create mode 100644 application/models/acquisition_status_model.php create mode 100644 application/models/comment_model.php create mode 100644 application/models/competence_domain_model.php create mode 100644 application/models/course_plan_model.php create mode 100644 application/models/objective_model.php create mode 100644 application/models/operational_competence_model.php create mode 100644 application/models/trainer_apprentice_model.php create mode 100644 application/models/user_course_model.php create mode 100644 application/models/user_course_status_model.php create mode 100644 application/views/acquisition_status/view.php create mode 100644 application/views/admin/competence_domain/delete.php create mode 100644 application/views/admin/competence_domain/list.php create mode 100644 application/views/admin/competence_domain/save.php create mode 100644 application/views/admin/competence_domain/view.php create mode 100644 application/views/admin/course_plan/delete.php create mode 100644 application/views/admin/course_plan/list.php create mode 100644 application/views/admin/course_plan/save.php create mode 100644 application/views/admin/course_plan/view.php create mode 100644 application/views/admin/objective/delete.php create mode 100644 application/views/admin/objective/list.php create mode 100644 application/views/admin/objective/save.php create mode 100644 application/views/admin/objective/view.php create mode 100644 application/views/admin/operational_competence/delete.php create mode 100644 application/views/admin/operational_competence/list.php create mode 100644 application/views/admin/operational_competence/save.php create mode 100644 application/views/admin/operational_competence/view.php create mode 100644 application/views/apprentice/delete.php create mode 100644 application/views/apprentice/link.php create mode 100644 application/views/apprentice/list.php create mode 100644 application/views/apprentice/view.php create mode 100644 application/views/comment/save.php create mode 100644 application/views/user_course/delete.php create mode 100644 application/views/user_course/save.php create mode 100644 application/views/user_course/view.php create mode 100644 database/20200709_plafor_v01.sql create mode 100644 database/SAMPLE_DATAS.sql delete mode 100644 database/core.sql delete mode 100644 database/plafor_beginning_database.sql create mode 100644 documentation/Gantt.gan create mode 100644 documentation/database/plaforMCD.graphml create mode 100644 documentation/database/plaforMLD.graphml create mode 100644 documentation/pages/plaforNavigation.graphml delete mode 100644 tests/Bootstrap.php delete mode 100644 tests/README.md delete mode 100644 tests/mocks/autoloader.php delete mode 100644 tests/mocks/ci_testcase.php delete mode 100644 tests/mocks/ci_testconfig.php delete mode 100644 tests/mocks/core/common.php delete mode 100644 tests/mocks/core/input.php delete mode 100644 tests/mocks/core/security.php delete mode 100644 tests/mocks/core/uri.php delete mode 100644 tests/mocks/core/utf8.php delete mode 100644 tests/mocks/database/ci_test.sqlite delete mode 100644 tests/mocks/database/config/mysql.php delete mode 100644 tests/mocks/database/config/mysqli.php delete mode 100644 tests/mocks/database/config/pdo/mysql.php delete mode 100644 tests/mocks/database/config/pdo/pgsql.php delete mode 100644 tests/mocks/database/config/pdo/sqlite.php delete mode 100644 tests/mocks/database/config/pgsql.php delete mode 100644 tests/mocks/database/config/sqlite.php delete mode 100644 tests/mocks/database/db.php delete mode 100644 tests/mocks/database/db/driver.php delete mode 100644 tests/mocks/database/drivers/mysql.php delete mode 100644 tests/mocks/database/drivers/mysqli.php delete mode 100644 tests/mocks/database/drivers/pdo.php delete mode 100644 tests/mocks/database/drivers/postgre.php delete mode 100644 tests/mocks/database/drivers/sqlite.php delete mode 100644 tests/mocks/database/schema/skeleton.php delete mode 100644 tests/mocks/libraries/driver.php delete mode 100644 tests/mocks/libraries/encrypt.php delete mode 100644 tests/mocks/libraries/encryption.php delete mode 100644 tests/mocks/libraries/session.php delete mode 100644 tests/mocks/libraries/table.php delete mode 100644 tests/mocks/uploads/ci_logo.gif delete mode 100644 tests/phpunit.xml diff --git a/application/config/MY_constants.php b/application/config/MY_constants.php new file mode 100644 index 00000000..04ba8001 --- /dev/null +++ b/application/config/MY_constants.php @@ -0,0 +1,26 @@ + my_controller/index | my-controller/my-method -> my_controller/my_method */ -$route['default_controller'] = 'welcome'; +$route['default_controller'] = 'apprentice'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE; diff --git a/application/controllers/Admin.php b/application/controllers/Admin.php new file mode 100644 index 00000000..4d85037f --- /dev/null +++ b/application/controllers/Admin.php @@ -0,0 +1,600 @@ +access_level = $this->config->item('access_lvl_admin'); + + parent::__construct(); + + // Load required items + $this->load->library('form_validation')->model(['user/user_model','course_plan_model','user_course_model','user_course_status_model','competence_domain_model','operational_competence_model','objective_model']); + + // Assign form_validation CI instance to this + $this->form_validation->CI =& $this; + } + + /** + * Menu for admin privileges + */ + public function index() + { + $this->list_course_plan(); + } + + + /** + * Displays the list of course plans + * + * @return void + */ + public function list_course_plan($id_apprentice = null) + { + if($id_apprentice == null){ + $course_plans = $this->course_plan_model->get_all(); + }else{ + $userCourses = $this->user_course_model->get_many_by('fk_user',$id_apprentice); + + $coursesId = array(); + + foreach ($userCourses as $userCourse){ + $coursesId[] = $userCourse->fk_course_plan; + } + + $course_plans = $this->course_plan_model->get_many($coursesId); + } + + $output = array( + 'course_plans' => $course_plans + ); + + if(is_numeric($id_apprentice)){ + $output[] = ['course_plans' => $course_plans]; + } + + $this->display_view('admin/course_plan/list', $output); + } + + /** + * Adds or modify a course plan + * + * @param integer $course_plan_id = The id of the course plan to modify, leave blank to create a new one + * @return void + */ + public function save_course_plan($course_plan_id = 0) + { + if (count($_POST) > 0) { + $course_plan_id = $this->input->post('id'); + $rules = array( + array( + 'field' => 'formation_number', + 'label' => 'lang:field_course_plan_formation_number', + 'rules' => 'required|max_length['.FORMATION_NUMBER_MAX_LENGTH.']|numeric', + ), + array( + 'field' => 'official_name', + 'label' => 'lang:field_course_plan_name', + 'rules' => 'required|max_length['.OFFICIAL_NAME_MAX_LENGTH.']', + ),array( + 'field' => 'date_begin', + 'label' => 'lang:field_course_plan_official_name', + 'rules' => 'required|required', + ) + ); + $this->form_validation->set_rules($rules); + if ($this->form_validation->run()) { + $course_plan = array( + 'formation_number' => $this->input->post('formation_number'), + 'official_name' => $this->input->post('official_name'), + 'date_begin' => $this->input->post('date_begin') + ); + if ($course_plan_id > 0) { + $this->course_plan_model->update($course_plan_id, $course_plan); + } else { + $this->course_plan_model->insert($course_plan); + } + redirect('admin/list_course_plan'); + exit(); + } + } + + $output = array( + 'title' => $this->lang->line('title_course_plan_'.((bool)$course_plan_id ? 'update' : 'new')), + 'course_plan' => $this->course_plan_model->get($course_plan_id), + ); + + $this->display_view('admin/course_plan/save', $output); + } + + /** + * Deletes a course plan depending on $action + * + * @param integer $course_plan_id = ID of the course_plan to affect + * @param integer $action = Action to apply on the course plan: + * - 0 for displaying the confirmation + * - 1 for deactivating (soft delete) + * - 2 for deleting (hard delete) + * @return void + */ + public function delete_course_plan($course_plan_id, $action = 0) + { + $course_plan = $this->course_plan_model->with_all()->get($course_plan_id); + if (is_null($course_plan)) { + redirect('admin/list_course_plan'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'course_plan' => $course_plan, + 'title' => lang('title_course_plan_delete') + ); + $this->display_view('admin/course_plan/delete', $output); + break; + case 1: // Deactivate (soft delete) course plan + + foreach ($course_plan->competence_domains as $competence_domain){ + $competenceDomainIds[] = $competence_domain->id; + } + + $competenceDomainId = implode(',',$competenceDomainIds); + + $operational_competences = $this->operational_competence_model->with_all()->get_many_by('fk_competence_domain IN ('.$competenceDomainId.')'); + + foreach ($operational_competences as $operational_competence){ + foreach ($operational_competence->objectives as $objective){ + $objectiveIds[] = $objective->id; + } + } + $objectiveId = implode(',',$objectiveIds); + + $this->objective_model->delete_by('id IN ('.$objectiveId.')'); + $this->operational_competence_model->delete_by('fk_competence_domain IN ('.$competenceDomainId.')'); + $this->competence_domain_model->delete_by('fk_course_plan='.$course_plan_id); + $this->course_plan_model->delete($course_plan_id, FALSE); + redirect('admin/list_course_plan'); + break; + default: // Do nothing + redirect('admin/list_course_plan'); + } + } + + + /** + * Displays the list of course plans + * + * @return void + */ + public function list_competence_domain($id_course_plan = null) + { + if($id_course_plan == null){ + $competence_domains = $this->competence_domain_model->get_all(); + }else{ + $course_plan = $this->course_plan_model->get($id_course_plan); + $competence_domains = $this->competence_domain_model->get_many_by('fk_course_plan', $course_plan->id); + } + + $output = array( + 'competence_domains' => $competence_domains + ); + + if(is_numeric($id_course_plan)){ + $output[] = ['course_plan' => $course_plan]; + } + + $this->display_view('admin/competence_domain/list', $output); + } + + /** + * Adds or modify a course plan + * + * @param integer $competence_domain_id = The id of the course plan to modify, leave blank to create a new one + * @return void + */ + public function save_competence_domain($competence_domain_id = 0) + { + if (count($_POST) > 0) { + $competence_domain_id = $this->input->post('id'); + $rules = array( + array( + 'field' => 'symbol', + 'label' => 'lang:field_competence_domain_symbol', + 'rules' => 'required|max_length['.SYMBOL_MAX_LENGTH.']', + ), + array( + 'field' => 'name', + 'label' => 'lang:field_competence_domain_name', + 'rules' => 'required|max_length['.COMPETENCE_DOMAIN_NAME_MAX_LENGTH.']', + ) + ); + $this->form_validation->set_rules($rules); + if ($this->form_validation->run()) { + $competence_domain = array( + 'symbol' => $this->input->post('symbol'), + 'name' => $this->input->post('name'), + 'fk_course_plan' => $this->input->post('course_plan') + ); + if ($competence_domain_id > 0) { + $this->competence_domain_model->update($competence_domain_id, $competence_domain); + } else { + $this->competence_domain_model->insert($competence_domain); + } + redirect('admin/list_competence_domain'); + exit(); + } + } + + $output = array( + 'title' => $this->lang->line('title_competence_domain_'.((bool)$competence_domain_id ? 'update' : 'new')), + 'competence_domain' => $this->competence_domain_model->get($competence_domain_id), + 'course_plans' => $this->course_plan_model->dropdown('official_name') + ); + + $this->display_view('admin/competence_domain/save', $output); + } + + /** + * Deletes a course plan depending on $action + * + * @param integer $competence_domain_id = ID of the competence_domain to affect + * @param integer $action = Action to apply on the course plan: + * - 0 for displaying the confirmation + * - 1 for deactivating (soft delete) + * - 2 for deleting (hard delete) + * @return void + */ + public function delete_competence_domain($competence_domain_id, $action = 0) + { + $competence_domain = $this->competence_domain_model->with_all()->get($competence_domain_id); + if (is_null($competence_domain)) { + redirect('admin/competence_domain/list'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'competence_domain' => $competence_domain, + 'title' => lang('title_competence_domain_delete') + ); + $this->display_view('admin/competence_domain/delete', $output); + break; + case 1: // Deactivate (soft delete) competence domain + + foreach ($competence_domain->operational_competences as $operational_competence){ + $operationalCompetenceIds[] = $operational_competence->id; + } + + $operationalCompetenceId = implode(',',$operationalCompetenceIds); + + $this->objective_model->delete_by('fk_operational_competence IN ('.$operationalCompetenceId.')'); + $this->operational_competence_model->delete_by('fk_competence_domain='.$competence_domain_id); + $this->competence_domain_model->delete($competence_domain_id, FALSE); + redirect('admin/list_competence_domain'); + break; + default: // Do nothing + redirect('admin/list_competence_domain'); + } + } + + /** + * Displays the list of course plans + * + * @return void + */ + public function list_operational_competence($id_competence_domain = null) + { + if($id_competence_domain == null){ + $operational_competences = $this->operational_competence_model->get_all(); + }else{ + $competence_domain = $this->competence_domain_model->get($id_competence_domain); + $operational_competences = $this->operational_competence_model->get_many_by('fk_competence_domain',$competence_domain->id); + } + + $output = array( + 'operational_competences' => $operational_competences + ); + + if(is_numeric($id_competence_domain)){ + $output[] = ['competence_domain' => $competence_domain]; + } + + $this->display_view('admin/operational_competence/list', $output); + } + + /** + * Adds or modify a course plan + * + * @param integer $operational_competence_id = The id of the course plan to modify, leave blank to create a new one + * @return void + */ + public function save_operational_competence($operational_competence_id = 0) + { + if (count($_POST) > 0) { + $operational_competence_id = $this->input->post('id'); + $rules = array( + array( + 'field' => 'symbol', + 'label' => 'lang:field_operational_competence_symbol', + 'rules' => 'required|max_length['.SYMBOL_MAX_LENGTH.']', + ), + array( + 'field' => 'name', + 'label' => 'lang:field_operational_name', + 'rules' => 'required|max_length['.OPERATIONAL_COMPETENCE_NAME_MAX_LENGTH.']', + ), + array( + 'field' => 'methodologic', + 'label' => 'lang:field_operational_methodologic', + 'rules' => 'max_length['.SQL_TEXT_MAX_LENGTH.']', + ), + array( + 'field' => 'social', + 'label' => 'lang:field_operational_social', + 'rules' => 'max_length['.SQL_TEXT_MAX_LENGTH.']', + ), + array( + 'field' => 'personal', + 'label' => 'lang:field_operational_personal', + 'rules' => 'max_length['.SQL_TEXT_MAX_LENGTH.']', + ), + ); + $this->form_validation->set_rules($rules); + if ($this->form_validation->run()) { + $operational_competence = array( + 'symbol' => $this->input->post('symbol'), + 'name' => $this->input->post('name'), + 'methodologic' => $this->input->post('methodologic'), + 'social' => $this->input->post('social'), + 'personal' => $this->input->post('personal'), + 'fk_competence_domain' => $this->input->post('competence_domain') + ); + if ($operational_competence_id > 0) { + $this->operational_competence_model->update($operational_competence_id, $operational_competence); + } else { + $this->operational_competence_model->insert($operational_competence); + } + redirect('admin/list_operational_competence'); + exit(); + } + } + + $output = array( + 'title' => $this->lang->line('title_operational_competence_'.((bool)$operational_competence_id ? 'update' : 'new')), + 'operational_competence' => $this->operational_competence_model->get($operational_competence_id), + 'competence_domains' => $this->competence_domain_model->dropdown('name') + ); + + $this->display_view('admin/operational_competence/save', $output); + } + + /** + * Deletes a course plan depending on $action + * + * @param integer $operational_competence_id = ID of the operational_competence to affect + * @param integer $action = Action to apply on the course plan: + * - 0 for displaying the confirmation + * - 1 for deactivating (soft delete) + * - 2 for deleting (hard delete) + * @return void + */ + public function delete_operational_competence($operational_competence_id, $action = 0) + { + $operational_competence = $this->operational_competence_model->get($operational_competence_id); + if (is_null($operational_competence)) { + redirect('admin/operational_competence/list'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'operational_competence' => $operational_competence, + 'title' => lang('title_operational_competence_delete') + ); + $this->display_view('admin/operational_competence/delete', $output); + break; + case 1: // Deactivate (soft delete) operational competence + $this->objective_model->delete_by('fk_operational_competence='.$operational_competence_id); + $this->operational_competence_model->delete($operational_competence_id, FALSE); + redirect('admin/list_operational_competence'); + break; + default: // Do nothing + redirect('admin/list_operational_competence'); + } + } + + /** + * Deletes a trainer_apprentice link depending on $action + * + * @param integer $link_id = ID of the trainer_apprentice_link to affect + * @param integer $action = Action to apply on the trainer_apprentice link : + * - 0 for displaying the confirmation + * - 1 for deleting (hard delete) + * @return void + */ + public function delete_apprentice_link($link_id, $action = 0){ + $link = $this->trainer_apprentice_model->get($link_id); + $apprentice = $this->user_model->get($link->fk_apprentice); + $trainer = $this->user_model->get($link->fk_trainer); + if (is_null($link)) { + redirect('apprentice/list_apprentice'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'link' => $link, + 'apprentice' => $apprentice, + 'trainer' => $trainer, + 'title' => lang('title_apprentice_link_delete') + ); + $this->display_view('apprentice/delete', $output); + break; + case 1: // Delete apprentice link + $this->trainer_apprentice_model->delete($link_id, TRUE); + redirect('apprentice/list_apprentice/'.$apprentice->id); + default: // Do nothing + redirect('apprentice/list_apprentice/'.$apprentice->id); + } + } + + /** + * Deletes a user_course depending on $action + * + * @param integer $user_course_id = ID of the user_course to affect + * @param integer $action = Action to apply on the course plan: + * - 0 for displaying the confirmation + * - 1 for deleting (hard delete) + * @return void + */ + public function delete_user_course($user_course_id, $action = 0){ + $user_course = $this->user_course_model->get($user_course_id); + $course_plan = $this->course_plan_model->get($user_course->fk_course_plan); + $apprentice = $this->user_model->get($user_course->fk_user); + $status = $this->user_course_status_model->get($user_course->fk_status); + if (is_null($user_course)) { + redirect('admin/user_course/list'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'user_course' => $user_course, + 'course_plan' => $course_plan, + 'apprentice' => $apprentice, + 'status' => $status, + 'title' => lang('title_user_course_delete') + ); + $this->display_view('user_course/delete', $output); + break; + case 1: // Delete course plan + $this->user_course_model->delete($user_course_id, TRUE); + redirect('apprentice/list_apprentice'); + default: // Do nothing + redirect('apprentice/list_apprentice'); + } + } + + /** + * Displays the list of course plans + * + * @return void + */ + public function list_objective($id_operational_competence = null) + { + if($id_operational_competence == null){ + $objectives = $this->objective_model->get_all(); + }else{ + $operational_competence = $this->operational_competence_model->get($id_operational_competence); + $objectives = $this->objective_model->get_many_by('fk_operational_competence',$operational_competence->id); + } + + $output = array( + 'objectives' => $objectives + ); + + if(is_numeric($id_operational_competence)){ + $output[] = ['operational_competence',$operational_competence]; + } + + $this->display_view('admin/objective/list', $output); + } + + /** + * Adds or modify a course plan + * + * @param integer $objective_id = The id of the course plan to modify, leave blank to create a new one + * @return void + */ + public function save_objective($objective_id = 0) + { + if (count($_POST) > 0) { + $objective_id = $this->input->post('id'); + $rules = array( + array( + 'field' => 'symbol', + 'label' => 'lang:field_objective_symbol', + 'rules' => 'required|max_length['.SYMBOL_MAX_LENGTH.']', + ), + array( + 'field' => 'taxonomy', + 'label' => 'lang:field_objective_taxonomy', + 'rules' => 'required|max_length['.TAXONOMY_MAX_VALUE.']', + ),array( + 'field' => 'name', + 'label' => 'lang:field_objective_name', + 'rules' => 'required|max_length['.OBJECTIVE_NAME_MAX_LENGTH.']', + ) + ); + $this->form_validation->set_rules($rules); + if ($this->form_validation->run()) { + $objective = array( + 'symbol' => $this->input->post('symbol'), + 'taxonomy' => $this->input->post('taxonomy'), + 'name' => $this->input->post('name'), + 'fk_operational_competence' => $this->input->post('operational_competence') + ); + if ($objective_id > 0) { + $this->objective_model->update($objective_id, $objective); + } else { + $this->objective_model->insert($objective); + } + redirect('admin/list_objective'); + exit(); + } + } + + $output = array( + 'title' => $this->lang->line('title_objective_'.((bool)$objective_id ? 'update' : 'new')), + 'objective' => $this->objective_model->get($objective_id), + 'operational_competences' => $this->operational_competence_model->dropdown('name') + ); + + $this->display_view('admin/objective/save', $output); + } + + /** + * Deletes a course plan depending on $action + * + * @param integer $objective_id = ID of the objective to affect + * @param integer $action = Action to apply on the course plan: + * - 0 for displaying the confirmation + * - 1 for deactivating (soft delete) + * - 2 for deleting (hard delete) + * @return void + */ + public function delete_objective($objective_id, $action = 0) + { + $objective = $this->objective_model->get($objective_id); + if (is_null($objective)) { + redirect('admin/objective/list'); + } + + switch($action) { + case 0: // Display confirmation + $output = array( + 'objective' => $objective, + 'title' => lang('title_objective_delete') + ); + $this->display_view('admin/objective/delete', $output); + break; + case 1: // Deactivate (soft delete) objective + $this->objective_model->delete($objective_id, FALSE); + redirect('admin/list_objective'); + break; + default: // Do nothing + redirect('admin/list_objective'); + } + } +} diff --git a/application/controllers/Apprentice.php b/application/controllers/Apprentice.php new file mode 100644 index 00000000..bce1abf7 --- /dev/null +++ b/application/controllers/Apprentice.php @@ -0,0 +1,486 @@ +access_level = $this->config->item('access_lvl_apprentice'); + + parent::__construct(); + + // Load required items + $this->load->library('form_validation')-> + model(['user/user_model','user/user_type_model','trainer_apprentice_model', + 'course_plan_model','user_course_model','user_course_status_model', + 'competence_domain_model','operational_competence_model','objective_model' + ,'acquisition_status_model','acquisition_level_model','comment_model']); + + // Assign form_validation CI instance to this + $this->form_validation->CI =& $this; + } + + /** + * Menu for admin privileges + */ + public function index() + { + if(empty($_SESSION) || $_SESSION['logged_in'] != true){ + redirect(base_url('user/auth/login')); + }else if($_SESSION['user_access'] >= ACCESS_LVL_ADMIN){ + redirect(base_url('apprentice/list_apprentice')); + }else if($_SESSION['user_access'] == ACCESS_LVL_APPRENTICE){ + redirect(base_url('apprentice/view_apprentice/'.$_SESSION['user_id'])); + }else if($_SESSION['user_access'] == ACCESS_LVL_TRAINER){ + redirect(base_url('apprentice/list_apprentice/'.$_SESSION['user_id'])); + } + } + + /** + * Displays the list of apprentice + * + * @return void + */ + public function list_apprentice($trainer_id = null) + { + if(is_null($trainer_id) && $_SESSION['user_access'] < ACCESS_LVL_ADMIN){ + redirect("apprentice"); + } + + //if($trainer_id == null){ + $apprentice_level = $this->user_type_model->get_by('access_level', ACCESS_LVL_APPRENTICE); + $apprentices = $this->user_model->get_many_by('fk_user_type', $apprentice_level->id); + $coursesList = $this->course_plan_model->get_all(); + $courses = $this->user_course_model->get_all(); + //}else{ + // $apprentices = $this->user_model->get_many_by(array('id' => $trainer_id)); + + //} + + $output = array( + 'apprentices' => $apprentices, + 'coursesList' => $coursesList, + 'courses' => $courses + ); + + $this->display_view('apprentice/list', $output); + } + + /** + * Show details of the selected apprentice + * + * @param int (SQL PRIMARY KEY) $apprentice_id + * + */ + public function view_apprentice($apprentice_id = null) + { + $apprentice = $this->user_model->get($apprentice_id); + + if($apprentice->fk_user_type != $this->user_type_model->get_by('name',$this->lang->line('title_apprentice'))->id){ + redirect(base_url('apprentice/list_apprentice')); + exit(); + } + + $user_courses = $this->user_course_model->get_many_by('fk_user',$apprentice_id); + $user_course_status = $this->user_course_status_model->get_all(); + $course_plans = $this->course_plan_model->get_all(); + + $trainers = $this->user_model->get_many_by('fk_user_type',$this->user_type_model->get_by('name',$this->lang->line('title_trainer'))->id); + $links = $this->trainer_apprentice_model->get_many_by('fk_apprentice',$apprentice_id); + + $output = array( + 'apprentice' => $apprentice, + 'trainers' => $trainers, + 'links' => $links, + 'user_courses' => $user_courses, + 'user_course_status' => $user_course_status, + 'course_plans' => $course_plans + ); + + $this->display_view('apprentice/view',$output); + } + + /** + * Form to create a link between a apprentice and a course plan + * + * @param int (SQL PRIMARY KEY) $id_user_course + */ + public function save_user_course($id_apprentice = null,$id_user_course = 0){ + + $apprentice = $this->user_model->get($id_apprentice); + $user_course = $this->user_course_model->get($id_user_course); + + if($id_apprentice == null || $apprentice->fk_user_type != $this->user_type_model->get_by('name',$this->lang->line('title_apprentice'))->id){ + redirect(base_url('apprentice/list_apprentice')); + exit(); + } + + if(count($_POST) > 0){ + $rules = array( + array( + 'field' => 'course_plan', + 'label' => 'lang:course_plan', + 'rules' => 'required|numeric', + ), + array( + 'field' => 'status', + 'label' => 'lang:status', + 'rules' => 'required|numeric', + ), + array( + 'field' => 'date_begin', + 'label' => 'lang:field_user_course_date_begin', + 'rules' => 'required', + ), + /* + array( + 'field' => 'date_end', + 'label' => 'lang:field_user_course_date_end', + 'rules' => 'required', + ), + */ + ); + + $this->form_validation->set_rules($rules); + + if($this->form_validation->run()){ + $user_course = array( + 'fk_user' => $id_apprentice, + 'fk_course_plan' => $this->input->post('course_plan'), + 'fk_status' => $this->input->post('status'), + 'date_begin' => $this->input->post('date_begin'), + 'date_end' => $this->input->post('date_end'), + ); + + if($id_user_course > 0){ + echo $this->user_course_model->update($id_user_course, $user_course); + }else{ + $id_user_course = $this->user_course_model->insert($user_course); + + $course_plan = $this->course_plan_model->with_all()->get($user_course['fk_course_plan']); + + foreach ($course_plan->competence_domains as $competence_domain){ + $competenceDomainIds[] = $competence_domain->id; + } + + $operational_competences = $this->operational_competence_model->with_all()->get_many_by('fk_competence_domain',$competenceDomainIds); + + $objectiveIds = array(); + foreach ($operational_competences as $operational_competence){ + foreach ($operational_competence->objectives as $objective){ + $objectiveIds[] = $objective->id; + } + } + + foreach ($objectiveIds as $objectiveId){ + $acquisition_status = array( + 'fk_objective' => $objectiveId, + 'fk_user_course' => $id_user_course, + 'fk_acquisition_level' => 1 + ); + + $this->acquisition_status_model->insert($acquisition_status); + } + } + redirect('apprentice/view_apprentice/'.$id_apprentice); + exit(); + } + } + + $course_plans = $this->course_plan_model->dropdown('official_name'); + $status = $this->user_course_status_model->dropdown('name'); + + $output = array( + 'title' => $this->lang->line('title_course_plan_link'), + 'course_plans' => $course_plans, + 'user_course' => $user_course, + 'status' => $status, + 'apprentice' => $apprentice + ); + + $this->display_view('user_course/save',$output); + } + + /** + * Show a user course's details + * + * @param int (SQL PRIMARY KEY) $id_user_course + */ + public function view_user_course($id_user_course = null){ + $user_course = $this->user_course_model->get($id_user_course); + $apprentice = $this->user_model->get($user_course->fk_user); + $user_course_status = $this->user_course_status_model->get($user_course->fk_status); + $course_plan = $this->course_plan_model->get($user_course->fk_course_plan); + $trainers_apprentice = $this->trainer_apprentice_model->get_many_by('fk_apprentice',$apprentice->id); + $acquisition_status = $this->acquisition_status_model->with_all()->get_many_by('fk_user_course',$id_user_course); + $acquisition_levels = $this->acquisition_level_model->get_all(); + + if($user_course == null){ + redirect('apprentice/list_apprentice'); + exit(); + } + + $output = array( + 'user_course' => $user_course, + 'apprentice' => $apprentice, + 'user_course_status' => $user_course_status, + 'course_plan' => $course_plan, + 'trainers_apprentice' => $trainers_apprentice, + 'acquisition_status' => $acquisition_status, + 'acquisition_levels' => $acquisition_levels + ); + + $this->display_view('user_course/view',$output); + } + + /** + * Create a link between a apprentice and a trainer, or change the trainer + * linked on the selected trainer_apprentice SQL entry + * + * @param INT (SQL PRIMARY KEY) $id_apprentice + * @param INT (SQL PRIMARY KEY) $id_link + */ + public function save_apprentice_link($id_apprentice = null, $id_link = 0){ + + $apprentice = $this->user_model->get($id_apprentice); + + if($_SESSION['user_access'] < ACCESS_LVL_ADMIN + || $apprentice == null + || $apprentice->fk_user_type != $this->user_type_model-> + get_by('name',$this->lang->line('title_apprentice'))->id){ + redirect(base_url()); + exit(); + } + + // It seems that the MY_model dropdown method can't return a filtered result + // so here we get every users that are trainer, then we create a array + // with the matching constitution + + if(count($_POST) > 0){ + $id_apprentice = $this->input->post('id'); + $rules = array( + array( + 'field' => 'apprentice', + 'label' => 'field_apprentice_username', + 'rules' => 'required|numeric' + ), + array( + 'field' => 'trainer', + 'label' => 'field_trainer_link', + 'rules' => 'required|numeric' + ), + ); + + $this->form_validation->set_rules($rules); + + if($this->form_validation->run()){ + echo var_dump($_POST); + + $apprentice_link = array( + 'fk_trainer' => $this->input->post('trainer'), + 'fk_apprentice' => $this->input->post('apprentice'), + ); + + if($id_link > 0){ + echo $this->trainer_apprentice_model->update($id_apprentice,$apprentice_link); + }else{ + echo $this->trainer_apprentice_model->insert($apprentice_link); + } + + redirect('apprentice'); + exit(); + } + } + + $trainersRaw = $this->user_model->get_many_by('fk_user_type',$this->user_type_model->get_by('access_level',ACCESS_LVL_TRAINER)->id); + + $trainers = array(); + + foreach ($trainersRaw as $trainer){ + $trainers[$trainer->id] = $trainer->username; + } + + $link = $this->trainer_apprentice_model->get($id_link); + + $output = array( + 'apprentice' => $apprentice, + 'trainers' => $trainers, + 'link' => $link, + ); + + $this->display_view('apprentice/link',$output); + } + + /** + * Show details of the selected acquisition status + * + * @param int (SQL PRIMARY KEY) $acquisition_status_id + */ + public function view_acquisition_status($acquisition_status_id = null){ + $acquisition_status = $this->acquisition_status_model->with_all()->get($acquisition_status_id); + + if($acquisition_status == null){ + redirect(base_url('apprentice')); + exit(); + } + + $comments = $this->comment_model->get_many_by('fk_acquisition_status',$acquisition_status_id); + $trainers = $this->user_model->get_many_by('fk_user_type',$this->user_type_model->get_by('name',$this->lang->line('title_trainer'))->id); + $output = array( + 'acquisition_status' => $acquisition_status, + 'trainers' => $trainers, + 'comments' => $comments, + ); + + $this->display_view('acquisition_status/view',$output); + } + + public function add_comment($acquisition_status_id = null){ + $acquisition_status = $this->acquisition_status_model->get($acquisition_status_id); + + if($acquisition_status == null || $_SESSION['user_access'] != ACCESS_LVL_TRAINER){ + redirect(base_url('apprentice')); + exit(); + } + + if (count($_POST) > 0) { + $rules = array( + array( + 'field' => 'comment', + 'label' => 'lang:field_comment', + 'rules' => 'required|max_length['.SQL_TEXT_MAX_LENGTH.']', + ), + ); + $this->form_validation->set_rules($rules); + if ($this->form_validation->run()) { + $comment = array( + 'fk_trainer' => $_SESSION['user_id'], + 'fk_acquisition_status' => $acquisition_status_id, + 'comment' => $this->input->post('comment'), + 'date_creation' => date('Y-m-d H:i:s'), + ); + $this->comment_model->insert($comment); + + redirect(base_url('apprentice/view_acquisition_status/'.$acquisition_status->id)); + exit(); + } + } + + $output = array( + 'acquisition_status' => $acquisition_status, + ); + + $this->display_view('comment/save',$output); + } + + /** + * Show details of the selected course plan + * + * @param int (SQL PRIMARY KEY) $course_plan_id + * + */ + public function view_course_plan($course_plan_id = null) + { + $course_plan = $this->course_plan_model->with_all()->get($course_plan_id); + + if($course_plan == null){ + redirect(base_url('apprentice/list_course_plan')); + exit(); + } + + $output = array( + 'course_plan' => $course_plan, + ); + + $this->display_view('admin/course_plan/view',$output); + } + + /** + * Show details of the selected competence domain + * + * @param int (SQL PRIMARY KEY) $competence_domain_id + * + */ + public function view_competence_domain($competence_domain_id = null) + { + $competence_domain = $this->competence_domain_model->with_all()->get($competence_domain_id); + + if($competence_domain == null){ + redirect(base_url('admin/list_competence_domain')); + exit(); + } + + $output = array( + 'course_plan' => $competence_domain->course_plan, + 'competence_domain' => $competence_domain, + ); + + $this->display_view('admin/competence_domain/view',$output); + } + + /** + * Show details of the selected operational competence + * + * @param int (SQL PRIMARY KEY) $operational_competence_id + * + */ + public function view_operational_competence($operational_competence_id = null) + { + $operational_competence = $this->operational_competence_model->with_all()->get($operational_competence_id); + + if($operational_competence == null){ + redirect(base_url('admin/list_operational_competence')); + exit(); + } + + $competence_domain = $this->competence_domain_model->get($operational_competence->fk_competence_domain); + $course_plan = $this->course_plan_model->get($competence_domain->fk_course_plan); + + $output = array( + 'operational_competence' => $operational_competence, + 'competence_domain' => $operational_competence->competence_domain, + 'course_plan' => $course_plan + ); + + $this->display_view('admin/operational_competence/view',$output); + } + + /** + * Show details of the selected objective + * + * @param int (SQL PRIMARY KEY) $objective_id + * + */ + public function view_objective($objective_id = null) + { + $objective = $this->objective_model->with_all()->get($objective_id); + + if($objective == null){ + redirect(base_url('admin/list_objective')); + exit(); + } + + $operational_competence = $this->operational_competence_model->get($objective->fk_operational_competence); + $competence_domain = $this->competence_domain_model->get($operational_competence->fk_competence_domain); + $course_plan = $this->course_plan_model->get($competence_domain->fk_course_plan); + + $output = array( + 'objective' => $objective, + 'operational_competence' => $objective->operational_competence, + 'competence_domain' => $competence_domain, + 'course_plan' => $course_plan + ); + + $this->display_view('admin/objective/view',$output); + } +} diff --git a/application/language/french/MY_application_lang.php b/application/language/french/MY_application_lang.php index 6168579b..367bcea2 100644 --- a/application/language/french/MY_application_lang.php +++ b/application/language/french/MY_application_lang.php @@ -8,7 +8,7 @@ */ // Application name -$lang['app_title'] = 'Section informatique
Package de base'; +$lang['app_title'] = 'Plateforme
Suivie des formations'; // Page titles $lang['page_prefix'] = 'Pack base'; @@ -22,6 +22,8 @@ $lang['btn_add_m'] = 'Nouveau'; $lang['btn_add_f'] = 'Nouvelle'; $lang['btn_save'] = 'Enregistrer'; +$lang['btn_update'] = 'Modifier'; +$lang['btn_details'] = 'Détails'; $lang['btn_disable'] = 'Désactiver'; $lang['btn_reactivate'] = 'Réactiver'; $lang['btn_delete'] = 'Supprimer'; @@ -34,3 +36,201 @@ // Other texts $lang['yes'] = 'Oui'; $lang['no'] = 'Non'; + +// User levels +$lang['title_administrator'] = 'Administrateur'; +$lang['title_trainer'] = 'Formateur'; +$lang['title_apprentice'] = 'Apprenti'; + +// User Course Status +$lang['title_in_progress'] = 'En cours'; +$lang['title_successful'] = 'Réussi'; +$lang['title_failed'] = 'Échouée'; +$lang['title_suspended'] = 'Suspendue'; +$lang['title_abandoned'] = 'Abandonnée'; + +// Page titles +$lang['title_apprentice_list'] = 'Liste des apprentis'; +$lang['title_apprentice_update'] = 'Modifier l\'apprenti'; +$lang['title_apprentice_new'] = 'Ajouter un apprenti'; +$lang['title_apprentice_delete'] = 'Supprimer un apprenti'; +$lang['title_trainer_list'] = 'Liste des formateurs'; +$lang['title_trainer_update'] = 'Modifier le formateur'; +$lang['title_trainer_new'] = 'Ajouter un formateur'; +$lang['title_trainer_delete'] = 'Supprimer un formateur'; +$lang['title_course_plan_list'] = 'Liste des plans de formation'; +$lang['title_course_plan_update'] = 'Modifier le plan de formation'; +$lang['title_course_plan_new'] = 'Ajouter un plan de formation'; +$lang['title_course_plan_delete'] = 'Supprimer le plan de formation'; +$lang['title_competence_domain_list'] = 'Liste des domaines de compétence'; +$lang['title_competence_domain_update'] = 'Modifier le domaine de compétence'; +$lang['title_competence_domain_new'] = 'Ajouter un domaine de compétence'; +$lang['title_competence_domain_delete'] = 'Supprimer le domaine de compétence'; +$lang['title_operational_competence_list'] + = 'Liste des compétences opérationnelles'; +$lang['title_operational_competence_update'] + = 'Modifier la compétence opérationnelle'; +$lang['title_operational_competence_new'] + = 'Ajouter une compétence opérationnelle'; +$lang['title_operational_competence_delete'] + = 'Supprimer la compétence opérationnelle'; +$lang['title_objective_list'] = 'Liste des objectifs'; +$lang['title_objective_update'] = 'Modifier l\'objectif'; +$lang['title_objective_new'] = 'Ajouter un objectif'; +$lang['title_objective_delete'] = 'Supprimer l\'objectif'; +$lang['title_user_course_list'] = 'Liste des formations liées'; +$lang['title_user_course_update'] = 'Modifer la formation liée'; +$lang['title_user_course_new'] = 'Ajouter une formation liée'; +$lang['title_user_course_delete'] = 'Supprimer la formation liée'; +$lang['title_apprentice_link_list'] = 'Liste des formateurs liés'; +$lang['title_apprentice_link_update'] = 'Modifer le formateur lié'; +$lang['title_apprentice_link_new'] = 'Ajouter un formateur lié'; +$lang['title_apprentice_link_delete'] = 'Supprimer le formateur lié'; +$lang['title_acquisition_status_list'] = 'Liste des statuts d\'acquisition'; +$lang['title_acquisition_status_update'] + = 'Modifer le statut d\'acquisition'; +$lang['title_acquisition_status_new'] = 'Ajouter un statut d\'acquisition'; +$lang['title_acquisition_status_delete'] + = 'Supprimer le statut d\'acquisition'; +$lang['title_comment_list'] = 'Liste des commentaires'; +$lang['title_comment_update'] = 'Modifer le commentaire'; +$lang['title_comment_new'] = 'Ajouter un commentaire'; +$lang['title_comment_delete'] = 'Supprimer le commentaire'; + +// Details labels +$lang['details_apprentice'] = 'Détail de l\'apprenti'; +$lang['details_course_plan'] = 'Détail du plan de formation'; +$lang['details_competence_domain'] = 'Détail du domaine de compétence'; +$lang['details_operational_competence'] = 'Détail de la compétence opérationnelle'; +$lang['details_objective'] = 'Détail de l\'objectif'; +$lang['details_user_course'] = 'Détail de la formation de l\'apprenti'; +$lang['details_acquisition_status'] = 'Détail du statut d\'acquisition'; + +// Fields labels +$lang['field_apprentice_username'] = 'Nom de l\'apprenti'; +$lang['field_apprentice_date_creation'] = 'Date de création de l\'apprenti'; +$lang['field_followed_courses'] = 'Formation(s) suivie(s)'; +$lang['field_linked_competence_domains']= 'Domaines de compétences liés'; +$lang['field_linked_operational_competence'] + = 'Compétences opérationnelles liés'; +$lang['field_course_plan_formation_number'] + = 'Numéro du plan de formation'; +$lang['field_course_plans_formation_numbers'] + = 'Numéros des plans de formations'; +$lang['field_course_plan_official_name'] + = 'Nom du plan de formation'; +$lang['field_course_plans_official_names'] + = 'Noms des plans de formation'; +$lang['field_course_plans_official_names'] + = 'Noms des plans de formation'; +$lang['field_course_plan_date_begin'] = 'Date de création du plan de formation'; +$lang['field_course_plans_dates_begin'] = 'Dates de création des plans de formation'; +$lang['field_competence_domain_course_plan'] + = 'Plan de formation lié au domaine de compétence'; +$lang['field_competence_domain_symbol'] = 'Symbole du domaine de compétence'; +$lang['field_competence_domains_symbols'] + = 'Symbole des domaines de compétences'; +$lang['field_competence_domain_name'] = 'Nom du domaine de compétence'; +$lang['field_competence_domains_names'] = 'Noms des domaines de compétences'; +$lang['field_operational_competence_domain'] + = 'Domaine de compétence lié à la compétence opérationnelle'; +$lang['field_operational_competence_name'] + = 'Nom de la compétence opérationnelle'; +$lang['field_operational_competences_names'] + = 'Noms des compétences opérationnelles'; +$lang['field_operational_competence_symbol'] + = 'Symbole de la compétence opérationnelle'; +$lang['field_operational_competences_symbols'] + = 'Symboles des compétences opérationnelles'; +$lang['field_operational_competence_methodologic'] + = 'Compétence méthodologique'; +$lang['field_operational_competence_social'] + = 'Compétence sociale'; +$lang['field_operational_competence_personal'] + = 'Compétence personnelle'; +$lang['field_objective_operational_competence'] + = 'Compétence opérationnelle liée à l\'objectif'; +$lang['field_objective_symbol'] = 'Symboles de l\' objectif'; +$lang['field_objectives_symbols'] = 'Symbole des objectif'; +$lang['field_objective_taxonomy'] = 'Taxonomie de l\'objectif'; +$lang['field_objectives_taxonomies'] = 'Taxonomie des objectifs'; +$lang['field_objective_name'] = 'Nom de l\'objectif'; +$lang['field_objectives_names'] = 'Nom des objectifs'; +$lang['field_user_course_date_begin'] = 'Date du début de la formation'; +$lang['field_user_course_date_end'] = 'Date de fin de la formation'; +$lang['field_user_course_course_plan'] = 'Formation'; +$lang['field_user_course_status'] = 'Statut de la formation'; +$lang['field_user_course_objectives_status'] + = 'Statuts d\'acquisition des objectifs'; +$lang['field_comment'] = 'Commentaire'; +$lang['field_comment_creater'] = 'Créateur du commentaire'; +$lang['field_comment_date_creation'] = 'Date de création du commentaire'; +$lang['field_trainer_link'] = 'Formateur(s) lié(s)'; +$lang['field_trainers_name'] = 'Nom des formateurs'; +$lang['field_acquisition_level'] = 'Niveau d\'acquisition'; +$lang['field_id'] = 'Identifiant'; +$lang['field_symbol'] = 'Symbole'; +$lang['field_taxonomy'] = 'Taxonomie'; +$lang['field_linked_comments'] = 'Commentaires liés'; + +// Admin texts +$lang['admin_apprentices'] = 'Apprentis'; +$lang['admin_course_plans'] = 'Plans de formations'; +$lang['admin_competence_domains'] = 'Domaines de compétences'; +$lang['admin_objectives'] = 'Objectifs'; +$lang['admin_operational_competences'] = 'Compétences opérationnelles'; + +// Error messages +$lang['msg_err_course_plan_not_exist'] = 'Le plan de formation sélectionné n\'existe pas'; +$lang['msg_err_course_plan_not_unique'] = 'Ce plan de formation est déjà utilisé, merci d\'en choisir un autre'; + +// Other texts +$lang['course_plan'] = 'Plan de formation'; +$lang['course_plan_delete'] = 'Supprimer ce plan de formation'; +$lang['course_plan_delete_explanation'] = 'Toutes les informations concernant ce plan de formation (domaines de compétences, compétences oppérationnelles et objectifs) seront supprimées.'; +$lang['course_plan_disable'] = 'Désactiver ce plan de formation'; +$lang['course_plan_disable_explanation'] + = 'Toutes les informations concernant ce plan de formation (domaines de compétences, compétences oppérationnelles et objectifs) seront désactivées.'; +$lang['competence_domain'] = 'Domaine de compétence'; +$lang['competence_domain_delete'] = 'Supprimer ce domaine de compétence'; +$lang['competence_domain_delete_explanation'] + = 'Toutes les informations concernant ce domaine de compétence (symbole, nom, compétences oppérationnelles et objectifs) seront supprimées.'; +$lang['competence_domain_disable'] = 'Désactiver ce domaine de compétence'; +$lang['competence_domain_disable_explanation'] + = 'Toutes les informations concernant ce domaine de compétence (symbole, nom, compétences oppérationnelles et objectifs) seront désactivées.'; +$lang['operational_competence'] = 'Compétence opérationnelle'; +$lang['operational_competence_delete'] = 'Supprimer cette compétence opérationnelle'; +$lang['operational_competence_delete_explanation'] + = 'Toutes les informations concernant cette compétence opérationnelle (nom, symbole, compétences, objectifs) seront supprimées.'; +$lang['operational_competence_disable'] = 'Désactiver cette compétence opérationnelle'; +$lang['operational_competence_disable_explanation'] + = 'Toutes les informations concernant cette compétence opérationnelle (nom, symbole, compétences, objectifs) seront désactivées.'; +$lang['objective'] = 'Objectif'; +$lang['objective_delete'] = 'Supprimer cet objectif'; +$lang['objective_delete_explanation'] = 'Toutes les informations concernant cet objectif (symbole, taxonomie, nom) seront supprimées.'; +$lang['objective_disable'] = 'Désactiver cet objectif'; +$lang['objective_disable_explanation'] = 'Toutes les informations concernant cet objectif (symbole, taxonomie, nom) seront désactivées.'; +$lang['user_course'] = 'Formation liée'; +$lang['user_course_delete'] = 'Supprimer cette formation liée'; +$lang['user_course_delete_explanation'] = 'Toutes les informations concernant cette formation liée seront supprimées.'; +$lang['user_course_disable'] = 'Désactiver cette formation liée'; +$lang['user_course_disable_explanation'] + = 'Toutes les informations concernant cette formation liée seront désactivées.'; +$lang['apprentice_link'] = 'Apprenti et formateur lié'; +$lang['apprentice_link_delete'] = 'Supprimer le lien entre cette apprenti et ce formateur'; +$lang['apprentice_link_delete_explanation'] + = 'Toutes les informations concernant le lien entre cette apprenti et ce formateur seront supprimées.'; +$lang['apprentice_link_disable'] = 'Désactiver le lien entre cette apprenti et ce formateur'; +$lang['apprentice_link_disable_explanation'] + = 'Toutes les informations concernant le lien entre cette apprenti et ce formateur seront désactivées.'; +$lang['acquisition_status'] = 'Statut d\'acquisition'; +$lang['acquisition_status_delete'] = 'Supprimer le statut d\'acquisition'; +$lang['acquisition_status_delete_explanation'] + = 'Toutes les informations concernant le statut d\'acquisition seront supprimées.'; +$lang['acquisition_status_disable'] = 'Désactiver le statut d\'acquisition'; +$lang['acquisition_status_disable_explanation'] + = 'Toutes les informations concernant le statut d\'acquisition seront désactivées.'; +$lang['apprentice'] = 'Apprenti'; +$lang['trainer'] = 'Formateur'; +$lang['course_status'] = 'Status des formations'; +$lang['status'] = 'Statut de la formation'; \ No newline at end of file diff --git a/application/models/acquisition_level_model.php b/application/models/acquisition_level_model.php new file mode 100644 index 00000000..a8a61918 --- /dev/null +++ b/application/models/acquisition_level_model.php @@ -0,0 +1,26 @@ + ['primary_key' => 'fk_objective', + 'model' => 'objective_model'], + 'user_course'=> ['primary_key' => 'fk_user_course', + 'model' => 'user_course_model'], + 'acquisition_level' => ['primary_key' => 'fk_acquisition_level', + 'model' => 'acquisition_level_model'] + ]; + /* protected $soft_delete = TRUE; */ + /* protected $soft_delete_key = 'archive'; */ + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/comment_model.php b/application/models/comment_model.php new file mode 100644 index 00000000..cd38c7a5 --- /dev/null +++ b/application/models/comment_model.php @@ -0,0 +1,30 @@ + ['primary_key' => 'fk_trainer_apprentice', + 'model' => 'trainer_apprentice_model'], + 'acquisition_status' => ['primary_key' => 'fk_acquisition_status', + 'model' => 'acquisition_status_model'] + ]; + /* protected $soft_delete = TRUE; */ + /* protected $soft_delete_key = 'archive'; */ + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/competence_domain_model.php b/application/models/competence_domain_model.php new file mode 100644 index 00000000..84606695 --- /dev/null +++ b/application/models/competence_domain_model.php @@ -0,0 +1,30 @@ + ['primary_key' => 'fk_course_plan', + 'model' => 'course_plan_model']]; + protected $has_many = ['operational_competences' => ['primary_key' => 'fk_competence_domain', + 'model' => 'Operational_competence_model']]; + protected $soft_delete = TRUE; + protected $soft_delete_key = 'archive'; + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/course_plan_model.php b/application/models/course_plan_model.php new file mode 100644 index 00000000..bdfadee2 --- /dev/null +++ b/application/models/course_plan_model.php @@ -0,0 +1,27 @@ + ['primary_key' => 'fk_course_plan', + 'model' => 'Competence_domain_model']]; + protected $soft_delete = TRUE; + protected $soft_delete_key = 'archive'; + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/objective_model.php b/application/models/objective_model.php new file mode 100644 index 00000000..ba9f6a68 --- /dev/null +++ b/application/models/objective_model.php @@ -0,0 +1,28 @@ + ['primary_key' => 'fk_operational_competence', + 'model' => 'operational_competence_model']]; + protected $soft_delete = TRUE; + protected $soft_delete_key = 'archive'; + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/operational_competence_model.php b/application/models/operational_competence_model.php new file mode 100644 index 00000000..5be3a0c1 --- /dev/null +++ b/application/models/operational_competence_model.php @@ -0,0 +1,30 @@ + ['primary_key' => 'fk_competence_domain', + 'model' => 'competence_domain_model']]; + protected $has_many = ['objectives' => ['primary_key' => 'fk_operational_competence', + 'model' => 'Objective_model']]; + protected $soft_delete = TRUE; + protected $soft_delete_key = 'archive'; + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/trainer_apprentice_model.php b/application/models/trainer_apprentice_model.php new file mode 100644 index 00000000..e616f990 --- /dev/null +++ b/application/models/trainer_apprentice_model.php @@ -0,0 +1,30 @@ + ['primary_key' => 'fk_apprentice', + 'model' => 'user_model'], + 'course_plan' => ['primary_key' => 'fk_trainer', + 'model' => 'course_plan_model'] + ]; + /* protected $soft_delete = TRUE; */ + /* protected $soft_delete_key = 'archive'; */ + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/user_course_model.php b/application/models/user_course_model.php new file mode 100644 index 00000000..de49b647 --- /dev/null +++ b/application/models/user_course_model.php @@ -0,0 +1,33 @@ + ['primary_key' => 'fk_user', + 'model' => 'user_model'], + 'course_plan' => ['primary_key' => 'fk_course_plan', + 'model' => 'course_plan_model'], + 'status' => ['primary_key' => 'fk_status', + 'model' => 'acquisition_status_model'] + ]; + /* protected $has_many = ['acquistion_status' => ['primary_key' => 'fk_user_course', + 'model' => 'acquisition_status_model']]; */ + + /** + * Constructor + */ + public function __construct() + { + parent::__construct(); + } +} \ No newline at end of file diff --git a/application/models/user_course_status_model.php b/application/models/user_course_status_model.php new file mode 100644 index 00000000..048f9157 --- /dev/null +++ b/application/models/user_course_status_model.php @@ -0,0 +1,26 @@ + +
+
+

lang->line('details_acquisition_status')?>

+
+

lang->line('field_objective_symbol')?>

+ objective->symbol?> +
+

lang->line('field_objective_name')?>

+ objective->name?> +
+

lang->line('field_objective_taxonomy')?>

+ objective->taxonomy?> +
+
+

lang->line('field_acquisition_level')?>

+ acquisition_level->name?> +
+
+
+
+

lang->line('field_linked_comments')?>

+
+ lang->line('title_comment_new'); ?> +
+ + + + + + + + + + + + + id == $comment->fk_trainer): + ?> + + + + + + +
lang->line('field_comment'); ?>lang->line('field_comment_creater'); ?>lang->line('field_comment_date_creation'); ?>
comment; ?>username; ?>date_creation; ?>
+
+
+ +
\ No newline at end of file diff --git a/application/views/admin/competence_domain/delete.php b/application/views/admin/competence_domain/delete.php new file mode 100644 index 00000000..7e1eea2a --- /dev/null +++ b/application/views/admin/competence_domain/delete.php @@ -0,0 +1,23 @@ + +
+
+
+
+
+

name.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/admin/competence_domain/list.php b/application/views/admin/competence_domain/list.php new file mode 100644 index 00000000..89e44719 --- /dev/null +++ b/application/views/admin/competence_domain/list.php @@ -0,0 +1,76 @@ + +
+
+ +
+
+
+

+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
symbol?> name; ?>×
+
+
+ + diff --git a/application/views/admin/competence_domain/save.php b/application/views/admin/competence_domain/save.php new file mode 100644 index 00000000..2cdef01f --- /dev/null +++ b/application/views/admin/competence_domain/save.php @@ -0,0 +1,67 @@ + + 'symbol', + 'value' => $competence_domain_symbol ?? $competence_domain->symbol ?? '', + 'max' => SYMBOL_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'competence_domain_symbol' + ); + + $data_name = array( + 'name' => 'name', + 'value' => $competence_domain_name ?? $competence_domain->name ?? '', + 'max' => COMPETENCE_DOMAIN_NAME_MAX_LENGTH, + 'class' => 'form-control', 'id' => 'competence_domain_name' + ); +?> +
+ +
+
+

+
+
+ + + 'competence_domain_form', + 'name' => 'competence_domain_form' + ); + echo form_open('admin/save_competence_domain', $attributes, [ + 'id' => $competence_domain->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> +
+ fk_course_plan ?? '','id="course_plan" class="form-control"')?> +
+
+ 'form-label']); ?> + + 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/admin/competence_domain/view.php b/application/views/admin/competence_domain/view.php new file mode 100644 index 00000000..807bd6c7 --- /dev/null +++ b/application/views/admin/competence_domain/view.php @@ -0,0 +1,50 @@ +
+
+
+

lang->line('details_course_plan')?>

+
+
+

lang->line('field_course_plan_formation_number')?>

+ formation_number?> +
+
+

lang->line('field_course_plan_official_name')?>

+ official_name?> +
+
+
+
+

lang->line('details_competence_domain')?>

+
+
+

lang->line('field_competence_domain_symbol')?>

+

symbol?>

+
+
+

lang->line('field_competence_domain_name')?>

+

name?>

+
+
+
+
+

lang->line('field_linked_operational_competences')?>

+
+
+ + + + + + + + operational_competences as $operational_competence){ + ?> + + + +
lang->line('field_operational_competences_symbols')?>lang->line('field_operational_competences_names')?>
symbol?>name?>
+
+
+
\ No newline at end of file diff --git a/application/views/admin/course_plan/delete.php b/application/views/admin/course_plan/delete.php new file mode 100644 index 00000000..805fca89 --- /dev/null +++ b/application/views/admin/course_plan/delete.php @@ -0,0 +1,23 @@ + +
+
+
+
+
+

official_name.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/admin/course_plan/list.php b/application/views/admin/course_plan/list.php new file mode 100644 index 00000000..bec6154a --- /dev/null +++ b/application/views/admin/course_plan/list.php @@ -0,0 +1,76 @@ + +
+
+ +
+
+
+

+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
formation_number?>official_name; ?>×
+
+
+ + diff --git a/application/views/admin/course_plan/save.php b/application/views/admin/course_plan/save.php new file mode 100644 index 00000000..5f46aae2 --- /dev/null +++ b/application/views/admin/course_plan/save.php @@ -0,0 +1,73 @@ + + 'formation_number', + 'value' => $course_plan_formation_number ?? $course_plan->formation_number ?? '', + 'type' => 'number', + 'max' => str_repeat('9',FORMATION_NUMBER_MAX_LENGTH), + 'class' => 'form-control', + 'id' => 'course_plan_formation_number' + ); + + $data_official_name = array( + 'name' => 'official_name', + 'value' => $course_plan_official_name ?? $course_plan->official_name ?? '', + 'maxlength' => OFFICIAL_NAME_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'course_plan_official_name' + ); + + $data_date_begin = array( + 'name' => 'date_begin', + 'value' => $course_plan_date_begin ?? $course_plan->date_begin ?? '', + 'type' => 'date', + 'class' => 'form-control', 'id' => 'course_plan_date_begin' + ); +?> +
+ +
+
+

+
+
+ + + 'course_plan_form', + 'name' => 'course_plan_form' + ); + echo form_open('admin/save_course_plan', $attributes, [ + 'id' => $course_plan->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> + + 'form-label']); ?> + + 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/admin/course_plan/view.php b/application/views/admin/course_plan/view.php new file mode 100644 index 00000000..ec3e7997 --- /dev/null +++ b/application/views/admin/course_plan/view.php @@ -0,0 +1,41 @@ +
+
+
+

lang->line('details_course_plan')?>

+
+
+

lang->line('field_course_plan_formation_number')?>

+

formation_number?>

+
+
+

lang->line('field_course_plan_official_name')?>

+

official_name?>

+
+
+

lang->line('field_course_plan_date_begin')?>

+

date_begin?>

+
+
+
+
+

lang->line('field_linked_competence_domains')?>

+
+
+ + + + + + + + competence_domains as $competence_domain){ + ?> + + + +
lang->line('field_competence_domains_symbols')?>lang->line('field_competence_domains_names')?>
symbol?>name?>
+
+
+
\ No newline at end of file diff --git a/application/views/admin/objective/delete.php b/application/views/admin/objective/delete.php new file mode 100644 index 00000000..fb5882c4 --- /dev/null +++ b/application/views/admin/objective/delete.php @@ -0,0 +1,23 @@ + +
+
+
+
+
+

name.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/admin/objective/list.php b/application/views/admin/objective/list.php new file mode 100644 index 00000000..2fc3e652 --- /dev/null +++ b/application/views/admin/objective/list.php @@ -0,0 +1,76 @@ + +
+
+ +
+
+
+

+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
symbol?> name; ?>×
+
+
+ + diff --git a/application/views/admin/objective/save.php b/application/views/admin/objective/save.php new file mode 100644 index 00000000..b3391e9f --- /dev/null +++ b/application/views/admin/objective/save.php @@ -0,0 +1,79 @@ + + 'symbol', + 'value' => $objective_symbol ?? $objective->symbol ?? '', + 'max' => SYMBOL_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'objective_symbol' + ); + + $data_taxonomy = array( + 'name' => 'taxonomy', + 'value' => $objective_taxonomy ?? $objective->taxonomy ?? '', + 'type' => 'number', + 'max' => TAXONOMY_MAX_VALUE, + 'class' => 'form-control', + 'id' => 'objective_taxonomy' + ); + + $data_name = array( + 'name' => 'name', + 'value' => $objective_name ?? $objective->name ?? '', + 'max' => OBJECTIVE_NAME_MAX_LENGTH, + 'type' => 'text', + 'class' => 'form-control', 'id' => 'objective_name' + ); +?> +
+ +
+
+

+
+
+ + + 'objective_form', + 'name' => 'objective_form' + ); + echo form_open('admin/save_objective', $attributes, [ + 'id' => $objective->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> +
+ fk_operational_competence ?? '','id="operational_competence" class="form-control"')?> +
+
+ 'form-label']); ?> + + 'form-label']); ?> + + 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/admin/objective/view.php b/application/views/admin/objective/view.php new file mode 100644 index 00000000..dd2b2e1b --- /dev/null +++ b/application/views/admin/objective/view.php @@ -0,0 +1,70 @@ +
+
+
+

lang->line('details_course_plan')?>

+
+
+

lang->line('field_course_plan_formation_number')?>

+ formation_number?> +
+
+

lang->line('field_course_plan_official_name')?>

+ official_name?> +
+
+
+
+

lang->line('details_competence_domain')?>

+
+
+

lang->line('field_competence_domain_symbol')?>

+ symbol?> +
+
+

lang->line('field_competence_domain_name')?>

+ name?> +
+
+
+
+

lang->line('details_operational_competence')?>

+
+
+

lang->line('field_operational_competence_symbol')?>

+ symbol?> +
+
+

lang->line('field_operational_competence_name')?>

+ name?> +
+
+

lang->line('field_operational_competence_methodologic')?>

+ methodologic?> +
+
+

lang->line('field_operational_competence_social')?>

+ social?> +
+
+

lang->line('field_operational_competence_personal')?>

+ personal?> +
+
+
+
+

lang->line('details_objective')?>

+
+
+

lang->line('field_objective_symbol')?>

+

symbol?>

+
+
+

lang->line('field_objective_taxonomy')?>

+

taxonomy?>

+
+
+

lang->line('field_objective_name')?>

+

name?>

+
+
+
\ No newline at end of file diff --git a/application/views/admin/operational_competence/delete.php b/application/views/admin/operational_competence/delete.php new file mode 100644 index 00000000..d9d38218 --- /dev/null +++ b/application/views/admin/operational_competence/delete.php @@ -0,0 +1,23 @@ + +
+
+
+
+
+

name.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/admin/operational_competence/list.php b/application/views/admin/operational_competence/list.php new file mode 100644 index 00000000..24f96332 --- /dev/null +++ b/application/views/admin/operational_competence/list.php @@ -0,0 +1,76 @@ + +
+
+ +
+
+
+

+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
symbol?> name; ?>×
+
+
+ + diff --git a/application/views/admin/operational_competence/save.php b/application/views/admin/operational_competence/save.php new file mode 100644 index 00000000..f05c897d --- /dev/null +++ b/application/views/admin/operational_competence/save.php @@ -0,0 +1,98 @@ + + 'symbol', + 'value' => $operational_competence_symbol ?? $operational_competence->symbol ?? '', + 'max' => SYMBOL_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'operational_competence_symbol' + ); + + $data_name = array( + 'name' => 'name', + 'value' => $operational_competence_name ?? $operational_competence->name ?? '', + 'max' => OPERATIONAL_COMPETENCE_NAME_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'operational_competence_name' + ); + + $data_methodologic = array( + 'name' => 'methodologic', + 'value' => $operational_competence_methodologic ?? $operational_competence->methodologic ?? '', + 'max' => SQL_TEXT_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'operational_competence_methodologic' + ); + + $data_social = array( + 'name' => 'social', + 'value' => $operational_competence_social ?? $operational_competence->social ?? '', + 'max' => SQL_TEXT_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'operational_competence_social' + ); + + $data_personal = array( + 'name' => 'personal', + 'value' => $operational_competence_personal ?? $operational_competence->personal ?? '', + 'max' => SQL_TEXT_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'operational_competence_personal' + ); +?> +
+ +
+
+

+
+
+ + + 'operational_competence_form', + 'name' => 'operational_competence_form' + ); + echo form_open('admin/save_operational_competence', $attributes, [ + 'id' => $operational_competence->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> +
+ fk_competence_domain ?? '','id="competence_domain" class="form-control"')?> +
+
+ 'form-label']); ?> + + 'form-label']); ?> + + 'form-label']); ?> + + 'form-label']); ?> + + 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/admin/operational_competence/view.php b/application/views/admin/operational_competence/view.php new file mode 100644 index 00000000..e0fdea22 --- /dev/null +++ b/application/views/admin/operational_competence/view.php @@ -0,0 +1,77 @@ +
+
+
+

lang->line('details_course_plan')?>

+
+
+

lang->line('field_course_plan_formation_number')?>

+ formation_number?> +
+
+

lang->line('field_course_plan_official_name')?>

+ official_name?> +
+
+
+
+

lang->line('details_competence_domain')?>

+
+
+

lang->line('field_competence_domain_symbol')?>

+ symbol?> +
+
+

lang->line('field_competence_domain_name')?>

+ name?> +
+
+
+
+

lang->line('details_operational_competence')?>

+
+
+

lang->line('field_operational_competence_symbol')?>

+

symbol?>

+
+
+

lang->line('field_operational_competence_name')?>

+

name?>

+
+
+

lang->line('field_operational_competence_methodologic')?>

+

methodologic?>

+
+
+

lang->line('field_operational_competence_social')?>

+

social?>

+
+
+

lang->line('field_operational_competence_personal')?>

+

personal?>

+
+
+
+
+

lang->line('field_linked_objectives')?>

+
+
+ + + + + + + + + objectives as $objective){ + ?> + + + + +
lang->line('field_objectives_symbols')?>lang->line('field_objectives_taxonomies')?>lang->line('field_objectives_names')?>
symbol?>taxonomy?>name?>
+
+
+
\ No newline at end of file diff --git a/application/views/apprentice/delete.php b/application/views/apprentice/delete.php new file mode 100644 index 00000000..fd873a6a --- /dev/null +++ b/application/views/apprentice/delete.php @@ -0,0 +1,25 @@ + +
+
+
+
+
+

+

username.'"' ?>

+

username.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/apprentice/link.php b/application/views/apprentice/link.php new file mode 100644 index 00000000..e353d192 --- /dev/null +++ b/application/views/apprentice/link.php @@ -0,0 +1,57 @@ + + 'apprentice', + 'value' => $apprentice_id ?? $apprentice->id ?? '', + 'class' => 'form-control', + 'type' => 'hidden', + 'id' => 'apprentice' + ); +?> +
+ +
+
+

+
+
+ + + 'apprentice_link_form', + 'name' => 'apprentice_link_form' + ); + echo form_open('apprentice/save_apprentice_link/'.$apprentice->id, $attributes, [ + 'id' => $apprentice->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> + +

username?>

+
+
+ 'form-label']); ?> +
+ id ?? '','id="trainer" class="form-control"')?> +
+ +
+
+ + 'btn btn-primary']); ?> +
+
+ +
diff --git a/application/views/apprentice/list.php b/application/views/apprentice/list.php new file mode 100644 index 00000000..865a7268 --- /dev/null +++ b/application/views/apprentice/list.php @@ -0,0 +1,72 @@ + +
+
+ +
+
+
+

+
+
+ +
+ + diff --git a/application/views/apprentice/view.php b/application/views/apprentice/view.php new file mode 100644 index 00000000..ac42d712 --- /dev/null +++ b/application/views/apprentice/view.php @@ -0,0 +1,76 @@ +
+
+
+

lang->line('details_apprentice')?>

+
+
+

lang->line('field_apprentice_username')?>

+

username?>

+
+
+

lang->line('field_apprentice_date_creation')?>

+

date_creation?>

+
+
+
+
+

lang->line('field_trainer_link')?>

+ lang->line('title_apprentice_link_new') ?> +
+
+ + + + + + + + + + + + fk_trainer == $trainer->id): ?> + + + + + + +
lang->line('field_trainers_name') ?>
username; ?> + + lang->line('title_apprentice_link_update'); ?>lang->line('title_apprentice_link_delete');?>
+
+
+
+
+

lang->line('field_followed_courses')?>

+ lang->line('title_user_course_new') ?> +
+
+ + + + + + + + + + + + + +
lang->line('field_course_plans_formation_numbers')?>lang->line('field_course_plans_official_names')?>lang->line('course_status')?>
fk_course_plan-1]->formation_number?>fk_course_plan-1]->official_name?>fk_status-1]->name?>
+
+
+
\ No newline at end of file diff --git a/application/views/comment/save.php b/application/views/comment/save.php new file mode 100644 index 00000000..62b5bfa0 --- /dev/null +++ b/application/views/comment/save.php @@ -0,0 +1,50 @@ + + 'comment', + 'max' => SQL_TEXT_MAX_LENGTH, + 'class' => 'form-control', + 'id' => 'comment' + ); +?> +
+ +
+
+

+
+
+ + + 'comment_form', + 'name' => 'comment_form' + ); + echo form_open('apprentice/add_comment/'.$acquisition_status->id); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/user_course/delete.php b/application/views/user_course/delete.php new file mode 100644 index 00000000..25982991 --- /dev/null +++ b/application/views/user_course/delete.php @@ -0,0 +1,25 @@ + +
+
+
+
+
+

username.'"' ?>

+

official_name.'"' ?>

+

name.'"' ?>

+

+
+
+ +
+
+
+
diff --git a/application/views/user_course/save.php b/application/views/user_course/save.php new file mode 100644 index 00000000..c6d2de17 --- /dev/null +++ b/application/views/user_course/save.php @@ -0,0 +1,75 @@ + + 'date_begin', + 'value' => $user_course_date_begin ?? $user_course->date_begin ?? date("Y-m-d"), + 'class' => 'form-control', + 'type' => 'date', + 'id' => 'user_course_date_begin' + ); + + $data_date_end = array( + 'name' => 'date_end', + 'value' => $user_course_date_end ?? $user_course->date_end ?? '', + 'class' => 'form-control', 'id' => 'competence_domain_name', + 'type' => 'date', + 'id' => 'user_course_date_begin' + ); +?> +
+ +
+
+

+
+
+ + + 'user_course_form', + 'name' => 'user_course_form' + ); + echo form_open('apprentice/save_user_course/'.$apprentice->id, $attributes, [ + 'id' => $apprentice->id ?? 0 + ]); + ?> + + + ', '
'); ?> + + +
+
+ 'form-label']); ?> +
+ +
+
+ 'form-label']); ?> +
+ fk_status ?? '','id="status" class="form-control"')?> +
+
+ 'form-label']); ?> + +
+
+ 'form-label']); ?> + +
+
+ + +
+
+ + 'btn btn-primary']); ?> +
+
+ + diff --git a/application/views/user_course/view.php b/application/views/user_course/view.php new file mode 100644 index 00000000..1ed8720e --- /dev/null +++ b/application/views/user_course/view.php @@ -0,0 +1,69 @@ +
+
+
+

lang->line('details_user_course')?>

+
+
+

lang->line('field_user_course_date_begin')?>

+

date_begin?>

+
+
+

lang->line('field_user_course_date_end')?>

+

date_end?>

+
+
+

lang->line('field_user_course_status')?>

+

name?>

+
+
+

lang->line('apprentice') ?>

+ username?> +
+
+

lang->line('course_plan') ?>

+ formation_number?> official_name?> +
+
+ fk_trainer; + endforeach; + + if(($_SESSION['user_access'] == ACCESS_LVL_ADMIN) + || ($_SESSION['user_access'] == ACCESS_LVL_TRAINER && in_array($_SESSION['user_id'], $trainersId)) + || ($_SESSION['user_access'] == ACCESS_LVL_APPRENTICE && $user_course->fk_user == $apprentice->id)): ?> +
+

lang->line('field_user_course_objectives_status') ?>

+
+ + + + + + + + + + + + + + + + + + + +
lang->line('field_symbol'); ?>lang->line('field_objective_name'); ?>lang->line('field_taxonomy'); ?>lang->line('field_acquisition_level'); ?>
objective->symbol; ?>objective->name; ?>objective->taxonomy; ?>acquisition_level->name; ?>
+
+
+ + + + +
\ No newline at end of file diff --git a/database/20200709_plafor_v01.sql b/database/20200709_plafor_v01.sql new file mode 100644 index 00000000..591a5226 --- /dev/null +++ b/database/20200709_plafor_v01.sql @@ -0,0 +1,913 @@ +-- phpMyAdmin SQL Dump +-- version 4.9.0.1 +-- https://www.phpmyadmin.net/ +-- +-- Hôte : 127.0.0.1 +-- Généré le : jeu. 09 juil. 2020 à 13:42 +-- Version du serveur : 10.4.6-MariaDB +-- Version de PHP : 7.3.9 + +SET FOREIGN_KEY_CHECKS=0; +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `plafor` +-- +CREATE DATABASE IF NOT EXISTS `plafor` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE `plafor`; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `acquisition_level` +-- + +CREATE TABLE `acquisition_level` ( + `id` int(11) NOT NULL, + `name` varchar(20) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `acquisition_level` +-- + +INSERT INTO `acquisition_level` (`id`, `name`) VALUES +(1, 'Non expliqué'), +(2, 'Expliqué'), +(3, 'Exercé'), +(4, 'Autonome'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `acquisition_status` +-- + +CREATE TABLE `acquisition_status` ( + `id` int(11) NOT NULL, + `fk_objective` int(11) NOT NULL, + `fk_user_course` int(11) NOT NULL, + `fk_acquisition_level` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `ci_sessions` +-- + +CREATE TABLE `ci_sessions` ( + `id` varchar(128) NOT NULL, + `ip_address` varchar(45) NOT NULL, + `timestamp` int(10) UNSIGNED NOT NULL DEFAULT 0, + `data` blob NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `comment` +-- + +CREATE TABLE `comment` ( + `id` int(11) NOT NULL, + `fk_trainer` int(11) NOT NULL, + `fk_acquisition_status` int(11) NOT NULL, + `comment` text NOT NULL, + `date_creation` datetime NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `competence_domain` +-- + +CREATE TABLE `competence_domain` ( + `id` int(11) NOT NULL, + `fk_course_plan` int(11) NOT NULL, + `symbol` varchar(10) NOT NULL, + `name` varchar(100) NOT NULL, + `archive` tinyint(4) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `competence_domain` +-- + +INSERT INTO `competence_domain` (`id`, `fk_course_plan`, `symbol`, `name`, `archive`) VALUES +(1, 1, 'A', 'Saisie, interprétation et mise en œuvre des exigences des applications', 0), +(2, 1, 'B', 'Développement d’applications en tenant compte des caractéristiques de qualité', 0), +(3, 1, 'C', 'Création et maintenance de données ainsi que de leurs structures ', 0), +(4, 1, 'D', ' Mise en service d’appareils TIC', 0), +(5, 1, 'E', 'Travail sur des projets', 0), +(6, 2, 'A', 'Mise en service d’appareils TIC', 0), +(7, 2, 'B', 'Mise en service de serveurs et réseaux', 0), +(8, 2, 'C', 'Garantie de l’exploitation TIC ', 0), +(9, 2, 'D', 'Assistance aux utilisateurs', 0), +(10, 2, 'E', 'Développement d’applications en tenant compte des caractéristiques de qualité', 0), +(11, 2, 'F', 'Travaux dans le cadre de projets', 0), +(12, 3, 'A', 'Mise en service d’appareils TIC', 0), +(13, 3, 'B', 'Planification, installation, et configuration des réseaux', 0), +(14, 3, 'C', 'Planification, installation, et configuration des serveurs', 0), +(15, 3, 'D', 'Maintenance de réseaux et serveurs', 0), +(16, 3, 'E', 'Travail sur des projets', 0), +(17, 4, 'A', 'Installation, mise en service et maintenance de terminaux ICT utilisateurs', 0), +(18, 4, 'B', 'Garantie du bon fonctionnement de l’exploitation de terminaux ICT utilisateurs en réseau', 0), +(19, 4, 'C', 'Soutien des utilisateurs dans la mise en œuvre des moyens ICT', 0), +(20, 4, 'D', 'Déroulement de travaux de support ICT', 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `course_plan` +-- + +CREATE TABLE `course_plan` ( + `id` int(11) NOT NULL, + `formation_number` varchar(5) NOT NULL, + `official_name` varchar(100) NOT NULL, + `date_begin` date NOT NULL, + `archive` tinyint(4) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `course_plan` +-- + +INSERT INTO `course_plan` (`id`, `formation_number`, `official_name`, `date_begin`, `archive`) VALUES +(1, '88601', ' Informaticien/-ne CFC Développement d\'applications', '2014-08-01', 0), +(2, '88602', ' Informaticien/-ne CFC Informatique d\'entreprise', '2014-08-01', 0), +(3, '88603', ' Informaticien/-ne CFC Technique des systèmes', '2014-08-01', 0), +(4, '88605', ' Opératrice en informatique / Opérateur en informatique CFC', '2018-08-01', 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `objective` +-- + +CREATE TABLE `objective` ( + `id` int(11) NOT NULL, + `fk_operational_competence` int(11) NOT NULL, + `symbol` varchar(10) NOT NULL, + `taxonomy` int(5) NOT NULL, + `name` varchar(350) NOT NULL, + `archive` tinyint(4) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `objective` +-- + +INSERT INTO `objective` (`id`, `fk_operational_competence`, `symbol`, `taxonomy`, `name`, `archive`) VALUES +(1, 1, 'A.1.1', 4, 'Enregistrer les besoins et discuter les solutions possibles, s’entretenir avec le client/supérieur sur les restrictions des exigences', 0), +(2, 1, 'A.1.2', 4, ' Confirmer les exigences en ses propres termes (traiter et en déduire, lister les questions)', 0), +(3, 1, 'A.1.3', 3, 'Eclaircir toutes les questions de la liste (questions sur les solutions, l’environnement, les dépendances, estimation temporelle)', 0), +(4, 1, 'A.1.4', 4, 'Présenter les exigences de manière structurée (par ex. avec UML), élaborer le cahier des charges et le subdiviser en types d‘exigences', 0), +(5, 1, 'A.1.5', 4, 'Vérifier avec le mandant la solution concernant l’exhaustivité, ainsi que la clarté, et conclure par une confirmation écrite', 0), +(6, 2, 'A.2.1', 4, 'Elaborer aussi loin que possibles plusieurs variantes de solutions en regard des exigences et de la satisfaction du client (par ex. dans le GUI ou sur la plateforme (PC, tablette))', 0), +(7, 2, 'A.2.2', 4, 'Représenter des comparaisons de variantes et d‘évaluations (y compris, produits), conseiller la clientèle dans le choix (avantages, désavantages, problèmes de la solution) sur la base de leur analyse des valeurs utiles', 0), +(8, 2, 'A.2.3', 4, 'Choisir une procédure de résolution des problèmes, par ex. développement de prototypes, recherche de solutions de ce qui peut être résolu avec l’informatique, ou autres moyens tels qu’organisation ou formation', 0), +(9, 3, 'A.3.1', 4, 'Vérifier si toutes les exigences ont été reprises et remplies avec la solution choisie', 0), +(10, 3, 'A.3.2', 3, 'Ecrire une offre, sur la base de leur planification, pour la réalisation et l’introduction de la nouvelle application', 0), +(11, 3, 'A.3.3', 3, 'Obtenir la confirmation et la distribution du mandat du client', 0), +(12, 4, 'B.1.1', 5, 'Elaborer un concept de tests comme base pour un développement efficace et l’assurance qualité d’une nouvelle application', 0), +(13, 4, 'B.1.2', 5, 'Appliquer des méthodes pour la détermination de cas de tests', 0), +(14, 4, 'B.1.3', 3, 'Mettre à disposition, sauvegarder et documenter les données des tests', 0), +(15, 4, 'B.1.4', 3, 'Elaborer et exécuter des cas de tests (Blackbox), automatiser dans les cas possible', 0), +(16, 4, 'B.1.5', 3, 'Saisir les résultats dans un protocole de tests en vue d’une répétition', 0), +(17, 4, 'B.1.6', 4, 'Evaluer les résultats des tests et, le cas échéant, en déduire des mesures', 0), +(18, 4, 'B.1.7', 4, 'Garantir que toutes les fonctions ont été testées et que les éventuelles erreurs ont été corrigées', 0), +(19, 5, 'B.2.1', 4, 'Résoudre les prescriptions d’entreprises avec des directives techniques (web, mobile, desktop, automates)', 0), +(20, 5, 'B.2.2', 4, 'Appliquer des modèles d’architecture dans les solutions (Multitier, Frameworks, Patterns)', 0), +(21, 5, 'B.2.3', 3, 'Satisfaire des exigences non-fonctionnelles telles que temps de réponse, stabilité, disponibilité', 0), +(22, 5, 'B.2.4', 3, 'Prise en compte de standards internationaux et spécifiques à l’entreprise dans le cadre des solutions', 0), +(23, 6, 'B.3.1', 4, 'Fonctionnalité conviviales, par ex. la même fonction déclenche toujours la même action, lorsque l’on feuillette, les informations introduites restent, etc ', 0), +(24, 6, 'B.3.2', 4, 'Evaluation des modes de déroulement et des applications appropriées', 0), +(25, 6, 'B.3.3', 4, 'Programmer les applications en tenant compte des suites de tests, de débogage, de dépannage, de maintenance, d’efficience énergétique, de la protection des données, des règles en termes de licences, etc. et documenter de manière continue', 0), +(26, 6, 'B.3.4', 3, 'Utiliser des standards et processus de développement', 0), +(27, 6, 'B.3.5', 3, 'Appliquer des méthodes de projets (PAP, Jackson, diagramme d‘état, diagramme de classe) et les Software design-Patterns', 0), +(28, 6, 'B.3.6', 3, 'Respecter la convention des codes', 0), +(29, 6, 'B.3.7', 3, 'Editer, documenter du code source (par ex. code en ligne, ..) et documenter en vue de faciliter la maintenance', 0), +(30, 6, 'B.3.8', 3, 'Tester l’application et tout documenter', 0), +(31, 7, 'B.4.1', 4, 'Prendre en compte des exigences standards et ergonomiques, voir et toucher. Atteindre un bon effet convivial lors de l’utilisation des nouvelles applications', 0), +(32, 7, 'B.4.2', 3, 'Prendre en compte les CD/CI (Corporate Design/Corporate identity)', 0), +(33, 7, 'B.4.3', 3, 'Développer de manière conviviale, validation des champs de saisie, aide à la saisie des entrées', 0), +(34, 7, 'B.4.4', 3, 'Codage GUI convivial, séparation des éléments utilisateurs du code', 0), +(35, 7, 'B.4.5', 3, 'Prendre en compte les conditions de communication, par ex. communication asynchrone et veiller à de bonnes performances', 0), +(36, 7, 'B.4.6', 3, 'Tester l’application de manière exhaustive et tout documenter', 0), +(37, 8, 'B.5.1', 3, 'Organiser des tests systèmes, des tests de remise, des tests nonfonctionnels, des tests négatifs pour lesquels il faut préparer des données de test, documenter le tout', 0), +(38, 8, 'B.5.2', 3, 'Respecter les standards', 0), +(39, 8, 'B.5.3', 4, 'Elaborer la documentation technique pour les utilisateurs, et l’exploitation', 0), +(40, 8, 'B.5.4', 4, 'Organiser des révisions en phase, déroulement itératif afin de respecter la planification temporel et de qualité', 0), +(41, 9, 'B.6.1', 4, 'Planifier l’introduction avec la procédure définie, y compris, l’assurance, le cas échéant, d’un retour à la situation initiale en cas de besoin', 0), +(42, 9, 'B.6.2', 3, 'Organiser et transmettre la migration des données avec les éventuelles conversions nécessaires', 0), +(43, 9, 'B.6.3', 3, 'Préparer la remise de la production', 0), +(44, 9, 'B.6.4', 3, 'Organiser en temps voulu l’instruction et l’information des utilisateurs', 0), +(45, 10, 'C.1.1', 4, 'Identifier des entités et leurs relations, en élaborer un modèle en plusieurs niveaux d‘abstraction (normaliser)', 0), +(46, 10, 'C.1.2', 4, 'Décrire des entités et déterminer des types de données', 0), +(47, 10, 'C.1.3', 4, 'Convertir les exigences dans des modèles standards de notation (UML, ERD etc.)', 0), +(48, 10, 'C.1.4', 4, 'Formuler des données adéquates de test (tenir compte des conditions limites)', 0), +(49, 11, 'C.2.1', 4, 'Choisir un modèle approprié de base de données (relationnelle, hiérarchique, etc.) et déterminer le produit (DBMS)', 0), +(50, 11, 'C.2.2', 4, 'Elaborer le modèle physique (par ex. DDL, Referential Integrity, Constraints) et dénormaliser (Performance)', 0), +(51, 11, 'C.2.3', 4, 'Exécuter les tests de charge et de performance, optimiser en conséquence et assurer la possibilité de maintenance', 0), +(52, 11, 'C.2.4', 3, 'Assurer la sécurité des données (sauvegarde, disponibilité, etc.) et la protection des données (e.a. les droits d’accès)', 0), +(53, 11, 'C.2.5', 4, 'Planifier et exécuter la migration de données', 0), +(54, 12, 'C.3.1', 3, 'Déterminer les interfaces et technologies d‘accès (par ex. SQL statiques/dynamiques, ADO, HQL, OR-Mapper, Stored Procedures, etc.)', 0), +(55, 12, 'C.3.2', 4, 'Appliquer le concept de transaction et programmer l’accès aux données', 0), +(56, 12, 'C.3.3', 4, 'Vérifier l’accès des données en performance et exigences, le cas échéant, optimiser', 0), +(57, 12, 'C.3.4', 4, 'Faire le test de remise et vérifier les résultats, au besoin, entreprendre les mesures nécessaires', 0), +(58, 13, 'D.1.1', 3, 'Remarques: comme ces activités ne peuvent pas être effectuées dans toutes les entreprises formatrices, il n’y a pas d’objectifs évaluateurs obligatoires qui sont fixés. Toutes les actions ont lieu dans le cadre des cours interentreprises', 0), +(59, 14, 'E.1.1', 4, 'Analyser la quantité de travail sur la base des documents existants et élaborer une planification du travail', 0), +(60, 14, 'E.1.2', 3, 'Prendre les mesures de préparation en vue de la résolution, élaborer les checklist et la planification, documenter le déroulement, élaborer la liste de matériel, etc', 0), +(61, 14, 'E.1.3', 3, 'Procurer les droits d’accès, les licences, etc. et mettre à disposition l’environnement de travail', 0), +(62, 14, 'E.1.4', 4, 'Exécuter les tâches conformément à la planification, déterminer régulièrement l’état du projet et en rapporter', 0), +(63, 14, 'E.1.5', 3, 'Tester toutes les fonctions et installations de manière conséquente durant le travail, et les documenter selon des standards', 0), +(64, 14, 'E.1.6', 4, 'Instruire les utilisateurs et élaborer à cet effet une bonne documentation technique', 0), +(65, 14, 'E.1.7', 3, 'Assurer la remontée des données du client, des tests et systèmes, etc', 0), +(66, 15, 'E.2.1', 3, 'Présenter les méthodes de gestion de projets de l’entreprise', 0), +(67, 15, 'E.2.2', 4, 'Organiser le travail selon les méthodes usuelles de gestion de projets dans l’entreprise, et élabore une planification réaliste en temps et ressources', 0), +(68, 15, 'E.2.3', 3, 'Définir et distribuer des tâches partielles, respectivement prendre en charge de telles tâches et les exécuter', 0), +(69, 15, 'E.2.4', 3, 'Présenter et démontrer des solutions', 0), +(70, 15, 'E.2.5', 4, 'Elaborer le rapport final du projet (Réflexion en méthodes, déroulement, temps et ressources)', 0), +(71, 15, 'E.2.6', 4, 'Refléter le travail du projet et assurer le transfert des connaissances', 0), +(72, 16, 'E.3.1', 3, 'Communiquer dans le cadre du projet avec toutes les personnes concernées par le biais de contacts réguliers et discussions sur l’avancement des travaux, les interfaces, les nouvelles solutions, les problèmes', 0), +(73, 16, 'E.3.2', 5, 'Entretiens par des contacts réguliers et discussions avec les clients, respectivement le mandant, sur les souhaits, les questions et besoins, vérifier à l’aide de questions ciblées si les souhaits ont été correctement et précisément saisis', 0), +(74, 17, 'A.1.1', 4, 'Etre capable de recevoir, comprendre, planifier et mettre en œuvre un mandat client (organisation, méthodologie, ergonomie, optimisation de l’énergie)', 0), +(75, 17, 'A.1.2', 4, 'Evaluation et acquisition de matériel et logiciels appropriés, et les présenter à son supérieur. Après quoi, ils acquièrent le tout, y compris les licences nécessaires', 0), +(76, 17, 'A.1.3', 3, 'Pouvoir entreprendre des configurations de base en tenant compte des mesures de sécurité et de protection des données y.c. le filtrage des contenus, malware, et virus), pouvoir prendre comme aide un ouvrage de référence avec un langage standard et une langue supplémentaire (D/E ou F/I/E)', 0), +(77, 17, 'A.1.4', 3, 'Pouvoir insérer des composants TIC dans des réseaux selon directives et avec des connaissances sur les technologies actuelles', 0), +(78, 17, 'A.1.5', 3, 'Pouvoir installer, manuellement ou automatiquement, des applications selon directives du client en tenant compte des systèmes environnants et des aspects techniques des licences, ainsi que migrer des données', 0), +(79, 17, 'A.1.6', 3, 'Mettre hors service des composants TIC et les éliminer professionnellement en tenant compte de la protection des données, des lignes directrices et des procédures d’entreprise', 0), +(80, 17, 'A.1.7', 6, 'Contrôle des fonctions et remise au client (test final et protocole de remise)', 0), +(81, 18, 'A.2.1', 4, 'Etre capable de recevoir un mandat client, planifier la mise en œuvre (organisation, méthodologie, ergonomie, optimisation énergétique)', 0), +(82, 18, 'A.2.2', 4, 'Entreprendre l’évaluation et l’acquisition de matériel et logiciels appropriés en tenant compte des prescriptions et des compatibilités de l‘entreprise (y.c. licences), et les présenter à son supérieur', 0), +(83, 18, 'A.2.3', 3, 'Acquérir le matériel, les logiciels et les licences', 0), +(84, 18, 'A.2.4', 3, 'Entreprendre des configurations de base et pouvoir implémenter des services de base (par ex. accès distant, synchronisation des données, etc.) en tenant compte des mesures de sécurité et de protection des données', 0), +(85, 18, 'A.2.5', 3, 'Tester et documenter la configuration/disponibilité et fonctionnalité de la nouvelle installation', 0), +(86, 19, 'A.3.1', 4, 'Etre capable de recevoir, comprendre, planifier et mettre en œuvre un mandat client (organisation, méthodologie)', 0), +(87, 19, 'A.3.2', 4, 'Evaluation et acquisition des appareils appropriés (imprimante, copieur, NAS, appareils multimédia, etc.) en tenant compte des prescriptions et des compatibilités de l‘entreprise, et les présenter à son supérieur', 0), +(88, 19, 'A.3.3', 3, 'Acquérir les appareils et entreprendre les configurations de base (accès, droits, acomptes, rapports etc.)', 0), +(89, 19, 'A.3.4', 3, 'Tester et documenter la configuration/disponibilité et la fonctionnalité des nouveaux matériels et logiciels installés', 0), +(90, 19, 'A.3.5', 3, 'Instruire les utilisateurs sur le maniement et les caractéristiques des nouveaux appareils', 0), +(91, 20, 'B.1.1', 4, 'Clarifier et régler la situation et l’accès, rack, énergie électrique, besoins de climatisation, UPS, connexion au réseau, respectivement les faire installer', 0), +(92, 20, 'B.1.2', 3, 'acquérir le matériel et logiciels, entreprendre les configurations et services de base des serveurs (par ex. DHCP, DNS, accès distant, etc.) en tenant compte des mesures de sécurité et de protection des données, pouvoir prendre comme aide un ouvrage de référence avec un langage standard et une langue supplémentaire (D/E ou F/I/E)', 0), +(93, 20, 'B.1.3', 3, 'Tester et documenter la configuration/disponibilité et la fonctionnalité des nouveaux matériels et logiciels installés', 0), +(94, 21, 'B.2.1', 4, 'Ingénierie des besoins: reconnaître et classer les besoins du client y.c. de la sécurité, transférer sur la topologie du réseau en tenant compte des avantages et inconvénients d’une solution, possibilité d’extension, maintenance, prix, distance, etc', 0), +(95, 21, 'B.2.2', 4, 'Planification et concept de la structure réseau appropriée (Provider, WLAN, Switch, Router etc.) en tenant compte des besoins en largeur de bande, des médias, de la disponibilité et des services (Voice, unified Communication, Video, etc.), présenter la solution au supérieur', 0), +(96, 21, 'B.2.3', 3, 'Installer, mettre en réseau et configurer des composants (par ex. VLAN, Routing)', 0), +(97, 21, 'B.2.4', 3, 'Visualiser et documenter les réseaux et leur topologie', 0), +(98, 22, 'B.3.1', 4, 'Conseil à la clientèle en regard de la sécurité et l’archivage des données, recueillir et analyser les besoins du client et, au besoin, aviser sur les effets du risque', 0), +(99, 22, 'B.3.2', 4, 'Elaboration d’un concept en tenant compte de toutes les contraintes telles que les besoins de l’entreprise, les règles légales, sécurité et protection des données, les us et coutumes de la branche, les médias, les performances et la durée de vie', 0), +(100, 22, 'B.3.3', 3, 'Installation des systèmes en tenant compte des précautions nécessaires de sécurité (droits d’accès, sécurité des données, reprise après sinistre), performance, et installer la disponibilité', 0), +(101, 22, 'B.3.4', 3, 'Tester, valider et exécuter la restauration des données, documenter le travail', 0), +(102, 23, 'C.1.1', 3, 'Lire et interpréter des schémas (plan électrique, plan réseau) et pouvoir documenter les modifications exécutées', 0), +(103, 23, 'C.1.2', 3, 'Surveiller et administrer le réseau (monitoring: performance, flux de données, stabilité, malware, firewall, etc.)', 0), +(104, 23, 'C.1.3', 4, 'Poursuivre les incohérences et, le cas échéant, proposer des mesures appropriées, resp. les prendre selon les directives de l’entreprise', 0), +(105, 23, 'C.1.4', 3, 'Concevoir et réaliser des extensions réseau en tenant compte des coûts d’acquisition et d’exploitation et éliminer dans les règles les appareils remplacés', 0), +(106, 23, 'C.1.5', 3, 'Découvrir et éliminer toutes les pannes possibles de connexion (switchs, routeurs, etc.), y.c. mettre en œuvre des scénarios de secours selon checklist', 0), +(107, 24, 'C.2.1', 3, 'Exécuter les tâches régulières de maintenance, d’entretien et de surveillance (journalières, hebdomadaires, mensuelles, etc.), y.c. l’exécution régulière de mise à jour, contrôle de génération, ressources selon un déroulement par checklist', 0), +(108, 24, 'C.2.2', 3, 'Assurer la sécurité système et d’exploitation. Respecter les droits, vérifier les règles d’authentification et d’autorisation et les mettre en œuvre de manière conséquente', 0), +(109, 24, 'C.2.3', 3, 'Surveiller des services de serveurs (par ex. gestion des logfiles, queues d‘impression, messagerie/données, etc.) et entreprendre les mesures nécessaires', 0), +(110, 24, 'C.2.4', 3, 'Installation et configuration des services de communication et groupeware (par ex.sharepoint, Lotus Notes, etc.), gestion des délais, des tâches et des documents', 0), +(111, 24, 'C.2.5', 3, 'Tester et documenter la fonctionnalité, les performances et la sécurité des systèmes', 0), +(112, 25, 'C.3.1', 4, 'Accueillir, comprendre, planifier et mettre en œuvre un mandat client (organisation, méthodologie)', 0), +(113, 25, 'C.3.2', 4, 'Concept des droits d’accès y.c. élaborer le partage en tenant compte des exigences de la communication en réseau (applications d’impression, de téléphonie, VPN, spécifiques à l’entreprise)', 0), +(114, 25, 'C.3.3', 3, 'Installer, mettre en œuvre et ajuster aux spécificités du client un service d’annuaire en tenant compte de la protection et de la sécurité des données ainsi que des conditions d’accès', 0), +(115, 25, 'C.3.4', 3, 'Tester et documenter la fonctionnalité', 0), +(116, 26, 'C.4.1', 4, 'Accueillir, comprendre et planifier un mandat du client, planifier la mise en œuvre (organisation, méthodologie)', 0), +(117, 26, 'C.4.2', 4, 'Elaborer un concept de la performance et des interfaces en tenant compte de toutes les dépendances des services disponibles, y.c. les questions de droits d’accès et logiciels appropriés', 0), +(118, 26, 'C.4.3', 3, 'Installer les services de communication et groupeware (par ex. serveur de messagerie, serveur VOIP, DMS, etc.) en tenant compte des précautions nécessaires de sécurité (protection virale, filtrage des contenus et spams), de performance et de disponibilité', 0), +(119, 26, 'C.4.4', 3, 'Tester et documenter la configuration, la disponibilité, la fonctionnalité du matériel et logiciels nouvellement installés', 0), +(120, 27, 'D.1.1', 4, 'Introduction de nouveaux collaborateurs dans la structure TIC de l’entreprise, instruire les clients/collaborateurs lors de l’introduction de nouveaux matériels et logiciels, ainsi que de nouveaux outils', 0), +(121, 27, 'D.1.2', 3, 'Conseiller et soutenir les utilisateurs lors de la mise en œuvre d’automatisations bureautiques (par ex. mise en place de nouveaux outils, ou macros pour simplifier les tâches)', 0), +(122, 27, 'D.1.3', 3, 'Expliquer les particularités spécifiques à l’entreprise dans le comportement avec les données et les lignes directrices de la sécurité', 0), +(123, 27, 'D.1.4', 3, 'Elaborer la documentation pour les utilisateurs', 0), +(124, 28, 'D.2.1', 3, 'Accueillir et saisir les demandes et problèmes des clients, poser les bonnes questions, afin de cerner et résoudre rapidement le problème', 0), +(125, 28, 'D.2.2', 3, 'Support téléphonique ou par accès distant, si nécessaire sur place chez les utilisateurs, poser des questions ciblées en cas de problèmes techniques', 0), +(126, 28, 'D.2.3', 3, 'Conseiller les utilisateurs sur la manière de résoudre un problème ou comment ils peuvent faciliter leurs activités avec de nouveaux outils', 0), +(127, 28, 'D.2.4', 3, 'Expliquer au client le comportement avec les données et les lignes directrices de la sécurité', 0), +(128, 29, 'E.1.1', 3, 'Elaborer un concept de tests comme base pour un développement efficace et l’assurance qualité d’une nouvelle application', 0), +(129, 29, 'E.1.2', 4, 'Appliquer des méthodes pour la détermination de cas de tests', 0), +(130, 29, 'E.1.3', 3, 'Mettre à disposition, sauvegarder et documenter les données des tests', 0), +(131, 29, 'E.1.4', 3, 'Elaborer et exécuter des cas de tests (Blackbox), automatiser dans les cas possible', 0), +(132, 29, 'E.1.5', 3, 'Saisir les résultats dans un protocole de tests en vue d’une répétition', 0), +(133, 29, 'E.1.6', 3, 'Evaluer les résultats des tests et, le cas échéant, en déduire des mesures', 0), +(134, 29, 'E.1.7', 3, 'Garantir que toutes les fonctions ont été testées et que les éventuelles erreurs ont été corrigées', 0), +(135, 30, 'E.2.1', 4, 'Fonctionnalité conviviales, par ex. la même fonction déclenche toujours la même action, lorsque l’on feuillette, les informations introduites restent, etc', 0), +(136, 30, 'E.2.2', 4, 'Evaluation des modes de déroulement et des applications appropriées', 0), +(137, 30, 'E.2.3', 4, 'Programmer les applications en tenant compte des suites de tests, de débogage, de dépannage, de maintenance, etc. et documenter de manière continue', 0), +(138, 30, 'E.2.4', 3, 'Utiliser des standards et processus de développement', 0), +(139, 30, 'E.2.5', 3, 'Appliquer des méthodes de projets (PAP, Jackson, diagramme d‘état, diagramme de classe) et les Softwaredesign-Patterns', 0), +(140, 30, 'E.2.6', 3, 'Respecter la convention des codes', 0), +(141, 30, 'E.2.7', 3, 'Editer, documenter du code source (par ex. code en ligne, ..) et documenter en vue de faciliter la maintenance', 0), +(142, 30, 'E.2.8', 3, 'Tester l’application et tout documenter', 0), +(143, 31, 'E.3.1', 4, 'Prendre en compte des exigences standards et ergonomiques, voir et toucher. Atteindre un bon effet convivial lors de l’utilisation des nouvelles applications', 0), +(144, 31, 'E.3.2', 3, 'Prendre en compte les CD/CI (Corporate Design/Corporate identity)', 0), +(145, 31, 'E.3.3', 3, 'Développer de manière conviviale, validation des champs de saisie, aide à la saisie des entrées', 0), +(146, 31, 'E.3.4', 3, 'Codage GUI convivial, séparation des éléments utilisateurs du code', 0), +(147, 31, 'E.3.5', 3, 'Prendre en compte les conditions de communication, par ex. communication asynchrone et veiller à de bonnes performances', 0), +(148, 31, 'E.3.6', 3, 'Tester l’application de manière exhaustive et tout documenter', 0), +(149, 32, 'E.4.1', 4, 'Choisir un modèle approprié de base de données (relationnelle, hiérarchique, etc.) et déterminer le produit (DBMS)', 0), +(150, 32, 'E.4.2', 3, 'Elaborer le modèle physique (par ex. DDL, Referential Integrity, Constraints) et dénormaliser (Performance)', 0), +(151, 32, 'E.4.3', 3, 'Exécuter les tests de charge et de performance, optimiser en conséquence et assurer la possibilité de maintenance', 0), +(152, 32, 'E.4.4', 3, 'Assurer la sécurité des données (sauvegarde, disponibilité, etc.) et la protection des données (e.a. les droits d’accès)', 0), +(153, 32, 'E.4.5', 4, 'Planifier et exécuter la migration de données', 0), +(154, 33, 'E.5.1', 3, 'Déterminer les interfaces et technologies d‘accès (par ex. SQL statiques/dynamiques, ADO, HQL, OR-Mapper, Stored Procedures, etc.)', 0), +(155, 33, 'E.5.2', 3, 'Appliquer le concept de transaction et programmer l’accès aux données', 0), +(156, 33, 'E.5.3', 3, 'Vérifier l’accès des données en performance et exigences, le cas échéant, optimiser', 0), +(157, 33, 'E.5.4', 4, 'Faire le test de remise et vérifier les résultats, au besoin, entreprendre les mesures nécessaires', 0), +(158, 34, 'F.1.1', 3, 'Analyser et comprendre l’étendue de travail, élaborer une planification des travaux', 0), +(159, 34, 'F.1.2', 3, 'Prendre les mesures de préparation en vue de la résolution, élaborer les checklist et la planification, documenter le déroulement, élaborer la liste de matériel, etc', 0), +(160, 34, 'F.1.3', 3, 'Acquérir et ordonner du matériel, le préparer pour l’installation, etc. y.c. les solutions de secours', 0), +(161, 34, 'F.1.4', 3, 'Exécuter les tâches, conformément à la planification, efficacement de pas à pas', 0), +(162, 34, 'F.1.5', 3, 'Planifier et exécuter des tests, lesquels seront documentés dans l’inventaire des nouvelles installations', 0), +(163, 34, 'F.1.6', 3, 'Remettre l’installation et faire signer le protocole de remise au client', 0), +(164, 34, 'F.1.7', 3, 'Instruire les utilisateurs sur les modifications de leurs applications', 0), +(165, 35, 'F.2.1', 4, 'Analyser et comprendre l’étendue de travail de sa propre contribution, élaborer une planification des travaux en tenant compte des ressources disponibles', 0), +(166, 35, 'F.2.2', 3, 'Elaborer le mandat selon les directives en termes de délai et dans le cadre du budget, subdiviser les résultats dans le projet global', 0), +(167, 35, 'F.2.3', 3, 'Informer constamment la direction de projet de sa propre initiative sur les modifications et déviations', 0), +(168, 35, 'F.2.4', 3, 'Elaborer la documentation du projet, les rapports, la correspondance du projet, etc. selon directives', 0), +(169, 35, 'F.2.5', 3, 'Mettre à disposition des collègues ses propres expériences issues du projet', 0), +(170, 36, 'F.3.1', 3, 'Communiquer dans le cadre du projet avec toutes les personnes concernées par le biais de contacts réguliers et discussions sur l’avancement des travaux, les interfaces, les nouvelles solutions, les problèmes', 0), +(171, 36, 'F.3.2', 3, 'Entretiens par des contacts réguliers et discussions avec les clients, respectivement le mandant, sur les souhaits, les questions et besoins, vérifier à l’aide de questions ciblées si les souhaits ont été correctement et précisément saisis', 0), +(177, 42, 'A.1.1', 4, 'Etre capable de recevoir, comprendre, planifier et mettre en œuvre un mandat client (organisation, méthodologie, ergonomie, optimisation de l’énergie)', 0), +(178, 42, 'A.1.2', 4, 'Évaluation et acquisition de matériel et logiciels appropriés, et les présenter à son supérieur', 0), +(179, 42, 'A.1.3', 3, 'Pouvoir entreprendre des configurations de base en tenant compte des mesures de sécurité et de protection des données y.c. le filtrage des contenus, malware, et virus), pouvoir prendre comme aide un ouvrage de référence avec un langage standard et une langue supplémentaire (D/E ou F/I/E)', 0), +(180, 42, 'A.1.4', 3, 'Pouvoir insérer des composants TIC dans des réseaux selon directives et avec des connaissances sur les technologies actuelles', 0), +(181, 42, 'A.1.5', 3, 'Pouvoir installer, manuellement ou automatiquement, des applications selon directives du client en tenant compte des systèmes environnants et des aspects techniques des licences, ainsi que migrer des données', 0), +(182, 42, 'A.1.6', 3, 'Mettre hors service des composants TIC et les éliminer professionnellement en tenant compte de la protection des données, des lignes directrices et des procédures d’entreprise', 0), +(183, 42, 'A.1.7', 3, 'Contrôle des fonctions et remise au client (test final et protocole de remise)', 0), +(184, 42, 'A.1.8', 4, 'Exécuter un contrôle fonctionnel pour l’assurance qualité, et remise de la nouvelle installation au client (contrôle final, protocole de remise)', 0), +(185, 43, 'A.2.1', 4, 'Accueillir le mandat du client et planifier la mise en œuvre\r\n(organisation, méthodes de travail, optimisation de l’énergie)', 0), +(186, 43, 'A.2.2', 4, 'Choisir le matériel et logiciels appropriés en tenant compte\r\ndes directives matérielles (y compris, les exigences de la virtualisation), présenter des propositions de solutions au supérieur', 0), +(187, 43, 'A.2.3', 4, 'Clarifier et régler la situation et l’accès, rack, énergie électrique, besoins de climatisation, UPS, connexion au réseau, respectivement les faire installer', 0), +(188, 43, 'A.2.4', 3, 'Acquérir le matériel et logiciels, entreprendre les configurations et services de base des serveurs (par ex. DHCP, DNS, accès distant, etc.) en tenant compte des mesures de sécurité et de protection des données, pouvoir prendre comme aide un ouvrage de référence avec un langage standard et une langue supplémentaire (D/E ou F/I/E)', 0), +(189, 43, 'A.2.5', 3, 'Tester et documenter la configuration/disponibilité et la fonctionnalité des nouveaux matériels et logiciels installés', 0), +(190, 44, 'A.3.1', 4, 'Accueillir le mandat du client et planifier la mise en œuvre (organisation, méthodes de travail, optimisation de l’énergie)', 0), +(191, 44, 'A.3.2', 4, 'Evaluer et acquérir les composants réseaux appropriés en tenant compte des besoins en largeur de bande, des moyens, des prérequis et compatibilité du matériel. Présenter la solution au supérieur', 0), +(192, 44, 'A.3.3', 3, 'Clarifier et régler la situation et l’accès, rack, énergie électrique, besoins de climatisation, UPS, connexion au réseau', 0), +(193, 44, 'A.3.4', 3, ' Entreprendre la configuration de base (accès, mot clés, etc.), tester et documenter les résultats', 0), +(194, 45, 'B.1.1', 4, 'Ingénierie des besoins: reconnaître et classer les besoins du client y.c. de la sécurité, transférer sur la topologie du réseau en tenant compte des avantages et inconvénients d’une solution, possibilité d’extension, maintenance, prix, distance, etc', 0), +(195, 45, 'B.1.2', 4, 'Planification et concept de la structure réseau appropriée (Provider, WLAN, Switch, Router etc.) en tenant compte des besoins en largeur de bande, des médias, de la disponibilité et des services (Voice, unified Communication, Video, etc.), présenter la solution au supérieur', 0), +(196, 45, 'B.1.3', 3, 'Installer, mettre en réseau et configurer des composants (par ex. VLAN, Routing)', 0), +(197, 45, 'B.1.4', 3, 'Visualiser et documenter les réseaux et leur topologie', 0), +(198, 46, 'B.2.1', 3, 'Reconnaître et évaluer les critères de sécurité en tenant compte des besoins du client et de l‘environnement', 0), +(199, 46, 'B.2.2', 3, 'Concevoir des mesures de sécurité dans le réseau afin de minimiser les risques (filtrage MAC, malware/virus, VLAN, VPN y.c. le cryptage, security-gateways, contrôles des accès), planifier la mise en œuvre', 0), +(200, 46, 'B.2.3', 3, 'Mettre en œuvre les mesures de sécurité et tester leurs fonctionnalités', 0), +(201, 46, 'B.2.4', 3, 'Documenter la solution et élaborer le mode d’emploi utilisateurs', 0), +(202, 47, 'B.3.1', 5, 'Surveiller la performance, la sécurité, la disponibilité, les accès (IDS ou accès des personnes), contenu des données, journaux log, analyser et proposer des mesures avec des outils appropriés (Realtime-Monitoring ou contrôles périodiques)', 0), +(203, 47, 'B.3.2', 5, 'Proposer des scénarios (incl. pour des situations extrêmes et de secours) et planifier les étapes nécessaires d‘amélioration', 0), +(204, 47, 'B.3.3', 3, 'Mettre en œuvre des adaptations dans le réseau (incl. mise en service de NMS), documenter celles-ci et vérifier leur efficacité', 0), +(205, 48, 'B.4.1', 5, 'Concevoir et évaluer des systèmes de sauvegarde de données en tenant compte des besoins du client, des dispositions juridiques, des besoins en sécurité et protection des données, du réemploi (même à long termes, par ex. 20 ans) ainsi que de l’environnement', 0), +(206, 48, 'B.4.2', 5, 'Planifier et implémenter des systèmes de sauvegarde incl. des solutions de backup', 0), +(207, 48, 'B.4.3', 3, 'Tester l’installation (test fonctionnel et de remise) et documenter celle-ci ainsi que les résultats', 0), +(208, 49, 'C.1.1', 4, 'Accueillir, comprendre, planifier et mettre en œuvre un mandat client (organisation, méthodologie)', 0), +(209, 49, 'C.1.2', 4, 'Concept des droits d’accès y.c. élaborer le partage en tenant compte des exigences de la communication en réseau (applications d’impression, de téléphonie, VPN, spécifiques à l’entreprise)', 0), +(210, 49, 'C.1.3', 3, 'Installer, mettre en œuvre et ajuster aux spécificités du client un service d’annuaire en tenant compte de la protection et de la sécurité des données ainsi que des conditions d’accès', 0), +(211, 49, 'C.1.4', 3, 'Tester et documenter la fonctionnalité', 0), +(212, 50, 'C.2.1', 5, 'Enregistrer le mandat du client et planifier la mise en œuvre (organisation, méthodes de travail, optimisation de l’énergie)', 0), +(213, 50, 'C.2.2', 4, 'Élaborer le concept en tenant compte de toutes les dépendances des services disponibles, de la performance et des interfaces incl. les questions de droits d’accès', 0), +(214, 50, 'C.2.3', 3, 'Installer les services (par ex. serveurs web, de bases de données, de terminaux, d‘imprimantes, etc.) en tenant compte des précautions de sécurité incl. les mesures de protection antivirus', 0), +(215, 50, 'C.2.4', 3, 'Tester la configuration, la disponibilité et la fonctionnalité du nouveau matériel et logiciels installés, verbaliser ces tests dans la documentation', 0), +(216, 51, 'C.3.1', 4, 'Accueillir, comprendre et planifier un mandat du client, planifier la mise en œuvre (organisation, méthodologie)', 0), +(217, 51, 'C.3.2', 4, 'Élaborer un concept de la performance et des interfaces en tenant compte de toutes les dépendances des services disponibles, y.c. les questions de droits d’accès et logiciels appropriés', 0), +(218, 51, 'C.3.3', 3, 'Installer les services de communication et groupeware (par ex. serveur de messagerie, serveur VOIP, DMS, etc.) en tenant compte des précautions nécessaires de sécurité (protection virale, filtrage des contenus et spams), de performance et de disponibilité', 0), +(219, 51, 'C.3.4', 3, 'Tester et documenter la configuration, la disponibilité, la fonctionnalité du matériel et logiciels nouvellement installés', 0), +(220, 52, 'C.4.1', 5, 'Conseil à la clientèle en regard de la sécurité et l’archivage des données, recueillir et analyser les besoins du client et, au besoin, aviser sur les effets du risque', 0), +(221, 52, 'C.4.2', 4, 'Élaboration d’un concept en tenant compte de toutes les contraintes telles que les besoins de l’entreprise, les règles légales, les us et coutumes de la branche, les médias, les performances et la durée de vie', 0), +(222, 52, 'C.4.3', 3, 'Installation des systèmes en tenant compte des précautions nécessaires de sécurité (droits d’accès, sécurité des données, reprise après sinistre), performance, et installer la disponibilité', 0), +(223, 52, 'C.4.4', 3, 'Tester, valider et exécuter la restauration des données, documenter le travail', 0), +(224, 53, 'C.5.1', 4, 'Accueillir, comprendre et planifier un mandat du client, planifier la mise en œuvre (organisation, méthodologie)', 0), +(225, 53, 'C.5.2', 4, 'Élaborer un concept en tenant compte des offres de fournisseurs existants, dépendances des services disponibles, de la performance et des interfaces, incl. les questions de droits d’accès', 0), +(226, 53, 'C.5.3', 3, 'Installer les services réseaux (par ex. les services cloud, CMS, serveurs web et d‘applications, etc.) incl. les langages des scripts ou de programmation côté serveur en tenant compte des précautions nécessaires de sécurité, de la performance et de la disponibilité', 0), +(227, 53, 'C.5.4', 3, 'Tester les fonctionnalités en charge, resp. sous des conditions aggravées, verbaliser la solution et les résultats des tests', 0), +(228, 54, 'D.1.1', 3, 'Lire et interpréter des schémas (plan électrique, plan réseau) et pouvoir documenter les modifications exécutées', 0), +(229, 54, 'D.1.2', 3, 'Surveiller et administrer le réseau (monitoring: performance, flux de données, stabilité, malware, firewall, etc.)', 0), +(230, 54, 'D.1.3', 5, 'Poursuivre les incohérences et, le cas échéant, proposer des mesures appropriées, resp. les prendre selon les directives de l’entreprise', 0), +(231, 54, 'D.1.4', 3, 'Concevoir et réaliser des extensions réseau en tenant compte des coûts d’acquisition et d’exploitation et éliminer dans les règles les appareils remplacés', 0), +(232, 54, 'D.1.5', 3, 'Découvrir et éliminer toutes les pannes possibles de connexion (switchs, routeurs, etc.), y.c. mettre en œuvre des scénarios de secours selon checklist', 0), +(233, 54, 'D.1.6', 3, 'Tester la fonctionnalité, la performance, la sécurité et documenter les résultats', 0), +(234, 55, 'D.2.1', 3, 'Exécuter les tâches régulières de maintenance, d’entretien et de surveillance (journalières, hebdomadaires, mensuelles, etc.), y.c. l’exécution régulière de mise à jour, contrôle de génération, ressources selon un déroulement par checklist', 0), +(235, 55, 'D.2.2', 3, 'Assurer la sécurité système et d’exploitation. Respecter les droits, vérifier les règles d’authentification et d’autorisation et les mettre en œuvre de manière conséquente', 0), +(236, 55, 'D.2.3', 3, 'Surveiller des services de serveurs (par ex. gestion des logfiles, queues d‘impression, messagerie/données, etc.) et entreprendre les mesures nécessaires', 0), +(237, 55, 'D.2.4', 3, 'Installation et configuration des services de communication et groupeware (par ex. sharepoint, Lotus Notes, etc.), gestion des délais, des tâches et des documents', 0), +(238, 55, 'D.2.5', 3, 'Tester et documenter la fonctionnalité, les performances et la sécurité des systèmes. ', 0), +(239, 56, 'D.3.1', 3, 'Gérer et distribuer des licences, mises à jour, maintenir la liste des générations de logiciels, actualiser localement les logiciels de sécurité', 0), +(240, 56, 'D.3.2', 3, 'Administrer le cycle de vie des appareils en tenant compte des aspects économiques et de durabilité. En cas de besoin, échanger les appareils', 0), +(241, 56, 'D.3.3', 3, 'Entreprendre des extensions sur le matériel et logiciels, y compris les adaptations de configurations en tenant compte de toutes les implications sur les systèmes', 0), +(242, 56, 'D.3.4', 3, 'Informer et instruire les utilisateurs', 0), +(243, 57, 'D.4.1', 3, 'Analyser le mandat ou les besoins (utilisateurs/système), enregistrer le processus et en prendre acte', 0), +(244, 57, 'D.4.2', 4, 'Développer une solution et la présenter au supérieur ou à l’utilisateur', 0), +(245, 57, 'D.4.3', 3, 'Automatiser des processus (par ex. déploiement de logiciels, processus de serveurs, envoi automatisé de messages, etc.) à l’aide d’outils appropriés (par ex. scripts)', 0), +(246, 57, 'D.4.4', 3, 'Assurer que le processus automatisé remplisse la totalité des fonctionnalités en tenant compte de la couverture de tous les systèmes environnants, documenter les fonctionnalités', 0), +(247, 58, 'D.5.1', 4, 'Clarifier les possibilités et la faisabilité de systèmes de déploiement de logiciels et évaluer les offres', 0), +(248, 58, 'D.5.2', 4, 'Clarifier les conditions d’installation et leur compatibilité avec les systèmes environnants, proposer une solution', 0), +(249, 58, 'D.5.3', 3, 'Mettre en service des systèmes de déploiement possibles dans un environnement de test, tester et documenter les fonctionnalités', 0), +(250, 58, 'D.5.4', 3, 'Exécuter le déploiement des logiciels, surveiller et documenter celui-ci', 0), +(251, 58, 'D.5.5', 3, 'Informer les utilisateurs selon les besoins', 0), +(252, 59, 'E.1.1', 3, 'Analyser et comprendre l’étendue de travail, élaborer une planification des travaux', 0), +(253, 59, 'E.1.2', 3, 'Prendre les mesures de préparation en vue de la résolution, élaborer les checklist et la planification, documenter le déroulement, élaborer la liste de matériel, etc', 0), +(254, 59, 'E.1.3', 3, 'Acquérir et ordonner du matériel, le préparer pour l’installation, etc. y.c. les solutions de secours', 0), +(255, 59, 'E.1.4', 3, 'Exécuter les tâches, conformément à la planification, efficacement de pas à pas', 0), +(256, 59, 'E.1.5', 3, 'Planifier et exécuter des tests, lesquels seront documentés dans l’inventaire des nouvelles installations', 0), +(257, 59, 'E.1.6', 3, 'Remettre l’installation et faire signer le protocole de remise au client', 0), +(258, 59, 'E.1.7', 3, 'Instruire les utilisateurs sur les modifications de leurs applications', 0), +(259, 59, 'E.1.8', 3, 'Retourner le matériel et appareils non nécessaires, éliminer correctement le matériel inutilisable', 0), +(260, 60, 'E.2.1', 4, 'Analyser et comprendre l’étendue de travail de sa propre contribution, élaborer une planification des travaux en tenant compte des ressources disponibles', 0), +(261, 60, 'E.2.2', 3, 'Élaborer le mandat selon les directives en termes de délai et dans le cadre du budget, subdiviser les résultats dans le projet global', 0), +(262, 60, 'E.2.3', 3, 'Informer constamment la direction de projet de sa propre initiative sur les modifications et déviations', 0), +(263, 60, 'E.2.4', 3, 'Élaborer la documentation du projet, les rapports, la correspondance du projet, etc. selon directives', 0), +(264, 60, 'E.2.5', 3, 'Mettre à disposition des collègues ses propres expériences issues du projet', 0), +(265, 61, 'E.3.1', 3, 'Communiquer dans le cadre du projet avec toutes les personnes concernées par le biais de contacts réguliers et discussions sur l’avancement des travaux, les interfaces, les nouvelles solutions, les problèmes', 0), +(266, 61, 'E.3.2', 3, 'Entretiens par des contacts réguliers et discussions avec les clients, respectivement le mandant, sur les souhaits, les questions et besoins, vérifier à l’aide de questions ciblées si les souhaits ont été correctement et précisément saisis', 0), +(267, 62, 'A.1.1', 2, 'Expliquent les tâches et fonctions des systèmes d’exploitation courants', 0), +(268, 62, 'A.1.2', 4, 'Installent et configurent les systèmes d’exploitation courants selon directives, cernent rapidement les problèmes et les résolvent ou les transmettent à l’instance correcte', 0), +(269, 62, 'A.1.3', 3, 'Installent et configurent des appareils périphériques et leurs extensions', 0), +(270, 62, 'A.1.4', 3, 'Installent des terminaux sur place selon les spécifications de l’entreprise et du point de vue de l’efficacité énergétique, la sécurité du travail, la protection de la santé et de l’environnement', 0), +(271, 62, 'A.1.5', 3, 'Mettent en œuvre des prescriptions et des processus dans le cadre de la gestion de la durée de vie des produits', 0), +(272, 62, 'A.1.6', 1, 'Exécutent des mises à jour de logiciel d’entreprise selon guides et informations des producteurs', 0), +(273, 62, 'A.1.7', 3, 'Appliquent des commandes spécifiques sur des systèmes d’exploitation courants', 0), +(274, 62, 'A.1.8', 3, 'Trient les déchets et appareils hors service, les dirigent vers le recyclage / réutilisation selon l’état technique', 0), +(275, 63, 'A.2.1', 3, 'Installent et configurent des applications standards et les administrent', 0), +(276, 63, 'A.2.2', 2, 'Actualisent les logiciels existants avec une version actuelle', 0), +(277, 63, 'A.2.3', 3, 'Décrivent les diverses variantes de licences', 0), +(278, 63, 'A.2.4', 3, 'Appliquent les processus de la gestion des licences', 0), +(279, 64, 'A.3.1', 4, 'Exécutent des tests de fonctions selon directives et évaluent les résultats', 0), +(280, 64, 'A.3.2', 3, 'Adaptent les tests de fonctions existants sur la base de nouvelles conditions cadres', 0), +(281, 64, 'A.3.3', 4, 'Élaborent et documentent les déroulements de tests de fonctions et contrôlent ceux-ci sur leur exactitude', 0), +(282, 65, 'A.4.1', 3, 'Appliquent des scripts et contrôlent leur exécution', 0), +(283, 65, 'A.4.2', 4, 'Entreprennent des adaptations sur la fonctionnalité du script', 0), +(284, 65, 'A.4.3', 3, 'Programment des scripts simples selon directives', 0), +(285, 66, 'B.1.1', 2, 'Expliquent les tâches et fonctions de chaque composant d’un réseau (switch, routeur, firewall, serveur, système de mémorisation, points d’accès WLAN)', 0), +(286, 66, 'B.1.2', 4, 'Intègrent les terminaux ICT utilisateurs (PC, notebook, appareils mobiles, imprimantes, appareils multifonctionnels et appareils de télécommunication) dans un environnement réseau existant', 0), +(287, 66, 'B.1.3', 4, 'Décèlent les pannes et peuvent les cerner dans un environnement réseau, les résolvent ou les transmettent à l’instance correcte', 0), +(288, 66, 'B.1.4', 2, 'Instruisent les utilisateurs lors de l’installation et l’utilisation d’applications et services Cloud', 0), +(289, 67, 'B.2.1', 3, 'Relient les logiciels du terminal ICT utilisateurs avec les services concernés du serveur', 0), +(290, 67, 'B.2.2', 2, 'Attribuent les services serveurs usuels (DNS, DHCP, services d‘annuaire, serveurs Groupware) à leurs fonctions dans le réseau et expliquent leurs tâches/fonctions', 0), +(291, 67, 'B.2.3', 4, 'Décèlent parmi les services serveurs usuels (DNS, DHCP, services d‘annuaire, serveurs Groupware) les pannes et peuvent les résoudre ou les transmettent à l’instance correcte', 0), +(292, 67, 'B.2.4', 3, 'Utilisent et configurent les services serveurs mis en œuvre dans l’entreprise sur les terminaux ICT utilisateurs (PC, notebook, tablettes, smartphones)', 0), +(293, 68, 'B.3.1', 2, 'Décrivent les bases de la sécurité informatique (sécurité des données, protection des données, disponibilité) et expliquent les possibilités de mesures de protection contre les menaces dans le domaine des ICT', 0), +(294, 68, 'B.3.2', 3, 'Installent et configurent les logiciels de protection usuels sur les terminaux ICT utilisateurs et les maintiennent au niveau actuel', 0), +(295, 68, 'B.3.3', 3, 'Protègent les terminaux ICT utilisateurs des dangers actuels sur la base des directives de l’entreprise', 0), +(296, 68, 'B.3.4', 3, 'Appliquent les directives et processus de sécurité internes à l’entreprise de manière conforme à la situation', 0), +(297, 68, 'B.3.5', 3, 'Appliquent les procédures nécessaires pour déceler et éliminer les attaques de logiciels malveillants sur les terminaux ICT utilisateurs', 0), +(298, 69, 'C.1.1', 3, 'Décrivent les éléments du contenu d’une instruction et les mettent en œuvre dans la pratique', 0), +(299, 69, 'C.1.2', 2, 'Préparent systématiquement des présentations et décrivent les facteurs de succès (rhétorique, langage corporel) lors de leur exécution', 0), +(300, 69, 'C.1.3', 3, 'Appliquent les logiciels appropriés pour la réalisation de présentations', 0), +(301, 69, 'C.1.4', 3, 'Utilisent divers médias et moyens d’aide, afin de soutenir les présentations', 0), +(302, 69, 'C.1.5', 3, 'Mettent en œuvre les instructions/présentations avec toutes les mesures nécessaires (contenus, structuration, préparation, exécution, approfondissement, préparation des ressources nécessaires, etc.)', 0), +(303, 70, 'C.2.1', 3, 'Formulent des objectifs simples et clairs, et peuvent interpréter des objectifs prescrits', 0), +(304, 70, 'C.2.2', 3, 'Appliquent des directives et modèles de documentation de l‘entreprise', 0), +(305, 70, 'C.2.3', 3, 'Acquièrent, avec les moyens mis à disposition, les informations nécessaires', 0), +(306, 70, 'C.2.4', 4, 'Trient l’indispensable du superflu et fixent les bonnes priorités', 0), +(307, 70, 'C.2.5', 3, 'Élaborent des modes d’emploi compréhensibles et clairement structurés', 0), +(308, 70, 'C.2.6', 3, 'Utilisent des techniques appropriées de visualisation afin de présenter les déclarations de manière compréhensible et efficace', 0), +(309, 70, 'C.2.7', 3, 'Appliquent les outils logiciels appropriés pour la réalisation de la documentation', 0), +(310, 71, 'C.3.1', 3, 'Saisissent les exigences du client ainsi que la réalité de la situation, et entament les étapes suivantes de l‘acquisition', 0), +(311, 71, 'C.3.2', 3, 'Acquièrent, de la part du client et de l’objet à acquérir, les informations importantes pour la situation donnée', 0), +(312, 71, 'C.3.3', 4, 'Comparent les données acquises et confrontent les avantages et inconvénients des divers produits du point de vue économique, écologique et technique, puis les documentent', 0), +(313, 71, 'C.3.4', 3, 'Présentent au client des recommandations sous forme verbales ou écrites, et les justifient', 0), +(314, 71, 'C.3.5', 3, 'Déroulent les activités administratives d’un processus d’acquisition (offres, confirmation du mandat, procès-verbal du travail, facture, etc.)', 0), +(315, 72, 'D.1.1', 2, 'Prennent note des demandes ou besoins des clients qui peuvent se présenter et déterminent, par des questions ciblées, le problème', 0), +(316, 72, 'D.1.2', 4, 'Cernent rapidement les problèmes et sont capables de les éliminer ou les transmettent à l’instance correcte', 0), +(317, 72, 'D.1.3', 3, 'Entament des préparations pour éluder les questions, élaborent des checklists et estiment l‘investissement', 0), +(318, 72, 'D.1.4', 3, 'Mettent en œuvre efficacement et de manière structurée les mandats en respectant les prescriptions', 0), +(319, 72, 'D.1.5', 3, 'Documentent le déroulement afin que l’utilisateur et/ou l’équipe puisse saisir l‘état des travaux', 0), +(320, 72, 'D.1.6', 2, 'Informent les clients sur l’état des travaux et, selon besoins, instruisent les clients afin de résoudre les problèmes', 0), +(321, 72, 'D.1.7', 3, 'Appliquent correctement les termes techniques et conformément à la situation lors de la communication avec l’équipe, les partenaires de l’organisation ICT et les clients', 0), +(322, 73, 'D.2.1', 3, 'Appliquent diverses techniques de communication, afin de traiter les problèmes de manière ciblée', 0), +(323, 73, 'D.2.2', 3, 'Appliquent des modèles de communication dans la collaboration avec des clients et leur propre équipe', 0), +(324, 73, 'D.2.3', 3, 'Utilisent les retours afin de s’engager et d’apporter une contribution pour le succès de l’équipe', 0), +(325, 73, 'D.2.4', 2, 'Expliquent le processus dynamique de l’équipe (rôles et normes) et décrivent les diverses phases de développement de l’équipe', 0), +(326, 73, 'D.2.5', 2, 'Décrivent les causes et la dynamique des conflits', 0), +(327, 73, 'D.2.6', 4, 'Décèlent à temps les situations de conflits et prend les mesures en conséquence', 0), +(328, 74, 'D.3.1', 3, 'Appliquent un modèle (méthode des 6 pas) pour la mise en œuvre d’une action exhaustive', 0), +(329, 74, 'D.3.2', 2, 'Décrivent comment des projets sont planifiés, structurés efficacement, démarrés, exécutés et clos', 0), +(330, 74, 'D.3.3', 3, 'Élaborent des plans pour un déroulement systématique des mandats en tenant compte des ressources, des délais, des problèmes et des divisions du travail', 0), +(331, 74, 'D.3.4', 3, 'Utilisent de manière ciblée des sources d’informations et acquièrent les informations manquantes', 0), +(332, 74, 'D.3.5', 3, 'Appliquent des méthodes et principes pour l’amélioration de l’efficacité du travail dans le cadre des travaux journaliers', 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `operational_competence` +-- + +CREATE TABLE `operational_competence` ( + `id` int(11) NOT NULL, + `fk_competence_domain` int(11) NOT NULL, + `name` varchar(150) DEFAULT NULL, + `symbol` varchar(10) NOT NULL, + `methodologic` text DEFAULT NULL, + `social` text DEFAULT NULL, + `personal` text DEFAULT NULL, + `archive` tinyint(4) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `operational_competence` +-- + +INSERT INTO `operational_competence` (`id`, `fk_competence_domain`, `name`, `symbol`, `methodologic`, `social`, `personal`, `archive`) VALUES +(1, 1, 'Analyser, structurer et documenter les exigences ainsi que les besoins', 'A1', 'Travail structuré, documentation adéquate', 'Comprendre et sentir les problèmes du client, communication avec des partenaires', 'Fiabilité, autoréflexion, interrogation constructive du problème', 0), +(2, 1, 'Elaborer diverses propositions de solutions incluant les interfaces utilisateurs requises', 'A2', 'Travail structuré, documentation adéquate, appliquer des techniques de créativité, techniques de décision', 'Comprendre et sentir les problèmes du client, communication avec des partenaires, modération, travail en réseau', 'Interrogation constructive du problème, s’informer de manière autonome sur les diverses solutions', 0), +(3, 1, 'Vérifier l’exhaustivité des exigences et des besoins dans les propositions de solution choisies', 'A3', 'Techniques de validation, assurance qualité, techniques de présentation et de démonstration', '', 'Précision dans le travail', 0), +(4, 2, 'Elaborer un concept de tests, mettre en application divers déroulements de tests et tester systématiquement les applications ', 'B1', '', 'Capacité de critique mutuelle', 'Développer préventivement, estimer les conséquences', 0), +(5, 2, 'Mettre en œuvre des directives d’architecture dans un projet concret', 'B2', '', '', 'Capacités d’abstraction', 0), +(6, 2, 'Développer et documenter des applications conformément aux besoins du client en utilisant des modèles appropriés de déroulement', 'B3', 'Travail structuré et systématique, capacités d‘abstraction, compétences de modélisation, acquisition d‘informations, développer efficacement, tenir compte de la charge du réseau', 'Travail en groupe, capacités de communication, capacités de critiques, orientation client, disponibilités pour la reprise de l‘existant', 'Penser économies d‘entreprises, persévérance, conscience de la qualité, capacité de compréhension rapide', 0), +(7, 2, 'Implémenter des applications et des interfaces utilisateurs en fonction des besoins du client et du projet', 'B4', 'Orientation client, développement approprié au marché, appliquer des techniques innovatrices', 'Travail en groupe, empathie', 'Capacités innovatrices, créativité', 0), +(8, 2, 'Garantir la qualité des applications', 'B5', 'Travail reproductible, description propres des versions de l‘application, gestion de projets', 'Capacité de critiques et de conflits, empathie', 'Vérification autocritique des résultats, méticulosité', 0), +(9, 2, 'Préparer et mettre en œuvre l’introduction des applications', 'B6', 'Gestion de projets', 'Capacités de communication, travail en réseau, déroulement sensible', 'Conscience de la responsabilité', 0), +(10, 3, 'Identifier et analyser des données, puis développer avec des modèles de données appropriés', 'C1', 'Déroulement structuré, comportement avec des outils de présentation, développement itératif', 'Communication avec des clients, travail en groupe', 'Précision, abstraction, remise en question critique', 0), +(11, 3, 'Mettre en œuvre un modèle de données dans une base de données', 'C2', '', '', 'Capacité d’abstraction', 0), +(12, 3, 'Accéder à des données à partir d’applications avec un langage approprié', 'C3', '', '', '', 0), +(13, 4, 'Installer et configurer, selon des directives, des postes de travail ainsi que des services de serveurs dans l’exploitation locale du réseau', 'D1', 'Considération de la valeur utile, déroulement systématique, check liste, méthode de travail durable économiquement, écologiquement, socialement', 'Orientation client, communication écrite et orale', 'Autoréflexion critique', 0), +(14, 5, 'Préparer, structurer et documenter des travaux et mandats de manière systématique et efficace', 'E1', 'Déroulement structuré, déroulement systématique selon check list, documentation des travaux', 'Travail en groupe, prêt à aider, intérêt global, tenir une conversation en langue étrangère, compréhension des rôles', 'Fiabilité, bon comportement, capacité élevée de charges, s’identifier à l’entreprise', 0), +(15, 5, 'Collaborer à des projets et travailler selon des méthodes de projets', 'E2', 'Méthodes de travail, pensée transversale, considération des variantes, analyse des grandeurs utiles, pensée en réseau, techniques de présentation et de ventes', 'Faculté de travail en groupe, développer et mettre en œuvre selon les besoins, communiquer selon le niveau et les utilisateurs, comportement respectueux et adapté avec les collaborateurs', 'Réflexion, disposé à l‘apprentissage, intérêts, capacité decritiques, capacité d’endurance jusqu’à la conclusion', 0), +(16, 5, 'Dans le cadre de projets, communiquer de manière ciblée et adaptée à l’interlocuteur', 'E3', 'Méthodes de travail, pensée en réseau, techniques de présentation et de ventes', 'Travail en groupe, communiquer conformément au niveau et aux utilisateurs, comportement respectueux et approprié avec toutes les personnes de contact à tous les niveaux, communication précise\r\n', 'Réflexion, prêt à apprendre, intérêt, capacité de critiques, capacité de résistance', 0), +(17, 6, 'Evaluer et mettre en service une place de travail utilisateur', 'A1', 'Analyse des valeurs utiles, déroulement systématique, faire de checklist, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement)', 'Orientation client, communication écrite et orale', 'Conscience de la responsabilité, fiabilité, autoréflexion critique', 0), +(18, 6, 'Installer et synchroniser sur le réseau interne des appareils mobiles des utilisateurs', 'A2', 'Analyse des valeurs utiles, déroulement systématique, faire de checklist, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement)', 'Orientation client, communication écrite et orale, comportement convivial avec le client', 'Conscience de la responsabilité, fiabilité, autoréflexion critique', 0), +(19, 6, 'Connecter et configurer des appareils périphériques', 'A3', 'Analyse des valeurs utiles, déroulement systématique, faire de checklist, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement)', 'Orientation client, communication écrite et orale, langage adapté au client', 'Conscience de la responsabilité, fiabilité, autoréflexion critique', 0), +(20, 7, 'Mettre en service des systèmes serveurs', 'B1', 'Analyse des valeurs utiles, déroulement systématique, faire de checklist, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement)', 'Orientation client, communication écrite et orale', 'Autoréflexion critique', 0), +(21, 7, 'Installer des réseaux et leurs topologies', 'B2', 'Déroulement analytique, principe de Pareto, techniques de visualisation, diagrammes, techniques de décision', 'Faire des entretiens professionnels en anglais', 'Méthode précise de travail, conscience de la responsabilité, capacités d’abstraction', 0), +(22, 7, 'Elaborer et mettre en œuvre des concepts de sécurité des données, de sécurité système et d’archivage', 'B3', 'Actions préventives', 'Conseil', 'Penser et travailler de manière disciplinée, comportement dans les situations de stress', 0), +(23, 8, 'Assurer la maintenance de réseaux et les développer', 'C1', 'déroulement systématique, faire de checklist, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement)', '', 'Précision, fiable, actions attentives', 0), +(24, 8, 'Assurer la maintenance et administrer des serveurs', 'C2', 'Pensée systématique et préventive, considération de l’ensemble, remise en question systématique, travail durable (économiquement, écologiquement, socialement)', 'Travail en groupe, entretien professionnel en anglais', 'Travail patient et autocritique, conscience de la qualité, autoréflexion, éthique, discrétion, discipline', 0), +(25, 8, 'Planifier, mettre en œuvre des services d’annuaires et des autorisations', 'C3', 'Techniques d’interrogation', 'Empathie', 'Comprendre et interpréter des documents anglais', 0), +(26, 8, 'Mettre en service et configurer des services de communication et de soutien des travaux de groupe (groupeware)', 'C4', 'Techniques d’entretien, pensée systématique et préventive, considération de l’ensemble, remise en question systématique', 'Travailler en groupe', 'Travail patient et auto-critique, sens de la qualité, autoreflexion', 0), +(27, 9, 'Instruire et aider les utilisateurs dans l’utilisation des moyens informatiques', 'D1', 'Techniques d’interrogation, déroulement structuré, travailler selon checklist, établir des documents de première aide', 'Capacité de communication, comportement avec autrui en situation de stress, comportement selon le niveau hiérarchique', 'Garder le calme, résistance au stress, maîtriser sa propre nervosité', 0), +(28, 9, 'Assurer des tâches de support par le biais du contact client et résoudre les problèmes sur place', 'D2', 'Techniques d’interrogation, déroulement structuré, travailler selon checklist', 'Capacité de communication, comportement avec autrui en situation de stress, comportement selon le niveau hiérarchique', 'Garder le calme, résistance au stress, maîtriser sa propre nervosité', 0), +(29, 10, 'Elaborer des concepts de tests, mettre en application divers déroulements de tests et tester systématiquement les applications ', 'E1', '', 'Capacité de critique mutuelle', 'Développer préventivement, estimer les conséquences', 0), +(30, 10, 'Développer et documenter des applications de manière conviviale en utilisant des modèles appropriés de déroulement', 'E2', 'Utiliser efficacement l’environnement logiciels, travail systématique et structuré, capacités d’abstraction, compétences en modélisation, acquisition d’informations, développer efficacement, observer la charge du réseau', 'Travail en groupe, capacités de communication, de critique, de compromis, orientation client, disponibilité, reprise de l’existant', 'Pensée économique, capacité de résistance, conscience de la qualité, capacité de saisie rapide', 0), +(31, 10, 'Développer et implémenter des interfaces utilisateurs pour des applications selon les besoins du client', 'E3', 'Orientation client, concept centré sur l’utilisateur, application de techniques innovantes', 'Travail en groupe, empathie', 'Capacité d’innovation, créativité', 0), +(32, 10, 'Mettre en œuvre des modèles de données dans une base de données', 'E4', '', '', 'Capacité d’abstraction', 0), +(33, 10, 'Accéder à des données à partir d’applications avec un langage approprié', 'E5', '', '', '', 0), +(34, 11, 'Préparer, structurer, exécuter et documenter des travaux et des mandats de manière systématique et efficace', 'F1', 'Déroulement structuré, déroulement systématique selon checklist, documentation des travaux', 'Travail en groupe, prêt à aider, intérêt global, tenir une conversation en langue étrangère, compréhension des rôles', 'Fiabilité, bon comportement, capacité élevée de charges, s’identifier à l’entreprise', 0), +(35, 11, 'Collaborer à des projets', 'F2', 'Déroulement structuré, déroulement systématique selon checklist, documentation des travaux', 'Travail en groupe, prêt à aider, intérêt global, tenir une conversation en langue étrangère, compréhension des rôles', 'Fiabilité, bon comportement, capacité élevée de charges, s’identifier à l’entreprise, réfléchir en commun dans le projet', 0), +(36, 11, 'Dans le cadre de projets, communiquer de manière ciblée et adaptée à l’interlocuteur', 'F3', 'Méthodes de travail, pensée en réseau, techniques de présentation et de ventes', 'Travail en groupe, communiquer conformément au niveau et aux utilisateurs, comportement respectueux et approprié avec toutes les personnes de contact à tous les niveaux, communication précise', 'Réflexion, prêt à apprendre, intérêt, capacité de critiques, capacité de résistance', 0), +(42, 12, 'Choisir et mettre en service une place de travail utilisateur', 'A1', 'Analyse des valeurs utiles, déroulement systématique,\r\nfaire des checklists, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement).', 'Orientation client, communication écrite et orale.', 'Conscience de la responsabilité, fiabilité, auto-réflexion critique.', 0), +(43, 12, 'Choisir et mettre en service des systèmes serveurs', 'A2', 'Analyse des valeurs utiles, déroulement systématique, faire des\r\nchecklists, travail durable (économiquement, écologiquement,\r\nsocialement).', 'Orientation client, communication écrite et orale.', 'Auto-réflexion critique.', 0), +(44, 12, 'Choisir des composants réseau et les mettre en service', 'A3', 'Analyse des valeurs utiles, déroulement systématique, faire des\r\nchecklists, technique commerciale, méthode durable de travail\r\n(économiquement, écologiquement, socialement).', 'Communication écrite et orale, empathie, travail en groupe,\r\nlangage adapté au public cible.', 'Auto-réflexion critique, capacités d‘abstraction.', 0), +(45, 13, 'Planifier et installer des réseaux ainsi que leur topologie', 'B1', 'Déroulement analytique, principe de Pareto, techniques de visualisation, diagrammes, techniques de décision.', 'Faire des entretiens professionnels en anglais.', 'Méthode précise de travail, conscience de la responsabilité,\r\ncapacités d’abstraction.', 0), +(46, 13, 'Planifier et assurer la sécurité réseau ainsi que l’accès distant', 'B2', 'Déroulement analytique, principe de Pareto.', 'Reconnaître et classer les besoins en sécurité du client.', 'Travail précis, conscience de la responsabilité.', 0), +(47, 13, 'Surveiller des réseaux et garantir leur sécurité et leur capacité de fonctionnement', 'B3', 'Agir de manière préventive.', 'Conscience de la hiérarchie.', 'Discrétion (comportement avec des données confidentielles), fiabilité, précision.', 0), +(48, 13, 'Planifier, installer et exploiter des systèmes de sauvegarde de données en réseau', 'B4', 'Agir de manière préventive.', '', 'Discrétion (comportement avec des données confidentielles), fiabilité, précision, éthique, discrétion, secret professionnel.', 0), +(49, 14, 'Planifier, mettre en œuvre des services d’annuaires et des autorisations', 'C1', 'Techniques d’interrogation.', 'Empathie.', 'Comprendre et interpréter des documents anglais.', 0), +(50, 14, 'Mettre en service et configurer les services étendus des serveurs', 'C2', 'Techniques d‘entretiens, pensées préventive et systématique,\r\nconsidération globale, remise en question systématique.', 'Travail en groupe.', 'Travail patient et auto-critique, sens de la qualité, auto-réflexion.', 0), +(51, 14, 'Mettre en service et configurer des services de communication ainsi que de soutien des travaux de groupe (groupeware)', 'C3', 'Techniques d’entretien, pensée systématique et préventive,\r\nconsidération de l’ensemble, remise en question systématique.', 'Travailler en groupe.', 'Travail patient et auto-critique, sens de la qualité, auto-réflexion.', 0), +(52, 14, 'Élaborer et mettre en œuvre des concepts de sécurité des données, de sécurité des systèmes et d’archivage', 'C4', 'Actions préventives.', 'Conseil.', 'Penser et travailler de manière disciplinée, comportement dans les situations de stress.', 0), +(53, 14, 'Offrir des services via le réseau en prenant des mesures de sécurité', 'C5', 'Techniques d’entretien, pensée systématique et préventive,\r\nconsidération de l’ensemble, remise en question systématique.', 'Travailler en groupe.', 'Travail patient et auto-critique, sens de la qualité, auto-réflexion.', 0), +(54, 15, 'Assurer la maintenance de réseaux et les développer', 'D1', 'Déroulement systématique, faire des checklists, technique commerciale, méthode durable de travail (économiquement, écologiquement, socialement).', '', 'Précision, fiable, actions attentives.', 0), +(55, 15, 'Assurer la maintenance et administrer des serveurs', 'D2', 'Pensée systématique et préventive, considération de l’ensemble, remise en question systématique, travail durable\r\n(économiquement, écologiquement, socialement).', 'Travail en groupe, entretien professionnel en anglais.', 'Travail patient et autocritique, conscience de la qualité, auto-réflexion, éthique, discrétion, discipline.', 0), +(56, 15, 'Assurer la maintenance et administrer les équipements des utilisateurs', 'D3', 'Pensée systématique et préventive, considération de l’ensemble, remise en question systématique.', 'Travail en groupe, comportement diplomatique avec les utilisateurs.', 'Travail patient et autocritique, conscience de la qualité, auto-réflexion.', 0), +(57, 15, 'Enregistrer, standardiser et automatiser des processus TIC', 'D4', 'Déroulement structuré et orienté objectif, pensée et action préventive.', 'Conseil, comportement dans des situations de stress.', 'Penser et travailler de manière disciplinée.', 0), +(58, 15, 'Planifier, mettre en service et appliquer des systèmes de déploiement pour des applications', 'D5', 'Pensée préventive.', 'Appliquer l’anglais oralement et par écrit.', 'Réflexion, discipline et capacité d‘endurance.', 0), +(59, 16, 'Préparer, structurer et documenter des travaux et mandats de manière systématique et efficace', 'E1', 'Déroulement structuré, déroulement systématique selon checklist, documentation des travaux.', 'Travail en groupe, prêt à aider, intérêt global, tenir une conversation en langue étrangère, compréhension des rôles.', 'Fiabilité, bon comportement, capacité élevée de charges, s’identifier à l’entreprise.', 0), +(60, 16, 'Collaborer à des projets', 'E2', 'Déroulement structuré, déroulement systématique selon checklist, documentation des travaux.', 'Travail en groupe, prêt à aider, intérêt global, tenir une conversation en langue étrangère, compréhension des rôles.', 'Fiabilité, bon comportement, capacité élevée de charges, s’identifier à l’entreprise, réfléchir en commun dans le projet.', 0), +(61, 16, 'Dans le cadre de projets, communiquer de manière ciblée et adaptée à l’interlocuteur', 'E3', 'Méthodes de travail, pensée en réseau, techniques de présentation et de ventes.', 'Travail en groupe, communiquer conformément au niveau et aux utilisateurs, comportement respectueux et approprié avec toutes les personnes de contact à tous les niveaux, communication précise.', 'Réflexion, prêt à apprendre, intérêt, capacité de critiques, capacité de résistance.', 0), +(62, 17, 'Installer et configurer des terminaux ICT utilisateurs ainsi que des systèmes d’exploitation et en assurer la maintenance', 'A1', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, comportement écologique et économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(63, 17, 'Installer et configurer des applications standard', 'A2', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, comportement économique.', '', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(64, 17, 'Exécuter et évaluer des tests de fonctionnalité', 'A3', 'Techniques de travail, comportement économique.', '', 'Autonomie et responsabilité.', 0), +(65, 17, 'Mettre en œuvre des scripts d’automatisation', 'A4', 'Techniques de travail, comportement économique.', '', 'Autonomie et responsabilité.', 0), +(66, 18, 'Connecter à l’infrastructure réseau des périphériques compatibles réseau ainsi que des services connexes et résoudre les pannes', 'B1', 'Techniques de travail, approche et actions interdisciplinaires, comportement économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(67, 18, 'Connecter des terminaux ICT utilisateurs aux prestations de serveur et résoudre les pannes', 'B2', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, comportement économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(68, 18, 'Assurer la sécurité des terminaux ICT utilisateurs', 'B3', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, comportement économique.', 'Capacité à communiquer.', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(69, 19, 'Instruire et soutenir les utilisateurs dans la mise en œuvre des moyens ICT', 'C1', 'Techniques de travail, techniques de présentation, comportement économique.', 'Capacité à communiquer.', 'Capacité à analyser sa pratique, autonomie et responsabilité, résistance au stress, flexibilité.', 0), +(70, 19, 'Élaborer et adapter des modes d’emploi et checklists pour les utilisateurs', 'C2', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, techniques de présentation, comportement économique.', 'Capacité à communiquer.', 'Autonomie et responsabilité, flexibilité.', 0), +(71, 19, 'Conseiller et soutenir les clients lors de l’acquisition d’appareils terminaux ICT', 'C3', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, techniques de présentation, comportement économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, flexibilité.', 0), +(72, 20, 'Traiter les demandes des clients au 1er et 2e niveau du support', 'D1', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, techniques de présentation, stratégies d’information et de communication, économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, résistance au stress, flexibilité, apprentissage tout au long de la vie.', 0), +(73, 20, 'Se comporter de manière adéquate avec les clients et l’équipe', 'D2', 'Techniques de travail, stratégies d’information et de communication.', 'Capacité à communiquer, capacité à gérer des conflits, aptitude au travail en équipe.', 'Capacité à analyser sa pratique, autonomie et responsabilité.', 0), +(74, 20, 'Exécuter, selon des méthodes spécifiques, les travaux dans l’environnement ICT et collaborer à des projets', 'D3', 'Techniques de travail, approche et action interdisciplinaires axées sur les processus, stratégies d’information et de communication, comportement économique.', 'Capacité à communiquer, aptitude au travail en équipe.', 'Autonomie et responsabilité, flexibilité.', 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `trainer_apprentice` +-- + +CREATE TABLE `trainer_apprentice` ( + `id` int(11) NOT NULL, + `fk_trainer` int(11) NOT NULL, + `fk_apprentice` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `user` +-- + +CREATE TABLE `user` ( + `id` int(11) NOT NULL, + `fk_user_type` int(11) NOT NULL, + `username` varchar(45) COLLATE utf8_unicode_ci NOT NULL, + `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `archive` tinyint(4) NOT NULL DEFAULT 0, + `date_creation` timestamp NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Déchargement des données de la table `user` +-- + +INSERT INTO `user` (`id`, `fk_user_type`, `username`, `password`, `archive`, `date_creation`) VALUES +(1, 1, 'admin', '$2y$10$tUB5R1MGgbO.zD//WArnceTY8IgnFkVVsudIdHBxIrEXJ2z3WBvcK', 0, '2020-07-09 06:11:05'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `user_course` +-- + +CREATE TABLE `user_course` ( + `id` int(11) NOT NULL, + `fk_user` int(11) NOT NULL, + `fk_course_plan` int(11) NOT NULL, + `fk_status` int(11) NOT NULL, + `date_begin` date NOT NULL, + `date_end` date NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `user_course_status` +-- + +CREATE TABLE `user_course_status` ( + `id` int(11) NOT NULL, + `name` varchar(20) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Déchargement des données de la table `user_course_status` +-- + +INSERT INTO `user_course_status` (`id`, `name`) VALUES +(1, 'En cours'), +(2, 'Réussi'), +(3, 'Échouée'), +(4, 'Suspendue'), +(5, 'Abandonnée'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `user_type` +-- + +CREATE TABLE `user_type` ( + `id` int(11) NOT NULL, + `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL, + `access_level` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- +-- Déchargement des données de la table `user_type` +-- + +INSERT INTO `user_type` (`id`, `name`, `access_level`) VALUES +(1, 'Administrateur', 4), +(2, 'Formateur', 2), +(3, 'Apprenti', 1); + +-- +-- Index pour les tables déchargées +-- + +-- +-- Index pour la table `acquisition_level` +-- +ALTER TABLE `acquisition_level` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `acquisition_status` +-- +ALTER TABLE `acquisition_status` + ADD PRIMARY KEY (`id`), + ADD KEY `constraint_acquisition_statut_level` (`fk_acquisition_level`), + ADD KEY `constraint_objective_acquisition_statut` (`fk_objective`), + ADD KEY `constraint_user_acquisition_statut` (`fk_user_course`); + +-- +-- Index pour la table `ci_sessions` +-- +ALTER TABLE `ci_sessions` + ADD KEY `ci_sessions_timestamp` (`timestamp`); + +-- +-- Index pour la table `comment` +-- +ALTER TABLE `comment` + ADD PRIMARY KEY (`id`), + ADD KEY `fk_acquisition_status` (`fk_acquisition_status`), + ADD KEY `fk_trainer` (`fk_trainer`); + +-- +-- Index pour la table `competence_domain` +-- +ALTER TABLE `competence_domain` + ADD PRIMARY KEY (`id`), + ADD KEY `constraint_competence_domain_course_plan` (`fk_course_plan`); + +-- +-- Index pour la table `course_plan` +-- +ALTER TABLE `course_plan` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `objective` +-- +ALTER TABLE `objective` + ADD PRIMARY KEY (`id`), + ADD KEY `constraint_operational_competence` (`fk_operational_competence`); + +-- +-- Index pour la table `operational_competence` +-- +ALTER TABLE `operational_competence` + ADD PRIMARY KEY (`id`), + ADD KEY `constraint_domain_operational` (`fk_competence_domain`); + +-- +-- Index pour la table `trainer_apprentice` +-- +ALTER TABLE `trainer_apprentice` + ADD PRIMARY KEY (`id`), + ADD KEY `fk_trainer` (`fk_trainer`,`fk_apprentice`), + ADD KEY `fk_apprentice` (`fk_apprentice`); + +-- +-- Index pour la table `user` +-- +ALTER TABLE `user` + ADD PRIMARY KEY (`id`), + ADD KEY `fk_user_user_type1_idx` (`fk_user_type`); + +-- +-- Index pour la table `user_course` +-- +ALTER TABLE `user_course` + ADD PRIMARY KEY (`id`), + ADD KEY `constraint_user` (`fk_user`), + ADD KEY `constraint_user_course_plan` (`fk_course_plan`), + ADD KEY `constraint_status` (`fk_status`); + +-- +-- Index pour la table `user_course_status` +-- +ALTER TABLE `user_course_status` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `user_type` +-- +ALTER TABLE `user_type` + ADD PRIMARY KEY (`id`); + +-- +-- AUTO_INCREMENT pour les tables déchargées +-- + +-- +-- AUTO_INCREMENT pour la table `acquisition_status` +-- +ALTER TABLE `acquisition_status` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `comment` +-- +ALTER TABLE `comment` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `competence_domain` +-- +ALTER TABLE `competence_domain` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21; + +-- +-- AUTO_INCREMENT pour la table `course_plan` +-- +ALTER TABLE `course_plan` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; + +-- +-- AUTO_INCREMENT pour la table `objective` +-- +ALTER TABLE `objective` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=333; + +-- +-- AUTO_INCREMENT pour la table `operational_competence` +-- +ALTER TABLE `operational_competence` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=75; + +-- +-- AUTO_INCREMENT pour la table `trainer_apprentice` +-- +ALTER TABLE `trainer_apprentice` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `user` +-- +ALTER TABLE `user` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- AUTO_INCREMENT pour la table `user_course` +-- +ALTER TABLE `user_course` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `user_course_status` +-- +ALTER TABLE `user_course_status` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; + +-- +-- AUTO_INCREMENT pour la table `user_type` +-- +ALTER TABLE `user_type` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; + +-- +-- Contraintes pour les tables déchargées +-- + +-- +-- Contraintes pour la table `acquisition_status` +-- +ALTER TABLE `acquisition_status` + ADD CONSTRAINT `constraint_acquisition_statut_level` FOREIGN KEY (`fk_acquisition_level`) REFERENCES `acquisition_level` (`id`), + ADD CONSTRAINT `constraint_objective_acquisition_statut` FOREIGN KEY (`fk_objective`) REFERENCES `objective` (`id`), + ADD CONSTRAINT `constraint_user_acquisition_statut` FOREIGN KEY (`fk_user_course`) REFERENCES `user_course` (`id`); + +-- +-- Contraintes pour la table `comment` +-- +ALTER TABLE `comment` + ADD CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`fk_acquisition_status`) REFERENCES `acquisition_status` (`id`), + ADD CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`fk_trainer`) REFERENCES `user` (`id`); + +-- +-- Contraintes pour la table `competence_domain` +-- +ALTER TABLE `competence_domain` + ADD CONSTRAINT `constraint_competence_domain_course_plan` FOREIGN KEY (`fk_course_plan`) REFERENCES `course_plan` (`id`); + +-- +-- Contraintes pour la table `objective` +-- +ALTER TABLE `objective` + ADD CONSTRAINT `constraint_operational_competence` FOREIGN KEY (`fk_operational_competence`) REFERENCES `operational_competence` (`id`); + +-- +-- Contraintes pour la table `operational_competence` +-- +ALTER TABLE `operational_competence` + ADD CONSTRAINT `constraint_domain_operational` FOREIGN KEY (`fk_competence_domain`) REFERENCES `competence_domain` (`id`); + +-- +-- Contraintes pour la table `trainer_apprentice` +-- +ALTER TABLE `trainer_apprentice` + ADD CONSTRAINT `trainer_apprentice_ibfk_1` FOREIGN KEY (`fk_trainer`) REFERENCES `user` (`id`), + ADD CONSTRAINT `trainer_apprentice_ibfk_2` FOREIGN KEY (`fk_apprentice`) REFERENCES `user` (`id`); + +-- +-- Contraintes pour la table `user` +-- +ALTER TABLE `user` + ADD CONSTRAINT `fk_user_user_type1` FOREIGN KEY (`fk_user_type`) REFERENCES `user_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- +-- Contraintes pour la table `user_course` +-- +ALTER TABLE `user_course` + ADD CONSTRAINT `constraint_status` FOREIGN KEY (`fk_status`) REFERENCES `user_course_status` (`id`), + ADD CONSTRAINT `constraint_user` FOREIGN KEY (`fk_user`) REFERENCES `user` (`id`), + ADD CONSTRAINT `constraint_user_course_plan` FOREIGN KEY (`fk_course_plan`) REFERENCES `course_plan` (`id`); +SET FOREIGN_KEY_CHECKS=1; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/database/SAMPLE_DATAS.sql b/database/SAMPLE_DATAS.sql new file mode 100644 index 00000000..7d7994ef --- /dev/null +++ b/database/SAMPLE_DATAS.sql @@ -0,0 +1,297 @@ +-- phpMyAdmin SQL Dump +-- version 4.9.0.1 +-- https://www.phpmyadmin.net/ +-- +-- Hôte : 127.0.0.1 +-- Généré le : jeu. 09 juil. 2020 à 13:49 +-- Version du serveur : 10.4.6-MariaDB +-- Version de PHP : 7.3.9 + +SET FOREIGN_KEY_CHECKS=0; +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `plafor` +-- +CREATE DATABASE IF NOT EXISTS `plafor` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE `plafor`; + +-- +-- Déchargement des données de la table `acquisition_status` +-- + +INSERT INTO `acquisition_status` (`id`, `fk_objective`, `fk_user_course`, `fk_acquisition_level`) VALUES +(1, 1, 1, 1), +(2, 2, 1, 1), +(3, 3, 1, 1), +(4, 4, 1, 1), +(5, 5, 1, 1), +(6, 6, 1, 1), +(7, 7, 1, 1), +(8, 8, 1, 1), +(9, 9, 1, 1), +(10, 10, 1, 1), +(11, 11, 1, 1), +(12, 12, 1, 1), +(13, 13, 1, 1), +(14, 14, 1, 1), +(15, 15, 1, 1), +(16, 16, 1, 1), +(17, 17, 1, 1), +(18, 18, 1, 1), +(19, 19, 1, 1), +(20, 20, 1, 1), +(21, 21, 1, 1), +(22, 22, 1, 1), +(23, 23, 1, 1), +(24, 24, 1, 1), +(25, 25, 1, 1), +(26, 26, 1, 1), +(27, 27, 1, 1), +(28, 28, 1, 1), +(29, 29, 1, 1), +(30, 30, 1, 1), +(31, 31, 1, 1), +(32, 32, 1, 1), +(33, 33, 1, 1), +(34, 34, 1, 1), +(35, 35, 1, 1), +(36, 36, 1, 1), +(37, 37, 1, 1), +(38, 38, 1, 1), +(39, 39, 1, 1), +(40, 40, 1, 1), +(41, 41, 1, 1), +(42, 42, 1, 1), +(43, 43, 1, 1), +(44, 44, 1, 1), +(45, 45, 1, 1), +(46, 46, 1, 1), +(47, 47, 1, 1), +(48, 48, 1, 1), +(49, 49, 1, 1), +(50, 50, 1, 1), +(51, 51, 1, 1), +(52, 52, 1, 1), +(53, 53, 1, 1), +(54, 54, 1, 1), +(55, 55, 1, 1), +(56, 56, 1, 1), +(57, 57, 1, 1), +(58, 58, 1, 1), +(59, 59, 1, 1), +(60, 60, 1, 1), +(61, 61, 1, 1), +(62, 62, 1, 1), +(63, 63, 1, 1), +(64, 64, 1, 1), +(65, 65, 1, 1), +(66, 66, 1, 1), +(67, 67, 1, 1), +(68, 68, 1, 1), +(69, 69, 1, 1), +(70, 70, 1, 1), +(71, 71, 1, 1), +(72, 72, 1, 1), +(73, 73, 1, 1), +(74, 177, 2, 1), +(75, 178, 2, 1), +(76, 179, 2, 1), +(77, 180, 2, 1), +(78, 181, 2, 1), +(79, 182, 2, 1), +(80, 183, 2, 1), +(81, 184, 2, 1), +(82, 185, 2, 1), +(83, 186, 2, 1), +(84, 187, 2, 1), +(85, 188, 2, 1), +(86, 189, 2, 1), +(87, 190, 2, 1), +(88, 191, 2, 1), +(89, 192, 2, 1), +(90, 193, 2, 1), +(91, 194, 2, 1), +(92, 195, 2, 1), +(93, 196, 2, 1), +(94, 197, 2, 1), +(95, 198, 2, 1), +(96, 199, 2, 1), +(97, 200, 2, 1), +(98, 201, 2, 1), +(99, 202, 2, 1), +(100, 203, 2, 1), +(101, 204, 2, 1), +(102, 205, 2, 1), +(103, 206, 2, 1), +(104, 207, 2, 1), +(105, 208, 2, 1), +(106, 209, 2, 1), +(107, 210, 2, 1), +(108, 211, 2, 1), +(109, 212, 2, 1), +(110, 213, 2, 1), +(111, 214, 2, 1), +(112, 215, 2, 1), +(113, 216, 2, 1), +(114, 217, 2, 1), +(115, 218, 2, 1), +(116, 219, 2, 1), +(117, 220, 2, 1), +(118, 221, 2, 1), +(119, 222, 2, 1), +(120, 223, 2, 1), +(121, 224, 2, 1), +(122, 225, 2, 1), +(123, 226, 2, 1), +(124, 227, 2, 1), +(125, 228, 2, 1), +(126, 229, 2, 1), +(127, 230, 2, 1), +(128, 231, 2, 1), +(129, 232, 2, 1), +(130, 233, 2, 1), +(131, 234, 2, 1), +(132, 235, 2, 1), +(133, 236, 2, 1), +(134, 237, 2, 1), +(135, 238, 2, 1), +(136, 239, 2, 1), +(137, 240, 2, 1), +(138, 241, 2, 1), +(139, 242, 2, 1), +(140, 243, 2, 1), +(141, 244, 2, 1), +(142, 245, 2, 1), +(143, 246, 2, 1), +(144, 247, 2, 1), +(145, 248, 2, 1), +(146, 249, 2, 1), +(147, 250, 2, 1), +(148, 251, 2, 1), +(149, 252, 2, 1), +(150, 253, 2, 1), +(151, 254, 2, 1), +(152, 255, 2, 1), +(153, 256, 2, 1), +(154, 257, 2, 1), +(155, 258, 2, 1), +(156, 259, 2, 1), +(157, 260, 2, 1), +(158, 261, 2, 1), +(159, 262, 2, 1), +(160, 263, 2, 1), +(161, 264, 2, 1), +(162, 265, 2, 1), +(163, 266, 2, 1), +(164, 267, 3, 1), +(165, 268, 3, 1), +(166, 269, 3, 1), +(167, 270, 3, 1), +(168, 271, 3, 1), +(169, 272, 3, 1), +(170, 273, 3, 1), +(171, 274, 3, 1), +(172, 275, 3, 1), +(173, 276, 3, 1), +(174, 277, 3, 1), +(175, 278, 3, 1), +(176, 279, 3, 1), +(177, 280, 3, 1), +(178, 281, 3, 1), +(179, 282, 3, 1), +(180, 283, 3, 1), +(181, 284, 3, 1), +(182, 285, 3, 1), +(183, 286, 3, 1), +(184, 287, 3, 1), +(185, 288, 3, 1), +(186, 289, 3, 1), +(187, 290, 3, 1), +(188, 291, 3, 1), +(189, 292, 3, 1), +(190, 293, 3, 1), +(191, 294, 3, 1), +(192, 295, 3, 1), +(193, 296, 3, 1), +(194, 297, 3, 1), +(195, 298, 3, 1), +(196, 299, 3, 1), +(197, 300, 3, 1), +(198, 301, 3, 1), +(199, 302, 3, 1), +(200, 303, 3, 1), +(201, 304, 3, 1), +(202, 305, 3, 1), +(203, 306, 3, 1), +(204, 307, 3, 1), +(205, 308, 3, 1), +(206, 309, 3, 1), +(207, 310, 3, 1), +(208, 311, 3, 1), +(209, 312, 3, 1), +(210, 313, 3, 1), +(211, 314, 3, 1), +(212, 315, 3, 1), +(213, 316, 3, 1), +(214, 317, 3, 1), +(215, 318, 3, 1), +(216, 319, 3, 1), +(217, 320, 3, 1), +(218, 321, 3, 1), +(219, 322, 3, 1), +(220, 323, 3, 1), +(221, 324, 3, 1), +(222, 325, 3, 1), +(223, 326, 3, 1), +(224, 327, 3, 1), +(225, 328, 3, 1), +(226, 329, 3, 1), +(227, 330, 3, 1), +(228, 331, 3, 1), +(229, 332, 3, 1); + +-- +-- Déchargement des données de la table `trainer_apprentice` +-- + +INSERT INTO `trainer_apprentice` (`id`, `fk_trainer`, `fk_apprentice`) VALUES +(1, 2, 4), +(2, 3, 5), +(3, 6, 7); + +-- +-- Déchargement des données de la table `user` +-- + +INSERT INTO `user` (`id`, `fk_user_type`, `username`, `password`, `archive`, `date_creation`) VALUES +(2, 2, 'FormateurDev', '$2y$10$Q3H8WodgKonQ60SIcu.eWuVKXmxqBw1X5hMpZzwjRKyCTB1H1l.pe', 0, '2020-07-09 11:15:24'), +(3, 2, 'FormateurSysteme', '$2y$10$v8qCvWlas8DvVkOxY6k4JufPAxFvJxYRLU0tMMbSJYNQjos27RHMK', 0, '2020-07-09 11:15:47'), +(4, 3, 'ApprentiDev', '$2y$10$6TLaMd5ljshybxANKgIYGOjY0Xur9EgdzcEPy1bgy2b8uyWYeVoEm', 0, '2020-07-09 11:16:05'), +(5, 3, 'ApprentiSysteme', '$2y$10$m..hDbyG41hMRak6Y/b/pO7n3bgy/V2mnATpRvWzrY2rXrXbm6nbi', 0, '2020-07-09 11:16:27'), +(6, 2, 'FormateurOperateur', '$2y$10$SbMYPxqnngLjxVGlG4hW..lrc.pr5Dd74nY.KqdANtEESIvmGRpWi', 0, '2020-07-09 11:24:22'), +(7, 3, 'ApprentiOperateur', '$2y$10$jPNxV2ZZ6Il2LiBQ.CWhNOoud6NsMRFILwHN8kpD410shWeiGpuxK', 0, '2020-07-09 11:24:45'); + +-- +-- Déchargement des données de la table `user_course` +-- + +INSERT INTO `user_course` (`id`, `fk_user`, `fk_course_plan`, `fk_status`, `date_begin`, `date_end`) VALUES +(1, 4, 1, 1, '2020-07-09', '0000-00-00'), +(2, 5, 3, 1, '2020-07-09', '0000-00-00'), +(3, 7, 4, 1, '2020-07-09', '0000-00-00'); +SET FOREIGN_KEY_CHECKS=0; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/database/core.sql b/database/core.sql deleted file mode 100644 index ed0fa279..00000000 --- a/database/core.sql +++ /dev/null @@ -1,52 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.9.0.1 --- https://www.phpmyadmin.net/ --- --- Version du serveur : 10.4.6-MariaDB --- Version de PHP : 7.3.9 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET AUTOCOMMIT = 0; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Base de données : `ci_packbase` --- -CREATE DATABASE IF NOT EXISTS `ci_packbase_hmvc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -USE `ci_packbase_hmvc`; - --- -------------------------------------------------------- - --- --- Structure de la table `ci_sessions` --- - -CREATE TABLE `ci_sessions` ( - `id` varchar(128) NOT NULL, - `ip_address` varchar(45) NOT NULL, - `timestamp` int(10) UNSIGNED NOT NULL DEFAULT 0, - `data` blob NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- --- Index pour les tables déchargées --- - --- --- Index pour la table `ci_sessions` --- -ALTER TABLE `ci_sessions` - ADD KEY `ci_sessions_timestamp` (`timestamp`); - -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/database/plafor_beginning_database.sql b/database/plafor_beginning_database.sql deleted file mode 100644 index cfae3700..00000000 --- a/database/plafor_beginning_database.sql +++ /dev/null @@ -1,133 +0,0 @@ --- phpMyAdmin SQL Dump --- version 5.0.1 --- https://www.phpmyadmin.net/ --- --- Hôte : 127.0.0.1 --- Généré le : lun. 30 mars 2020 à 10:47 --- Version du serveur : 10.4.11-MariaDB --- Version de PHP : 7.4.3 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET AUTOCOMMIT = 0; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Base de données : `plafor` --- - --- -------------------------------------------------------- - --- --- Structure de la table `ci_sessions` --- - -CREATE TABLE `ci_sessions` ( - `id` varchar(128) NOT NULL, - `ip_address` varchar(45) NOT NULL, - `timestamp` int(10) UNSIGNED NOT NULL DEFAULT 0, - `data` blob NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Structure de la table `user` --- - -CREATE TABLE `user` ( - `id` int(11) NOT NULL, - `fk_user_type` int(11) NOT NULL, - `username` varchar(45) COLLATE utf8_unicode_ci NOT NULL, - `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `archive` tinyint(4) NOT NULL DEFAULT 0, - `date_creation` timestamp NOT NULL DEFAULT current_timestamp() -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Déchargement des données de la table `user` --- - -INSERT INTO `user` (`id`, `fk_user_type`, `username`, `password`, `archive`, `date_creation`) VALUES -(1, 1, 'admin', '$2y$12$vzMjlepZ8iODjC1Y1scl/OLkRuZe7za6Cx6srHr7iQ49z7e3BmtgG', 0, '2020-03-30 08:33:55'); - --- -------------------------------------------------------- - --- --- Structure de la table `user_type` --- - -CREATE TABLE `user_type` ( - `id` int(11) NOT NULL, - `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL, - `access_level` int(11) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Déchargement des données de la table `user_type` --- - -INSERT INTO `user_type` (`id`, `name`, `access_level`) VALUES -(1, 'Administrateur', 4), -(2, 'Enregistré', 2), -(3, 'Invité', 1); - --- --- Index pour les tables déchargées --- - --- --- Index pour la table `ci_sessions` --- -ALTER TABLE `ci_sessions` - ADD KEY `ci_sessions_timestamp` (`timestamp`); - --- --- Index pour la table `user` --- -ALTER TABLE `user` - ADD PRIMARY KEY (`id`), - ADD KEY `fk_user_user_type1_idx` (`fk_user_type`); - --- --- Index pour la table `user_type` --- -ALTER TABLE `user_type` - ADD PRIMARY KEY (`id`); - --- --- AUTO_INCREMENT pour les tables déchargées --- - --- --- AUTO_INCREMENT pour la table `user` --- -ALTER TABLE `user` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; - --- --- AUTO_INCREMENT pour la table `user_type` --- -ALTER TABLE `user_type` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; - --- --- Contraintes pour les tables déchargées --- - --- --- Contraintes pour la table `user` --- -ALTER TABLE `user` - ADD CONSTRAINT `fk_user_user_type1` FOREIGN KEY (`fk_user_type`) REFERENCES `user_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/documentation/Gantt.gan b/documentation/Gantt.gan new file mode 100644 index 00000000..da469d75 --- /dev/null +++ b/documentation/Gantt.gan @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/database/plaforMCD.graphml b/documentation/database/plaforMCD.graphml new file mode 100644 index 00000000..466141e7 --- /dev/null +++ b/documentation/database/plaforMCD.graphml @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + user + + id - int(11) PRIMARY KEY +fk_user_type - int(11) FOREIGN KEY +username - varchar(45) +password - varchar(225) +archive - tinyint(4) +date_creation - timestamp + + + + + + + + + + + + + user_type + + id - int(11) PRIMARY KEY +name - varchar(45) +access_level - int(11) + + + + + + + + + + + + + course_plan + + id - int(11) PRIMARY KEY +formation_number - varchar(5) +official_name - varchar(100) +date_begin - date +archive - tinyint(4) + + + + + + + + + + + + + competence_domain + + id - int(11) PRIMARY KEY +symbol - varchar(10) +name - varchar(100) +archive - tinyint(4) + + + + + + + + + + + + + acquisition_status + + id - int(11) PRIMARY KEY +fk_objective - int(11) +fk_user_course - int(11) +fk_acquisition_level - int(11) + + + + + + + + + + + + + user_course_status + + id - int(11) PRIMARY INT +name - varchar(20) + + + + + + + + + + + + + operational_competence + + id - int(11) PRIMARY KEY +name - varchar(150) +symbol - varchar(10) +methodologic - text +social - text +personal - text +archive - tinyint(4) + + + + + + + + + + + + + user_course + + + + + + + + + + + + acquisition_level + + id - int(11) PRIMARY KEY +name - varchar(20) + + + + + + + + + + + + + trainer_apprentice + + + + + + + + + + + + comment + + + + + + + + + + + + objective + + id - int(11) PRIMARY INT +fk_operational_competence - int(11) FOREIGN KEY +symbol - varchar(10) +taxonomy - int(5) +name - varchar(350) +archive - tinyint(4) + + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 +.. +N + + + + + + + + + + + N +.. +1 + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 .. N + + + + + + + + + + + N +.. +1 + + + + + + + + + + + N .. 1 + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 .. N + + + + + + + + + + + N .. 1 + + + + + + + + + + + N +.. +1 + + + + + + + + + + + + + 1 .. N + + + + + + + + + + + + + N .. 1 + + + + + + + + + + + + + 1 .. N + + + + + + + + + diff --git a/documentation/database/plaforMLD.graphml b/documentation/database/plaforMLD.graphml new file mode 100644 index 00000000..18fa1d0c --- /dev/null +++ b/documentation/database/plaforMLD.graphml @@ -0,0 +1,413 @@ + + + + + + + + + + + + + + + + + + + + + + + + user + + id - int(11) PRIMARY KEY +fk_user_type - int(11) FOREIGN KEY +username - varchar(45) +password - varchar(225) +archive - tinyint(4) +date_creation - timestamp + + + + + + + + + + + + + user_type + + id - int(11) PRIMARY KEY +name - varchar(45) +access_level - int(11) + + + + + + + + + + + + + course_plan + + id - int(11) PRIMARY KEY +formation_number - varchar(5) +official_name - varchar(100) +date_begin - date +archive - tinyint(4) + + + + + + + + + + + + + competence_domain + + id - int(11) PRIMARY KEY +fk_course_plan - int(11) FOREIGN KEY +symbol - varchar(10) +name - varchar(100) +archive - tinyint(4) + + + + + + + + + + + + + acquisition_status + + id - int(11) PRIMARY KEY +fk_objective - int(11) +fk_user_course - int(11) +fk_acquisition_level - int(11) + + + + + + + + + + + + + objective + + id - int(11) PRIMARY INT +fk_operational_competence - int(11) FOREIGN KEY +symbol - varchar(10) +taxonomy - int(5) +name - varchar(350) +archive - tinyint(4) + + + + + + + + + + + + + user_course_status + + id - int(11) PRIMARY INT +name - varchar(20) + + + + + + + + + + + + + operational_competence + + id - int(11) PRIMARY KEY +fk_competence_domain - int(11) +name - varchar(150) +symbol - varchar(10) +methodologic - text +social - text +personal - text +archive - tinyint(4) + + + + + + + + + + + + + user_course + + id - PRIMARY KEY +fk_user - int(11) FOREIGN KEY +fk_course_plan - int(11) FOREIGN KEY +fk_status - int(11) FOREIGN KEY +date_begin - date +date_end - date +archive - tinyint(4) + + + + + + + + + + + + + acquisition_level + + id - int(11) PRIMARY KEY +name - varchar(20) + + + + + + + + + + + + + comment + + id - int(11) PRIMARY KEY +fk_trainer - int(11) FOREIGN KEY +fk_acquisition_status - int(11) FOREIGN KEY +comment - text +date_creation - datetime + + + + + + + + + + + + + trainer_apprentice + + id - int(11) PRIMARY KEY +fk_trainer - int(11) FOREIGN KEY +fk_apprentice - int(11) FOREIGN KEY + + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 +.. +N + + + + + + + + + + + N +.. +1 + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 .. N + + + + + + + + + + + N +.. +1 + + + + + + + + + + + N .. 1 + + + + + + + + + + + 1 .. N + + + + + + + + + + + 1 .. N + + + + + + + + + + + N .. 1 + + + + + + + + + + + N +.. +1 + + + + + + + + + + + + + 1 .. N + + + + + + + + + + + + + N .. 1 + + + + + + + + + + + + + 1 .. N + + + + + + + + + diff --git a/documentation/pages/plaforNavigation.graphml b/documentation/pages/plaforNavigation.graphml new file mode 100644 index 00000000..c95c1a6b --- /dev/null +++ b/documentation/pages/plaforNavigation.graphml @@ -0,0 +1,743 @@ + + + + + + + + + + + + + + + + + + + + + + + Home Page +(offline) + + + + + + + + + + Login Page + + + + + + + + + + Login Attempt + + + + + + + + + + User +Level +Check + + + + + + + + + + Administration + + + + + + + + + + Password +Change + + + + + + + + + + + + + + + + + + Logoff + + + + + + + + + + + + + + + + + + Logged +as Admin + + + + + + + + + + Logged as +Instructor + + + + + + + + + + Logged as +Apprentice + + + + + + + + + + Apprentices +List + + + + + + + + + + Apprentices +List (All) + + + + + + + + + + Apprentices List +(Linked Only) + + + + + + + + + + Password +Change +Attempt + + + + + + + + + + Password +Change +Form + + + + + + + + + + Home + + + + + + + + + + User List +(Add/Edit/Delete) + + + + + + + + + + + + + + + + + + Course List +(Add/Edit/Delete) + + + + + + + + + + Domains List +(Add/Edit/Delete) + + + + + + + + + + Objective List +(Add/Edit/Delete) + + + + + + + + + + Operational List +(Add/Edit/Delete) + + + + + + + + + + Apprentice +Details + + + + + + + + + + Set status + + + + + + + + + + + + + + + + + + Add Comment + + + + + + + + + + Course(s) Linked to user +(Add/Delete) + + + + + + + + + + Domains Linked to course +(Add/Delete) + + + + + + + + + + Operationals Linked to domain +(Add/Delete) + + + + + + + + + + Objectives Linked to operational +(Add/Delete) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Success + + + + + + + + + + + + + + Failure +(Username and/or +password wrong) + + + + + + + + + + + Admin + + + + + + + + + + + Instructor + + + + + + + + + + + Apprentice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Failure +(Old Password Wrong or Missing, +New Password Missing or Not +Written Twice) + + + + + + + + + + + + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php deleted file mode 100644 index b4e56bda..00000000 --- a/tests/Bootstrap.php +++ /dev/null @@ -1,76 +0,0 @@ -= 3.5.6 - - pear channel-discover pear.phpunit.de - pear channel-discover pear.symfony.com - pear install phpunit/PHPUnit - -vfsStream - - pear channel-discover pear.bovigo.org - pear install bovigo/vfsStream-beta - -#### Installation of PEAR and PHPUnit on Ubuntu - - Installation on Ubuntu requires a few steps. Depending on your setup you may - need to use 'sudo' to install these. Mileage may vary but these steps are a - good start. - - # Install the PEAR package - sudo apt-get install php-pear - - # Add a few sources to PEAR - pear channel-discover pear.phpunit.de - pear channel-discover pear.symfony-project.com - pear channel-discover components.ez.no - pear channel-discover pear.bovigo.org - - # Finally install PHPUnit and vfsStream (including dependencies) - pear install --alldeps phpunit/PHPUnit - pear install --alldeps bovigo/vfsStream-beta - - # Finally, run 'phpunit' from within the ./tests directory - # and you should be on your way! - -## Test Suites: - -CodeIgniter bootstraps a request very directly, with very flat class -hierarchy. As a result, there is no main CodeIgniter class until the -controller is instantiated. - -This has forced the core classes to be relatively decoupled, which is -a good thing. However, it makes that portion of code relatively hard -to test. - -Right now that means we'll probably have two core test suites, along -with a base for application and package tests. That gives us: - -1. Bootstrap Test - test common.php and sanity check codeigniter.php [in planning] -2. System Test - test core components in relative isolation [in development] -3. Application Test - bootstrapping for application/tests [not started] -4. Package Test - bootstrapping for /tests [not started] - -### Test Environment: - -The test/Bootstrap.php file establishes global constants such as BASEPATH, -APPPATH, and VIEWPATH, initializing them to point to VFS locations. The -test case class employs vfsStream to make a clean virtual filesystem with -the necessary paths for every individual test. - -Within each test case, VFS directory objects are available to use as arguments -to the VFS convenience functions (see below): - -- ci_vfs_root: VFS filesystem root -- ci_app_root: Application directory -- ci_base_root: System directory -- ci_view_root: Views directory - -Classes being instantiated for testing are read from the actual filesystem -by the unit test autoloader, as are mockups created in tests/mocks. If you -need access to the real system directory, the SYSTEM_PATH constant always -points to it. - -Any other resources which need to be read from the path constants must be -created or cloned within your test. Functions for doing so are outlined -below. - -### CI_TestCase Documentation - -Test cases should extend CI_TestCase. This internally extends -PHPUnit\_Framework\_TestCase, so you have access to all of your -usual PHPUnit methods. - -We need to provide a simple way to modify the globals and the -common function output. We also need to be able to mock up -the super object as we please. - -Current API is *not stable*. Names and implementations will change. - - $this->ci_set_config($key, $val) - -Set the global config variables in a mock Config object. If key is an array, -it will replace the entire config array. They are _not_ merged. If called -without any parameters, it will create the mock object but not set any values. -The mock Config object also provides rudimentary item() and load() stubs for -delivering configured values to classes being tested and handling config load -calls, respectively. The load() stub does _not_ actually load any files, it -only records the filename provided. Check the config->loaded array to verify -calls made. - - $this->ci_instance($obj) - -Set the object to use as the "super object", in a lot -of cases this will be a simple stdClass with the attributes -you need it to have. If no parameter, will return the instance. - - $this->ci_instance_var($name, $val) - -Add an attribute to the super object. This is useful if you -set up a simple instance in setUp and then need to add different -class mockups to your super object. - - $this->ci_core_class($name) - -Get the _class name_ of a core class, so that you can instantiate -it. The variable is returned by reference and is tied to the correct -$GLOBALS key. For example: - - $cfg =& $this->ci_core_class('cfg'); // returns 'CI_Config' - $cfg = new $cfg; // instantiates config and overwrites the CFG global - - $this->ci_set_core_class($name, $obj) - -An alternative way to set one of the core globals. - - $this->ci_vfs_mkdir($name, $root) - -Creates a new directory in the test VFS. Pass a directory object to be the -parent directory or none to create a root-level directory. Returns the new -directory object. - - $this->ci_vfs_create($file, $content, $root, $path) - -Creates a new VFS file. '.php' is automatically appended to the filename if -it has no extension. Pass a directory object as the root, and an optional path -to recurse and/or create for containing the file. Path may be a string (such -as 'models/subdir') or an array (e.g. - array('models', 'subdir') ). Existing -directories in the VFS root will be recursed until a new directory is -identified - all others in the path will be created, so you can mix-and-match -old and new directories. If $file is an array (key = name, value = content), -multiple files will be created in the same path. - - $this->ci_vfs_clone($path) - -Clones an existing file from the real filesystem to exist in the same path of -the VFS. Path must be relative to the project root (i.e. - starting with -'system' or 'application'). - - $this->ci_vfs_path($path, $base) - -Creates a VFS file path string suitable for use with PHP file operations. Path -may be absolute from the VFS root, or relative to a base path. It is often -useful to use APPPATH or BASEPATH as the base. - - $this->helper($name) - -Loads a helper from the real filesystem. - - $this->lang($name) - -Loads a language file from the real filesystem and returns the $lang array. - - $this->ci_get_config() __internal__ - -Returns the global config array. Internal as you shouldn't need to -call this (you're setting it, after all). Used internally to make -CI's get_config() work. - - CI_TestCase::instance() __internal__ - -Returns an instance of the current test case. We force phpunit to -run with backup-globals enabled, so this will always be the instance -of the currently running test class. - -### Going forward - -#### 1. Bootstrap Test - -Testing common.php should be pretty simple. Include the file, and test the -functions. May require some tweaking so that we can grab the statics from all -methods (see is_loaded()). Testing the actual CodeIgniter.php file will most -likely be an output test for the default view, with some object checking after -the file runs. Needs consideration. - -#### 2. System Test - -Testing the core system relies on being able to isolate the core components -as much as possible. A few of them access other core classes as globals. These -should be mocked up and easy to manipulate. - -All functions in common.php should be a minimal implementation, or and mapped -to a method in the test's parent class to gives us full control of their output. - -#### 3. Application Test: - -Not sure yet, needs to handle: - -- Libraries -- Helpers -- Models -- MY_* files -- Controllers (uh...?) -- Views? (watir, selenium, cucumber?) -- Database Testing - -#### 4. Package Test: - -I don't have a clue how this will work. - -Needs to be able to handle packages -that are used multiple times within the application (i.e. EE/Pyro modules) -as well as packages that are used by multiple applications (library distributions) \ No newline at end of file diff --git a/tests/mocks/autoloader.php b/tests/mocks/autoloader.php deleted file mode 100644 index 11825de2..00000000 --- a/tests/mocks/autoloader.php +++ /dev/null @@ -1,119 +0,0 @@ - 'bm', - 'config' => 'cfg', - 'hooks' => 'ext', - 'utf8' => 'uni', - 'router' => 'rtr', - 'output' => 'out', - 'security' => 'sec', - 'input' => 'in', - 'lang' => 'lang', - 'loader' => 'load', - 'model' => 'model' - ); - - // -------------------------------------------------------------------- - - public function __construct($name = null, array $data = array(), $dataName = '') - { - parent::__construct($name, $data, $dataName); - $this->ci_instance = new stdClass(); - } - - // -------------------------------------------------------------------- - - public function setUp() - { - // Setup VFS with base directories - $this->ci_vfs_root = vfsStream::setup(); - $this->ci_app_root = vfsStream::newDirectory('application')->at($this->ci_vfs_root); - $this->ci_base_root = vfsStream::newDirectory('system')->at($this->ci_vfs_root); - $this->ci_view_root = vfsStream::newDirectory('views')->at($this->ci_app_root); - - if (method_exists($this, 'set_up')) - { - $this->set_up(); - } - } - - // -------------------------------------------------------------------- - - public function tearDown() - { - if (method_exists($this, 'tear_down')) - { - $this->tear_down(); - } - } - - // -------------------------------------------------------------------- - - public static function instance() - { - return self::$ci_test_instance; - } - - // -------------------------------------------------------------------- - - public function ci_set_config($key = '', $val = '') - { - // Add test config - if ( ! isset($this->ci_instance->config)) - { - $this->ci_instance->config = new CI_TestConfig(); - } - - // Empty key means just do setup above - if ($key === '') - { - return; - } - - if (is_array($key)) - { - $this->ci_instance->config->config = $key; - } - else - { - $this->ci_instance->config->config[$key] = $val; - } - } - - // -------------------------------------------------------------------- - - public function ci_get_config() - { - return isset($this->ci_instance->config) ? $this->ci_instance->config->config : array(); - } - - // -------------------------------------------------------------------- - - public function ci_instance($obj = FALSE) - { - if ( ! is_object($obj)) - { - return $this->ci_instance; - } - - $this->ci_instance = $obj; - } - - // -------------------------------------------------------------------- - - public function ci_instance_var($name, $obj = FALSE) - { - if ( ! is_object($obj)) - { - return $this->ci_instance->$name; - } - - $this->ci_instance->$name =& $obj; - } - - // -------------------------------------------------------------------- - - /** - * Grab a core class - * - * Loads the correct core class without extensions - * and returns a reference to the class name in the - * globals array with the correct key. This way the - * test can modify the variable it assigns to and - * still maintain the global. - */ - public function &ci_core_class($name) - { - $name = strtolower($name); - - if (isset($this->global_map[$name])) - { - $class_name = ucfirst($name); - $global_name = $this->global_map[$name]; - } - elseif (in_array($name, $this->global_map)) - { - $class_name = ucfirst(array_search($name, $this->global_map)); - $global_name = $name; - } - else - { - throw new Exception('Not a valid core class.'); - } - - if ( ! class_exists('CI_'.$class_name)) - { - require_once SYSTEM_PATH.'core/'.$class_name.'.php'; - } - - $GLOBALS[strtoupper($global_name)] = 'CI_'.$class_name; - return $GLOBALS[strtoupper($global_name)]; - } - - // -------------------------------------------------------------------- - - // convenience function for global mocks - public function ci_set_core_class($name, $obj) - { - $orig =& $this->ci_core_class($name); - $orig = $obj; - } - - /** - * Create VFS directory - * - * @param string Directory name - * @param object Optional root to create in - * @return object New directory object - */ - public function ci_vfs_mkdir($name, $root = NULL) - { - // Check for root - if ( ! $root) - { - $root = $this->ci_vfs_root; - } - - // Return new directory object - return vfsStream::newDirectory($name)->at($root); - } - - // -------------------------------------------------------------------- - - /** - * Create VFS content - * - * @param string File name - * @param string File content - * @param object VFS directory object - * @param mixed Optional subdirectory path or array of subs - * @return void - */ - public function ci_vfs_create($file, $content = '', $root = NULL, $path = NULL) - { - // Check for array - if (is_array($file)) - { - foreach ($file as $name => $content) - { - $this->ci_vfs_create($name, $content, $root, $path); - } - return; - } - - // Assert .php extension if none given - if (pathinfo($file, PATHINFO_EXTENSION) == '') - { - $file .= '.php'; - } - - // Build content - $tree = array($file => $content); - - // Check for path - $subs = array(); - if ($path) - { - // Explode if not array - $subs = is_array($path) ? $path : explode('/', trim($path, '/')); - } - - // Check for root - if ( ! $root) - { - // Use base VFS root - $root = $this->ci_vfs_root; - } - - // Handle subdirectories - while (($dir = array_shift($subs))) - { - // See if subdir exists under current root - $dir_root = $root->getChild($dir); - if ($dir_root) - { - // Yes - recurse into subdir - $root = $dir_root; - } - else - { - // No - put subdirectory back and quit - array_unshift($subs, $dir); - break; - } - } - - // Create any remaining subdirectories - if ($subs) - { - foreach (array_reverse($subs) as $dir) - { - // Wrap content in subdirectory for creation - $tree = array($dir => $tree); - } - } - - // Create tree - vfsStream::create($tree, $root); - } - - // -------------------------------------------------------------------- - - /** - * Clone a real file into VFS - * - * @param string Path from base directory - * @return bool TRUE on success, otherwise FALSE - */ - public function ci_vfs_clone($path, $dest='') - { - // Check for array - if (is_array($path)) - { - foreach ($path as $file) - { - $this->ci_vfs_clone($file, $dest); - } - return; - } - - // Get real file contents - $content = file_get_contents(PROJECT_BASE.$path); - if ($content === FALSE) - { - // Couldn't find file to clone - return FALSE; - } - - if (empty($dest)) - { - $dest = dirname($path); - } - - $this->ci_vfs_create(basename($path), $content, NULL, $dest); - return TRUE; - } - - // -------------------------------------------------------------------- - - /** - * Helper to get a VFS URL path - * - * @param string Path - * @param string Optional base path - * @return string Path URL - */ - public function ci_vfs_path($path, $base = '') - { - // Check for base path - if ($base) - { - // Prepend to path - $path = rtrim($base, '/').'/'.ltrim($path, '/'); - - // Is it already in URL form? - if (strpos($path, '://') !== FALSE) - { - // Done - return path - return $path; - } - } - - // Trim leading slash and return URL - return vfsStream::url(ltrim($path, '/')); - } - - // -------------------------------------------------------------------- - // Internals - // -------------------------------------------------------------------- - - /** - * Overwrite runBare - * - * PHPUnit instantiates the test classes before - * running them individually. So right before a test - * runs we set our instance. Normally this step would - * happen in setUp, but someone is bound to forget to - * call the parent method and debugging this is no fun. - */ - public function runBare() - { - self::$ci_test_instance = $this; - parent::runBare(); - } - - // -------------------------------------------------------------------- - - public function helper($name) - { - require_once(SYSTEM_PATH.'helpers/'.$name.'_helper.php'); - } - - // -------------------------------------------------------------------- - - public function lang($name) - { - require(SYSTEM_PATH.'language/english/'.$name.'_lang.php'); - return $lang; - } - - // -------------------------------------------------------------------- - - /** - * This overload is useful to create a stub, that need to have a specific method. - */ - public function __call($method, $args) - { - if ($this->{$method} instanceof Closure) - { - return call_user_func_array($this->{$method},$args); - } - - return parent::__call($method, $args); - } - -} diff --git a/tests/mocks/ci_testconfig.php b/tests/mocks/ci_testconfig.php deleted file mode 100644 index afdb7100..00000000 --- a/tests/mocks/ci_testconfig.php +++ /dev/null @@ -1,20 +0,0 @@ -config[$key]) ? $this->config[$key] : FALSE; - } - - public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) - { - $this->loaded[] = $file; - return TRUE; - } - -} diff --git a/tests/mocks/core/common.php b/tests/mocks/core/common.php deleted file mode 100644 index 2e8265b1..00000000 --- a/tests/mocks/core/common.php +++ /dev/null @@ -1,153 +0,0 @@ -ci_instance(); - return $test; - } -} - -// -------------------------------------------------------------------- - -if ( ! function_exists('get_config')) -{ - function &get_config() - { - $test = CI_TestCase::instance(); - $config = $test->ci_get_config(); - return $config; - } -} - -if ( ! function_exists('config_item')) -{ - function config_item($item) - { - $config =& get_config(); - - if ( ! isset($config[$item])) - { - return NULL; - } - - return $config[$item]; - } -} - -if ( ! function_exists('get_mimes')) -{ - /** - * Returns the MIME types array from config/mimes.php - * - * @return array - */ - function &get_mimes() - { - static $_mimes = array(); - - if (empty($_mimes)) - { - $path = realpath(PROJECT_BASE.'application/config/mimes.php'); - if (is_file($path)) - { - $_mimes = include($path); - } - } - - return $_mimes; - } -} - -// -------------------------------------------------------------------- - -/* -if ( ! function_exists('load_class')) -{ - function load_class($class, $directory = 'libraries', $prefix = 'CI_') - { - if ($directory !== 'core' OR $prefix !== 'CI_') - { - throw new Exception('Not Implemented: Non-core load_class()'); - } - - $test = CI_TestCase::instance(); - - $obj =& $test->ci_core_class($class); - - if (is_string($obj)) - { - throw new Exception('Bad Isolation: Use ci_set_core_class to set '.$class); - } - - return $obj; - } -} -*/ - -// Clean up error messages -// -------------------------------------------------------------------- - -if ( ! function_exists('show_error')) -{ - function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered') - { - throw new RuntimeException('CI Error: '.$message); - } -} - -if ( ! function_exists('show_404')) -{ - function show_404($page = '', $log_error = TRUE) - { - throw new RuntimeException('CI Error: 404'); - } -} - -if ( ! function_exists('_exception_handler')) -{ - function _exception_handler($severity, $message, $filepath, $line) - { - throw new RuntimeException('CI Exception: '.$message.' | '.$filepath.' | '.$line); - } -} - -// We assume a few things about our environment ... -// -------------------------------------------------------------------- -if ( ! function_exists('is_loaded')) -{ - function &is_loaded() - { - $loaded = array(); - return $loaded; - } -} - -if ( ! function_exists('log_message')) -{ - function log_message($level, $message) - { - return TRUE; - } -} - -if ( ! function_exists('set_status_header')) -{ - function set_status_header($code = 200, $text = '') - { - return TRUE; - } -} - -if ( ! function_exists('is_cli')) -{ - // In order to test HTTP functionality, we need to lie about this - function is_cli() - { - return FALSE; - } -} \ No newline at end of file diff --git a/tests/mocks/core/input.php b/tests/mocks/core/input.php deleted file mode 100644 index 40e27441..00000000 --- a/tests/mocks/core/input.php +++ /dev/null @@ -1,49 +0,0 @@ -_allow_get_array = (config_item('allow_get_array') === TRUE); - $this->_enable_xss = (config_item('global_xss_filtering') === TRUE); - $this->_enable_csrf = (config_item('csrf_protection') === TRUE); - - // Assign Security and Utf8 classes - $this->security = $security; - $this->uni = $utf8; - - // Sanitize global arrays - $this->_sanitize_globals(); - } - - public function fetch_from_array($array, $index = '', $xss_clean = FALSE) - { - return parent::_fetch_from_array($array, $index, $xss_clean); - } - - /** - * Lie about being a CLI request - * - * We take advantage of this in libraries/Session_test - */ - public function is_cli_request() - { - return FALSE; - } - - public function __set($name, $value) - { - if ($name === 'ip_address') - { - $this->ip_address = $value; - } - } - -} \ No newline at end of file diff --git a/tests/mocks/core/security.php b/tests/mocks/core/security.php deleted file mode 100644 index 6cff8586..00000000 --- a/tests/mocks/core/security.php +++ /dev/null @@ -1,35 +0,0 @@ -{'_'.$property}) ? $this->{'_'.$property} : NULL; - } - - public function remove_evil_attributes($str, $is_image) - { - return $this->_remove_evil_attributes($str, $is_image); - } - - // Override inaccessible protected method - public function __call($method, $params) - { - if (is_callable(array($this, '_'.$method))) - { - return call_user_func_array(array($this, '_'.$method), $params); - } - - throw new BadMethodCallException('Method '.$method.' was not found'); - } - -} diff --git a/tests/mocks/core/uri.php b/tests/mocks/core/uri.php deleted file mode 100644 index 96ec5afa..00000000 --- a/tests/mocks/core/uri.php +++ /dev/null @@ -1,32 +0,0 @@ -ci_core_class('cfg'); - - // set predictable config values - $test->ci_set_config(array( - 'index_page' => 'index.php', - 'base_url' => 'http://example.com/', - 'subclass_prefix' => 'MY_', - 'enable_query_strings' => FALSE, - 'permitted_uri_chars' => 'a-z 0-9~%.:_\-' - )); - - $this->config = new $cls; - - if ($this->config->item('enable_query_strings') !== TRUE OR is_cli()) - { - $this->_permitted_uri_chars = $this->config->item('permitted_uri_chars'); - } - } - - public function _set_permitted_uri_chars($value) - { - $this->_permitted_uri_chars = $value; - } - -} \ No newline at end of file diff --git a/tests/mocks/core/utf8.php b/tests/mocks/core/utf8.php deleted file mode 100644 index 3a6282e1..00000000 --- a/tests/mocks/core/utf8.php +++ /dev/null @@ -1,19 +0,0 @@ -CkdQd_#0hcWjnm-RC7ehb;EndZnVoswnfIIZ&g$)~ z-CNSBf^8GGWD3`q%Q$DZ02uSKjIkVwKzW`q{t$DHa-2?*v;U@?Tc8p@*1M@T5!5Ol*NXF3 z2Mz947ni;22HdG^Kv4&!Y-y(Z*+~AK9A`QT)Ist|h&M@Hwo}tPuj6Ry^QbO}arWZi z%ylmv^3nX{BtH~AXIeV(tz-t=DcGul^{AkO!YMu#c2uWunp1^68MalS=g>(I1HRac zqc^jM&Pe{o+Pg8U{A(=Q^rHHg3YQWb=YqoniVwgO*=~CPTyp3VgUx6wZrH+%l^(;JM8+r)hu})xF#;J~cTfVh#;xKsKH?8$MC6VD* z-k1hdSTM>nk^aVNIj5&>=*l%i?NIf9Bt<&_sl>@)sAB|=XMbn;!7re6yIP*i3kvZ z^FW{^Tt2rTl3nSm1Y{Hd1|t$!jTAt-Zvb^OR%#4uUvgaj@~pEtvu(`vH{Yt*m;vnT zv4&aL1c(3;AOb{y z2oM1xKm>@uc_eW3{ePN?Z^c()Q%s-7G18cbz%wMU;9_`9y36fE`&ve;QP_d934`5G zcEFbrNIz}M5NmzZDu83ln;62IY6;Kp?c`lGv+%>rUs@Hd|iJJ)Uh)fEx>h&q@<=)09->VWo^zW(A z?5fz?SBb$5VSn~y&r;pONMcLwpte14nOFt%{qGsxS=2QVcuE9p>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z}{p3H$*t Cwr}nL diff --git a/tests/mocks/database/config/mysql.php b/tests/mocks/database/config/mysql.php deleted file mode 100644 index a590b9f5..00000000 --- a/tests/mocks/database/config/mysql.php +++ /dev/null @@ -1,34 +0,0 @@ - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'mysql' - ), - - // Database configuration with failover - 'mysql_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'not_travis', - 'password' => 'wrong password', - 'database' => 'not_ci_test', - 'dbdriver' => 'mysql', - 'failover' => array( - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'mysql', - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/mysqli.php b/tests/mocks/database/config/mysqli.php deleted file mode 100644 index 5dd08abb..00000000 --- a/tests/mocks/database/config/mysqli.php +++ /dev/null @@ -1,34 +0,0 @@ - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'mysqli' - ), - - // Database configuration with failover - 'mysqli_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'not_travis', - 'password' => 'wrong password', - 'database' => 'not_ci_test', - 'dbdriver' => 'mysqli', - 'failover' => array( - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'mysqli', - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/pdo/mysql.php b/tests/mocks/database/config/pdo/mysql.php deleted file mode 100644 index 96608f78..00000000 --- a/tests/mocks/database/config/pdo/mysql.php +++ /dev/null @@ -1,37 +0,0 @@ - array( - 'dsn' => 'mysql:host=localhost;dbname=ci_test', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'mysql' - ), - - // Database configuration with failover - 'pdo/mysql_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'not_travis', - 'password' => 'wrong password', - 'database' => 'not_ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'mysql', - 'failover' => array( - array( - 'dsn' => 'mysql:host=localhost;dbname=ci_test', - 'hostname' => 'localhost', - 'username' => 'travis', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'mysql' - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/pdo/pgsql.php b/tests/mocks/database/config/pdo/pgsql.php deleted file mode 100644 index e55e3ea7..00000000 --- a/tests/mocks/database/config/pdo/pgsql.php +++ /dev/null @@ -1,37 +0,0 @@ - array( - 'dsn' => 'pgsql:host=localhost;port=5432;dbname=ci_test;', - 'hostname' => 'localhost', - 'username' => 'postgres', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'pgsql' - ), - - // Database configuration with failover - 'pdo/pgsql_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'not_travis', - 'password' => 'wrong password', - 'database' => 'not_ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'pgsql', - 'failover' => array( - array( - 'dsn' => 'pgsql:host=localhost;port=5432;dbname=ci_test;', - 'hostname' => 'localhost', - 'username' => 'postgres', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'pdo', - 'subdriver' => 'pgsql' - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/pdo/sqlite.php b/tests/mocks/database/config/pdo/sqlite.php deleted file mode 100644 index 1bf56b3a..00000000 --- a/tests/mocks/database/config/pdo/sqlite.php +++ /dev/null @@ -1,37 +0,0 @@ - array( - 'dsn' => 'sqlite:/'.realpath(__DIR__.'/../..').'/ci_test.sqlite', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => 'sqlite', - 'dbdriver' => 'pdo', - 'subdriver' => 'sqlite' - ), - - // Database configuration with failover - 'pdo/sqlite_failover' => array( - 'dsn' => 'sqlite:not_exists.sqlite', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => 'sqlite', - 'dbdriver' => 'pdo', - 'subdriver' => 'sqlite', - 'failover' => array( - array( - 'dsn' => 'sqlite:/'.realpath(__DIR__.'/../..').'/ci_test.sqlite', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => 'sqlite', - 'dbdriver' => 'pdo', - 'subdriver' => 'sqlite' - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/pgsql.php b/tests/mocks/database/config/pgsql.php deleted file mode 100644 index 1444b006..00000000 --- a/tests/mocks/database/config/pgsql.php +++ /dev/null @@ -1,34 +0,0 @@ - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'postgres', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'postgre' - ), - - // Database configuration with failover - 'pgsql_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'not_travis', - 'password' => 'wrong password', - 'database' => 'not_ci_test', - 'dbdriver' => 'postgre', - 'failover' => array( - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'postgres', - 'password' => '', - 'database' => 'ci_test', - 'dbdriver' => 'postgre', - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/config/sqlite.php b/tests/mocks/database/config/sqlite.php deleted file mode 100644 index d37ee487..00000000 --- a/tests/mocks/database/config/sqlite.php +++ /dev/null @@ -1,34 +0,0 @@ - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => realpath(__DIR__.'/..').'/ci_test.sqlite', - 'dbdriver' => 'sqlite3' - ), - - // Database configuration with failover - 'sqlite_failover' => array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => '../not_exists.sqlite', - 'dbdriver' => 'sqlite3', - 'failover' => array( - array( - 'dsn' => '', - 'hostname' => 'localhost', - 'username' => 'sqlite', - 'password' => 'sqlite', - 'database' => realpath(__DIR__.'/..').'/ci_test.sqlite', - 'dbdriver' => 'sqlite3' - ) - ) - ) -); \ No newline at end of file diff --git a/tests/mocks/database/db.php b/tests/mocks/database/db.php deleted file mode 100644 index 00dd884b..00000000 --- a/tests/mocks/database/db.php +++ /dev/null @@ -1,142 +0,0 @@ -config = $config; - } - - /** - * Build DSN connection string for DB driver instantiate process - * - * @param string Group name - * @return string DSN Connection string - */ - public function set_dsn($group = 'default') - { - if ( ! isset($this->config[$group])) - { - throw new InvalidArgumentException('Group '.$group.' not exists'); - } - - self::$dbdriver = $this->config[$group]['dbdriver']; - if (isset($this->config[$group]['subdriver'])) - { - self::$subdriver = $this->config[$group]['subdriver']; - } - - $params = array( - 'dbprefix' => '', - 'pconnect' => FALSE, - 'db_debug' => FALSE, - 'cache_on' => FALSE, - 'cachedir' => '', - 'char_set' => 'utf8', - 'dbcollat' => 'utf8_general_ci', - 'swap_pre' => '', - 'stricton' => FALSE - ); - - $config = array_merge($this->config[$group], $params); - $dsnstring = empty($config['dsn']) ? FALSE : $config['dsn']; - $subdriver = empty($config['subdriver']) ? FALSE: $config['subdriver']; - $failover = empty($config['failover']) ? FALSE : $config['failover']; - - $dsn = $config['dbdriver'].'://'.$config['username'].':'.$config['password'] - .'@'.$config['hostname'].'/'.$config['database']; - - // Build the parameter - $other_params = array_slice($config, 6); - if ($dsnstring) $other_params['dsn'] = $dsnstring; - if ($subdriver) $other_params['subdriver'] = $subdriver; - if ($failover) $other_params['failover'] = $failover; - - return $dsn.'?'.http_build_query($other_params); - } - - /** - * Return a database config array - * - * @see ./config - * @param string Driver based configuration - * @return array - */ - public static function config($driver) - { - $dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR; - return include($dir.'config'.DIRECTORY_SEPARATOR.$driver.'.php'); - } - - /** - * Main DB method wrapper - * - * @param string Group or DSN string - * @param bool - * @return object - */ - public static function DB($group, $query_builder = FALSE) - { - // Create dummy driver and builder files to "load" - the mocks have - // already triggered autoloading of the real files - $case = CI_TestCase::instance(); - $driver = self::$dbdriver; - $subdriver = self::$subdriver; - $case->ci_vfs_create(array( - 'DB_driver.php' => '', - 'DB_result.php' => '', - 'DB_forge.php' => '', - 'DB_query_builder.php' => '' - ), '', $case->ci_base_root, 'database'); - if (file_exists(SYSTEM_PATH.'database/drivers/'.$driver.'/'.$driver.'_driver.php')) - { - $case->ci_vfs_create(array( - $driver.'_driver.php' => '', - $driver.'_result.php' => '', - $driver.'_forge.php' => '' - ), '', $case->ci_base_root, 'database/drivers/'.$driver); - } - if ($subdriver) - { - $case->ci_vfs_create(array( - $driver.'_'.$subdriver.'_driver.php' => '', - $driver.'_'.$subdriver.'_forge.php' => '' - ), '', $case->ci_base_root, 'database/drivers/'.$driver.'/subdrivers'); - } - - include_once(SYSTEM_PATH.'database/DB.php'); - - try - { - $db = DB($group, $query_builder); - } - catch (Exception $e) - { - throw new RuntimeException($e->getMessage()); - } - - return $db; - } - -} \ No newline at end of file diff --git a/tests/mocks/database/db/driver.php b/tests/mocks/database/db/driver.php deleted file mode 100644 index 86f7efd5..00000000 --- a/tests/mocks/database/db/driver.php +++ /dev/null @@ -1,40 +0,0 @@ -ci_db_driver = new $driver_class($config); - } - } - - /** - * Overloading method, emulate the actual driver method (multiple inheritance workaround) - */ - public function __call($method, $arguments) - { - if ( ! is_callable(array($this->ci_db_driver, $method))) - { - throw new BadMethodCallException($method. ' not exists or not implemented'); - } - - return call_user_func_array(array($this->ci_db_driver, $method), $arguments); - } - -} - -class CI_DB extends CI_DB_query_builder {} \ No newline at end of file diff --git a/tests/mocks/database/drivers/mysql.php b/tests/mocks/database/drivers/mysql.php deleted file mode 100644 index b7718eba..00000000 --- a/tests/mocks/database/drivers/mysql.php +++ /dev/null @@ -1,16 +0,0 @@ -=')) - { - error_reporting(E_ALL & ~E_DEPRECATED); - } - - $config = Mock_Database_DB::config($driver); - $connection = new Mock_Database_DB($config); - $db = Mock_Database_DB::DB($connection->set_dsn($driver), TRUE); - - CI_TestCase::instance()->ci_instance_var('db', $db); - - $loader = new CI_Loader(); - $loader->dbforge(); - $forge = CI_TestCase::instance()->ci_instance_var('dbforge'); - - self::$db = $db; - self::$forge = $forge; - self::$driver = $driver; - } - - return self::$db; - } - - /** - * Create the dummy tables - * - * @return void - */ - public static function create_tables() - { - // User Table - self::$forge->add_field(array( - 'id' => array( - 'type' => 'INTEGER', - 'constraint' => 3 - ), - 'name' => array( - 'type' => 'VARCHAR', - 'constraint' => 40 - ), - 'email' => array( - 'type' => 'VARCHAR', - 'constraint' => 100 - ), - 'country' => array( - 'type' => 'VARCHAR', - 'constraint' => 40 - ) - )); - self::$forge->add_key('id', TRUE); - self::$forge->create_table('user', TRUE); - - // Job Table - self::$forge->add_field(array( - 'id' => array( - 'type' => 'INTEGER', - 'constraint' => 3 - ), - 'name' => array( - 'type' => 'VARCHAR', - 'constraint' => 40 - ), - 'description' => array( - 'type' => 'TEXT' - ) - )); - self::$forge->add_key('id', TRUE); - self::$forge->create_table('job', TRUE); - - // Misc Table - self::$forge->add_field(array( - 'id' => array( - 'type' => 'INTEGER', - 'constraint' => 3 - ), - 'key' => array( - 'type' => 'VARCHAR', - 'constraint' => 40 - ), - 'value' => array( - 'type' => 'TEXT' - ) - )); - self::$forge->add_key('id', TRUE); - self::$forge->create_table('misc', TRUE); - } - - /** - * Create the dummy datas - * - * @return void - */ - public static function create_data() - { - // Job Data - $data = array( - 'user' => array( - array('id' => 1, 'name' => 'Derek Jones', 'email' => 'derek@world.com', 'country' => 'US'), - array('id' => 2, 'name' => 'Ahmadinejad', 'email' => 'ahmadinejad@world.com', 'country' => 'Iran'), - array('id' => 3, 'name' => 'Richard A Causey', 'email' => 'richard@world.com', 'country' => 'US'), - array('id' => 4, 'name' => 'Chris Martin', 'email' => 'chris@world.com', 'country' => 'UK') - ), - 'job' => array( - array('id' => 1, 'name' => 'Developer', 'description' => 'Awesome job, but sometimes makes you bored'), - array('id' => 2, 'name' => 'Politician', 'description' => 'This is not really a job'), - array('id' => 3, 'name' => 'Accountant', 'description' => 'Boring job, but you will get free snack at lunch'), - array('id' => 4, 'name' => 'Musician', 'description' => 'Only Coldplay can actually called Musician') - ), - 'misc' => array( - array('id' => 1, 'key' => '\\xxxfoo456', 'value' => 'Entry with \\xxx'), - array('id' => 2, 'key' => '\\%foo456', 'value' => 'Entry with \\%'), - array('id' => 3, 'key' => 'spaces and tabs', 'value' => ' One two three tab') - ) - ); - - foreach ($data as $table => $dummy_data) - { - self::$db->truncate($table); - - foreach ($dummy_data as $single_dummy_data) - { - self::$db->insert($table, $single_dummy_data); - } - } - } - -} diff --git a/tests/mocks/libraries/driver.php b/tests/mocks/libraries/driver.php deleted file mode 100644 index 63319434..00000000 --- a/tests/mocks/libraries/driver.php +++ /dev/null @@ -1,27 +0,0 @@ -valid_drivers; - } - - $this->valid_drivers = (array) $drivers; - } - - /** - * Get library name - */ - public function get_name() - { - return $this->lib_name; - } -} \ No newline at end of file diff --git a/tests/mocks/libraries/encrypt.php b/tests/mocks/libraries/encrypt.php deleted file mode 100644 index c14d1e02..00000000 --- a/tests/mocks/libraries/encrypt.php +++ /dev/null @@ -1,16 +0,0 @@ -_get_params($params); - } - - // -------------------------------------------------------------------- - - /** - * get_key() - * - * Allows checking for key changes. - */ - public function get_key() - { - return $this->_key; - } - - // -------------------------------------------------------------------- - - /** - * __driver_get_handle() - * - * Allows checking for _mcrypt_get_handle(), _openssl_get_handle() - */ - public function __driver_get_handle($driver, $cipher, $mode) - { - return $this->{'_'.$driver.'_get_handle'}($cipher, $mode); - } - -} \ No newline at end of file diff --git a/tests/mocks/libraries/session.php b/tests/mocks/libraries/session.php deleted file mode 100644 index adbecb32..00000000 --- a/tests/mocks/libraries/session.php +++ /dev/null @@ -1,38 +0,0 @@ -_flashdata_sweep(); - $this->_flashdata_mark(); - $this->_tempdata_sweep(); - } -} - -/** - * Mock cookie driver to overload cookie setting - */ -class Mock_Libraries_Session_cookie extends CI_Session_cookie { - /** - * Overload _setcookie to manage $_COOKIE values, since actual cookies can't be set in unit testing - */ - protected function _setcookie($name, $value = '', $expire = 0, $path = '', $domain = '', $secure = FALSE, $httponly = FALSE) - { - if (empty($value) OR $expire <= time()) - { - unset($_COOKIE[$name]); - } - else - { - $_COOKIE[$name] = $value; - } - } -} - -class Mock_Libraries_Session_native extends CI_Session_native {} \ No newline at end of file diff --git a/tests/mocks/libraries/table.php b/tests/mocks/libraries/table.php deleted file mode 100644 index 08f80072..00000000 --- a/tests/mocks/libraries/table.php +++ /dev/null @@ -1,16 +0,0 @@ -`V&IxVY*>2I@u!WgQ*$@bKb22hr5fS(E^XNSTbu~5Q*4AMc7p#Sa*2BZ>O$*z}$?QuBl3rf< z_V(yI0)0V2%(b<3G&Jo{49Ksq?o$r!PYj%GZE-Iz-ToUU@2=7}FTm}PqJ3E9)NxPbwfI~xQ z5(eSY(vVwQw2_f(CMNP_7T!GtTn-NHQ4Q_na(^J^LLUleB`AlWkjx+ekaM+c;N zd2J~vTMiDeBmwYV6R3ZGSp@=u8wTq~2+MhEj}81GpSsWAz>ot^V)8O1vZ=1B^! zh={>72aHu!eiQ>{2?EBftj{t6(7U_BLk@H@GJ{D;^Jo}j8XE9j6Y=Wm>OuvTWMq?J zVeL^2*v7{1S`mg!OzdSCo;neX8U)Zb1^0L$e?vo~d3ow%7^^`NwlN2+J`kTb4~0xj z={^I+E&g5ic(T-4Fj5LYH}3@eINs}Og4g$R{1bQ6_(_$R2JPyb;1?y`Zp*aw_tygm%wRuj5X7`QeG6}0#O12P67f@0s>D00#pJ5RRRK50s{a4{{R3000000 z0000000000A^8LV00000EC2ui0IC2<000R80P_hPNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*qgUPl*mUKn)2C3QN}Wozs@1DlvuZV(2!Pi_Tf>SSOSY_8sd$ung>$y8+qZDb z!tv_$P29V9^GdzPx3AxOQ?JyaOINSq!*~BGmMWNVUBr+hlU4jTDwH}rGHd3+R8*6STry z4m%>C178Nru%i^vU9jVY$$7D3B^W+%ZIke%lR^!;T0nyZhzQaNJnX`g#~J2YFl-IR zcBw@%YqYEHzVLv6>b~0Q69l_+AfSsFLXbg$z9!s}Ljw&wpn^UG7{IOx4#3cW3QB;W zuMIl}pzj=h2qA_57jO{Bnjj1?03E8#(0~wwup5HQE?)xAB?DBkV+Jl0!R{g$Xd*xZ z8GzC51}>W*hYAfi0na@#6kv4>f59`!DH@zB2m=iG@W>F&=xYEZ3-1~NRl0w8kpo4EIa!2uD>>JtGxREVHY1w{lv#*SFD z8^MkX!!yQ?NDN}b`}(Lr#u1L|lRyS6@I$8hH2@Th3LZolK;IVNG9?(m07#&i5&{qe z^NC;)@R-y20^u@?72qBvC;?wS*cVJ#AZ$b6-68B?hc+;Q3B=%+4!|)4;#q)g#hOI) z+I4^ytZ9c0pqR)1*flYIn4lERYL~xw1P@K@NEPjZ!H%E@k0ObnT?TAH{0@*f9Iy+2 ztz#Dsb`%13g)WRoNMgHArH>-Cs|Y)q0zAS;g?)Wcgd!v%U-H0!6lS4?O!xpX%&>$) zGD2?E*uoIfMuRlefEznx7ZrBIiRhJKM=;RW0Csc(DeA)w?Rt|wY!HIJAwgf))5i_8 zm!}4_%ZJ%x7Z>&6#VYFKitS2<|Jo%4idhUEEZC6^^d$z0Q4t=h)5jR#F~$TOz>Xjk z;XU+t4@RWok8SwC2bLg=J~W{Tpm0Pqn%9Xeq{4<8SXU&|sE-RoZ+`j^TDzR6k209g z1Nst`J~#mX2Fj%gl#|rQ1KO3iQIruLY#ab9_2J5PnXi`cctYVKw<9mKiw={coGK2` zH;A_Djv$<-U-EE>Kz@Lb-GGNORv`&Cuz`7UTLv=@u>~6Jvi!v7y1e! z0Ro!IcAYVq3lM-(m#Tti2J8ezO_KnMqz^SLYy&$QD7z@Iqa3g+2|F4eyS!CTCGKbx zOHJzr0_xR$y>5iEAo280VWK#9LvC|0TR~&y|s%7{sRMM>(s94V!#bM zQf#{*a| zESVzP7johu3~;jH9KeW&f)~u-1}pd%W+<*GAmQK&$0Js28Uzc9U_gB+-~g=E2NI@0 zf+Ff+IN<=DO28jT01HnZBOXh3@PKt73pV`V2fwhen)~302&)7C z4{C0362?e4ETlLd(xOufpd1fV_!9vNjs)Qd@P~N(flfgPL5Jyt0w?TvM|X|~S$iB0 zBsS~OYElCoj6u0b93URyqcnpD91lL6`3DJ(vxE5{i6$^3461H$2u@HseN=%Hrug)N zgD{L84dViHVDKlfkS7%w!T}1{#ez+tfIL+o5Jyn(F%&>;YJXyr33vesN`U}W?5G89 zz_S9dz~Bog02K>900N3x=y-%8&q#Pc859f)ESQe~5#YswA8_splR6%@c*PH95o-p+ zBN%LuMIQ>z@P<1)&h_vi3L5NFV?6xg4gYsMX7P$|=%C@$_yIOxjq#G3+`=LM*wMrp zoJuC2{N}fDgRj2T%CI8~*T!PrTw6&-lhW{_&8HyyPcO`N~`V@|e%O=I2q5 z&U^mzpbx$1M^F0FoBs5uPrd3_&-&K8{`Ihrz3gXC``X+7_PEcz?sw1o-uwRdzz@Fg zhfnX!gFqOBLO6s(ScFD+gh-f#O1Okf*o00@~ diff --git a/tests/phpunit.xml b/tests/phpunit.xml deleted file mode 100644 index 875198c4..00000000 --- a/tests/phpunit.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - ./codeigniter/core - ./codeigniter/helpers - ./codeigniter/libraries - - - - - ../system/ - - -