123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- /**
- * Controller
- *
- *
- *
- * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Genevas
- * @license see /license.txt
- */
- class Controller
- {
- const PARAM_ACTION = 'action';
-
- protected $access;
-
- protected function __construct($access = null)
- {
- $access = $access ? $access : Access::all();
- $this->access = $access;
- }
-
- /**
- *
- * @return \Access
- */
- public function access()
- {
- return $this->access;
- }
- /**
- * List of actions accepted by the controller.
- *
- * @return array
- */
- public function get_actions()
- {
- $reflector = new ReflectionClass($this);
- $constants = $reflector->getConstants();
- $result = array();
- foreach ($constants as $key => $value) {
- if (strpos($key, 'ACTION') !== false) {
- $result[$key] = $value;
- }
- }
- return $result;
- }
- /**
- * Action to perform.
- * Returns the request parameter.
- *
- * @return string
- */
- public function get_action()
- {
- $result = Request::get(self::PARAM_ACTION);
- $actions = $this->get_actions();
- $result = in_array($result, $actions) ? $result : '';
- return $result;
- }
- /**
- * Set up the environment. Set up breadcrumps, raise tracking event, etc.
- */
- protected function prolog()
- {
-
- }
- /**
- * Whether the call is authorized or not.
- *
- * @return boolean
- */
- public function authorize()
- {
- return $this->access()->authorize();
- }
- /**
- * Returns a string containing dynamic javascript to be included in the template.
- * This requires a {{javascript}} tag in a twigg template to appear.
- *
- * Note:
- *
- * A better approach to this method is to create a twigg "javascript"
- * template and to include it where required.
- *
- * @return string
- */
- public function javascript()
- {
- return '';
- }
- // public function check_token()
- // {
- // return (bool) Security::check_token('get');
- // }
- /**
- * Run the controller. Dispatch action and execute requested tasks.
- */
- public function run()
- {
- if (!$this->authorize()) {
- $this->forbidden();
- return false;
- }
- $this->prolog();
- $action = $this->get_action();
- if (empty($action)) {
- $this->unknown();
- return;
- }
- $f = array($this, $action);
- if (is_callable($f)) {
- call_user_func($f);
- } else {
- $this->missing();
- }
- }
- /**
- * Unknown action. I.e. the action has not been registered.
- * Possibly missing action declaration:
- *
- * const ACTION_XXX = 'XXX';
- *
- * @return boolean
- */
- public function unknown()
- {
- return false;
- }
- /**
- *
- * @return boolean
- */
- public function forbidden()
- {
- api_not_allowed();
- return false;
- }
- /**
- * Action exists but implementation is missing.
- */
- public function missing()
- {
- echo 'No implementation';
- return false;
- }
- /**
- * Render a template using data. Adds a few common parameters to data.
- *
- * @see /main/template/default/course_description/
- * @param string $template
- * @param array $data
- */
- protected function render($template_name, $data)
- {
- $data = (object) $data;
- $data->www = \Chamilo::url();
- $data->messages = isset($data->messages) ? $data->messages : array();
- $javascript = $this->javascript();
- if ($javascript) {
- $data->javascript = $javascript;
- }
- $tpl = new Template();
- foreach ($data as $key => $value) {
- $tpl->assign($key, $value);
- }
- $template = $tpl->get_template($template_name);
- $content = $tpl->fetch($template);
- $tpl->assign('content', $content);
- $tpl->display_one_col_template();
- }
- /**
- * Render data as JSON
- *
- * @param any $data
- */
- protected function render_json($data)
- {
- Header::content_type_json();
- echo json_encode($data);
- }
- }
|