123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- <?php
- namespace CourseDescription;
- use \Display;
- use \Template;
- use \FormValidator;
- use \Security;
- use Uri;
- use Redirect;
- use Chamilo;
- use Javascript;
- /**
- * Controller for course description. Dispatch request and peform required action.
- *
- * - list course description for course
- * - add a new course description to a course/session
- * - edit a course session
- * - delete a course session
- *
- * Usage:
- *
- * $controller = CourseDescriptionController::instance();
- * $controller->run();
- *
- * @package chamilo.course_description
- * @author Christian Fasanando <christian1827@gmail.com>
- * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Genevas
- * @license see /license.txt
- */
- class Controller extends \Controller
- {
- const ACTION_ADD = 'add';
- const ACTION_EDIT = 'edit';
- const ACTION_DELETE = 'delete';
- const ACTION_LISTING = 'listing';
- const ACTION_DEFAULT = 'listing';
- const ACTION_EXPORT_CSV = 'export_csv';
- const ACTION_IMPORT_CSV = 'import_csv';
- /**
- * Return the instance of the controller.
- *
- * @return CourseDescriptionController
- */
- public static function instance()
- {
- static $result = null;
- if (empty($result)) {
- $result = new self();
- }
- return $result;
- }
- protected function __construct()
- {
-
- }
- /**
- * Action to perform.
- * Returns the request parameter.
- *
- * @return string
- */
- public function get_action()
- {
- if (Request::is_student_view()) {
- return self::ACTION_LISTING;
- }
- $result = parent::get_action();
- $result = $result ? $result : self::ACTION_DEFAULT;
- return $result;
- }
- public function is_allowed_to_edit()
- {
- if (Request::is_student_view()) {
- return false;
- }
- $session_id = Request::get_session_id();
- if ($session_id != 0 && api_is_allowed_to_session_edit(false, true) == false) {
- return false;
- }
- if (!api_is_allowed_to_edit(false, true, true)) {
- return false;
- }
- return true;
- }
- /**
- * Whether the call is authorized or not.
- *
- * @return boolean
- */
- public function authorize()
- {
- $authorize = api_protect_course_script(true);
- if (!$authorize) {
- return false;
- }
- $c_id = Request::get_c_id();
- if (empty($c_id)) {
- return false;
- }
- return true;
- }
- /**
- * Prepare the environment. Set up breadcrumps and raise tracking event.
- */
- protected function prolog()
- {
- global $interbreadcrumb;
- $interbreadcrumb = array();
- $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('CourseProgram'));
- $type_id = Request::get_description_type();
- $type = CourseDescriptionType::repository()->find_one_by_id($type_id);
- if ($type) {
- $interbreadcrumb[] = array('url' => '#', 'name' => $type->get_title());
- }
- global $this_section;
- $this_section = SECTION_COURSES;
- global $current_course_tool;
- $current_course_tool = TOOL_COURSE_DESCRIPTION;
- // Tracking
- event_access_tool(TOOL_COURSE_DESCRIPTION);
- }
- /**
- * Javascript used by the controller
- *
- * @return string
- */
- public function javascript()
- {
- $src = Chamilo::url('/main/course_description/resources/js/main.js');
- $result = Javascript::tag($src);
- $www = Chamilo::url();
- $code = "var www = '$www';\n";
- $result .= Javascript::tag_code($code);
- return $result;
- }
- /**
- * Returns a url for an action that the controller can process
- *
- * @param string $action
- * @param array $params
- * @return string
- */
- public function url($action = '', $params = array())
- {
- $url_params = Uri::course_params();
- if ($c_id = Request::get_c_id()) {
- $url_params[Request::PARAM_C_ID] = $c_id;
- }
- if ($id = Request::get_id()) {
- $url_params[Request::PARAM_ID] = $id;
- }
- if ($session_id = Request::get_session_id()) {
- $url_params[Request::PARAM_SESSION_ID] = $session_id;
- }
- $url_params[Request::PARAM_ACTION] = $action;
- foreach ($params as $key => $value) {
- $url_params[$key] = $value;
- }
- $result = Uri::url('/main/course_description/index.php', $url_params, false);
- return $result;
- }
- /**
- * List course descriptions.
- *
- * @param array messages
- */
- public function listing()
- {
- $course = (object) array();
- $course->c_id = Request::get_c_id();
- $course->session_id = Request::get_session_id();
- $repo = CourseDescription::repository();
- $descriptions = $repo->find_by_course($course);
- $data = (object) array();
- $data->descriptions = $descriptions;
- $this->render('index', $data);
- }
- /**
- * Performs the edit action.
- */
- public function edit()
- {
- if (!$this->is_allowed_to_edit()) {
- $this->forbidden();
- return;
- }
-
- $id = Request::get_id();
- $c_id = Request::get_c_id();
- $repo = CourseDescription::repository();
- $description = $repo->find_one_by_id($c_id, $id);
- $action = $this->url(self::ACTION_EDIT);
- $form = CourseDescriptionForm::create($action, $description);
- if ($form->validate()) {
- $success = $repo->save($description);
-
- $message = $success ? get_lang('DescriptionUpdated') : get_lang('Error');
- $home = $this->url(self::ACTION_DEFAULT);
- Redirect::go($home);
- }
-
- $data = (object) array();
- $data->form = $form;
- $this->render('edit', $data);
- }
- /**
- * Perform the add action
- */
- public function add()
- {
- if (!$this->is_allowed_to_edit()) {
- $this->forbidden();
- return;
- }
- $type_id = Request::get_description_type();
- $type = CourseDescriptionType::repository()->find_one_by_id($type_id);
- $c_id = Request::get_c_id();
- $session_id = Request::get_session_id();
- if (empty($type)) {
- $home = $this->url(self::ACTION_DEFAULT);
- Redirect::go($home);
- }
- $description = $type->create();
- $description->c_id = $c_id;
- $description->session_id = $session_id;
- $params = array();
- $params[Request::PARAM_DESCRIPTION_TYPE] = $type_id;
- $action = $this->url(self::ACTION_ADD, $params);
- $form = CourseDescriptionForm::create($action, $description);
- if ($form->validate()) {
- $repo = CourseDescription::repository();
- $success = $repo->save($description);
- $message = $success ? get_lang('CourseDescriptionAdded') : get_lang('Error');
- $home = $this->url();
- Redirect::go($home);
- }
- //$is_valid = !empty($type) && !empty($c_id) && !empty($title) && !empty($content) && Security::check_token();
- $data = (object) array();
- $data->type = $type;
- $data->form = $form;
- $this->render('edit', $data);
- }
- /**
- * Performs the delete action.
- *
- * @todo: could be worth to require a security token in the url and check it. Currently confirmation is done through javascript confirmation only.
- */
- public function delete()
- {
- if (!$this->is_allowed_to_edit()) {
- $this->forbidden();
- return;
- }
- // $is_valid = Security::check_token();
- // if (!$is_valid) {
- // $this->listing();
- // return false;
- // }
- $description->c_id = Request::get_c_id();
- $description->id = Request::get_id();
- $repo = CourseDescription::repository();
- $success = $repo->remove($description);
- $message = $success ? get_lang('CourseDescriptionDeleted') : get_lang('Error');
- $home = $this->url();
- Redirect::go($home);
- }
- public function export_csv()
- {
- $c_id = Request::get_c_id();
- $session_id = Request::get_session_id();
- $course = (object) array();
- $course->c_id = $c_id;
- $course->session_id = $session_id;
- $descriptions = CourseDescription::repository()->find_by_course($course);
- $writer = new CsvWriter();
- $writer->add($descriptions);
- $path = $writer->get_path();
- \DocumentManager :: file_send_for_download($path, true, get_lang('CourseDescriptions') . '.csv');
- }
- public function import_csv()
- {
- if (!$this->is_allowed_to_edit()) {
- $this->forbidden();
- return;
- }
- $action = $this->url(self::ACTION_IMPORT_CSV);
- $form = new UploadFileForm('import_csv', 'post', $action);
- $form->init();
- if ($form->validate()) {
- $file = $form->get_file();
- $path = $file->tmp_name;
- $reader = new CsvReader($path);
- $descriptions = $reader->get_items();
-
- $c_id = Request::get_c_id();
- $session_id = Request::get_session_id();
- $course = (object) array();
- $course->c_id = $c_id;
- $course->session_id = $session_id;
- $import = new CourseImport($course);
- $import->add($descriptions);
- $home = $this->url(self::ACTION_DEFAULT);
- Redirect::go($home);
- }
- $data = (object) array();
- $data->form = $form;
- $this->render('upload', $data);
- }
- /**
- * Render a template using data. Adds a few common parameters to the data array.
- *
- * @see /main/template/default/course_description/
- * @param string $template
- * @param array $data
- */
- protected function render($template, $data)
- {
- $data = $data ? $data : (object) array();
- $_user = api_get_user_info();
- $session_id = Request::get_session_id();
- $data->session_image = api_get_session_image($session_id, $_user);
- $sec_token = Security::get_token();
- $data->sec_token = $sec_token;
- $data->root = $this->url('');
- $data->types = CourseDescriptionType::repository()->all();
- $data->session_id = $session_id;
- $data->c_id = Request::get_c_id();
- $data->is_allowed_to_edit = $this->is_allowed_to_edit();
- parent::render("course_description/$template.tpl", $data);
- }
- }
|