Adding mathjax support see #5231

No configuration is needed in order to use it (an option will be
added).
Only available in the document tool and can be view using the
document/showinframes.php script.
1.10.x
Julio Montoya 12 years ago
parent 0873763b87
commit 5aed25f77c
  1. 100
      main/document/showinframes.php
  2. 102
      main/inc/lib/template.lib.php
  3. 20
      main/inc/routes.php
  4. 21
      main/inc/services.php
  5. 2
      src/ChamiloLMS/Component/Editor/CkEditor/CkEditor.php
  6. 8
      src/ChamiloLMS/Component/Editor/CkEditor/Toolbar/Documents.php
  7. 8
      src/ChamiloLMS/Component/Editor/Editor.php
  8. 2
      src/ChamiloLMS/Component/Editor/TinyMce/TinyMce.php
  9. 27
      src/ChamiloLMS/Component/Editor/Toolbar.php
  10. 18
      src/ChamiloLMS/Controller/LegacyController.php

@ -73,8 +73,7 @@ if (is_dir($file_url_sys)) {
api_not_allowed(true);
}
//Check user visibility
//$is_visible = DocumentManager::is_visible_by_id($document_id, $course_info, api_get_session_id(), api_get_user_id());
// Check user visibility.
$is_visible = DocumentManager::check_visibility_tree($document_id, api_get_course_id(), api_get_session_id(), api_get_user_id());
if (!api_is_allowed_to_edit() && !$is_visible) {
@ -107,18 +106,18 @@ if (isset($group_id) && $group_id != '') {
$interbreadcrumb[] = array('url' => './document.php?curdirpath='.dirname($header_file).$req_gid, 'name' => get_lang('Documents'));
if (empty($document_data['parents'])) {
if (isset($_GET['createdir'])) {
$interbreadcrumb[] = array('url' => $document_data['document_url'], 'name' => $document_data['title']);
} else {
$interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']);
}
if (isset($_GET['createdir'])) {
$interbreadcrumb[] = array('url' => $document_data['document_url'], 'name' => $document_data['title']);
} else {
$interbreadcrumb[] = array('url' => '#', 'name' => $document_data['title']);
}
} else {
foreach($document_data['parents'] as $document_sub_data) {
if (!isset($_GET['createdir']) && $document_sub_data['id'] == $document_data['id']) {
$document_sub_data['document_url'] = '#';
}
$interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']);
}
foreach($document_data['parents'] as $document_sub_data) {
if (!isset($_GET['createdir']) && $document_sub_data['id'] == $document_data['id']) {
$document_sub_data['document_url'] = '#';
}
$interbreadcrumb[] = array('url' => $document_sub_data['document_url'], 'name' => $document_sub_data['title']);
}
}
$this_section = SECTION_COURSES;
@ -139,40 +138,55 @@ $frameheight = 135;
if (api_is_course_admin()) {
$frameheight = 165;
}
$mathJaxUrl = api_get_path(WEB_LIBRARY_PATH).'javascript/math_jax/MathJax.js?config=default';
$js_glossary_in_documents = '';
if (api_get_setting('show_glossary_in_documents') == 'ismanual') {
$js_glossary_in_documents = ' // $(document).ready(function() {
$.frameReady(function() {
// $("<div>I am a div courses</div>").prependTo("body");
}, "top.mainFrame",
{ load: [
{type:"script", id:"_fr1", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.js"},
{type:"script", id:"_fr2", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.highlight.js"},
{type:"script", id:"_fr3", src:"'.api_get_path(WEB_LIBRARY_PATH).'fckeditor/editor/plugins/glossary/fck_glossary_manual.js"}
]
}
);
//});';
$js_glossary_in_documents = '
$.frameReady(function() {
// $("<div>I am a div courses</div>").prependTo("body");
}, "top.mainFrame",
{ load: [
{type:"script", id:"_fr1", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.js"},
{type:"script", id:"_fr2", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.highlight.js"},
{type:"script", id:"_fr3", src:"'.api_get_path(WEB_LIBRARY_PATH).'fckeditor/editor/plugins/glossary/fck_glossary_manual.js"},
{type:"script", id:"_fr4", src:"'.$mathJaxUrl.'"}
]
}
);';
} elseif (api_get_setting('show_glossary_in_documents') == 'isautomatic') {
$js_glossary_in_documents = '// $(document).ready(function() {
$.frameReady(function(){
// $("<div>I am a div courses</div>").prependTo("body");
}, "top.mainFrame",
{ load: [
{type:"script", id:"_fr1", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.js"},
{type:"script", id:"_fr4", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery-ui/smoothness/jquery-ui-1.8.21.custom.min.js"},
{type:"stylesheet", id:"_fr5", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery-ui/smoothness/jquery-ui-1.8.21.custom.css"},
{type:"script", id:"_fr2", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.highlight.js"},
{type:"script", id:"_fr3", src:"'.api_get_path(WEB_LIBRARY_PATH).'fckeditor/editor/plugins/glossary/fck_glossary_automatic.js"}
]
}
);
// });';
$js_glossary_in_documents = '
$.frameReady(function(){
// $("<div>I am a div courses</div>").prependTo("body");
}, "top.mainFrame",
{ load: [
{type:"script", id:"_fr1", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.js"},
{type:"script", id:"_fr4", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery-ui/smoothness/jquery-ui-1.8.21.custom.min.js"},
{type:"stylesheet", id:"_fr5", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery-ui/smoothness/jquery-ui-1.8.21.custom.css"},
{type:"script", id:"_fr2", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.highlight.js"},
{type:"script", id:"_fr3", src:"'.api_get_path(WEB_LIBRARY_PATH).'fckeditor/editor/plugins/glossary/fck_glossary_automatic.js"},
{type:"script", id:"_fr6", src:"'.$mathJaxUrl.'"}
]
}
);';
}
if (empty($js_glossary_in_documents)) {
$js_glossary_in_documents = '
$.frameReady(function() {
}, "top.mainFrame",
{
load: [
{type:"script", id:"_fr1", src:"'.api_get_path(WEB_LIBRARY_PATH).'javascript/jquery.js"},
{type:"script", id:"_fr2", src:"'.$mathJaxUrl.'"}
]
}
);';
}
$web_odf_supported_files = DocumentManager::get_web_odf_extension_list();
$htmlHeadXtra[] = api_get_js('math_jax/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
if (in_array(strtolower($pathinfo['extension']), $web_odf_supported_files)) {
$show_web_odf = true;
$htmlHeadXtra[] = api_get_js('webodf/webodf.js');
@ -180,9 +194,9 @@ if (in_array(strtolower($pathinfo['extension']), $web_odf_supported_files)) {
$htmlHeadXtra[] = '
<script charset="utf-8">
function init() {
var odfelement = document.getElementById("odf"),
odfcanvas = new odf.OdfCanvas(odfelement);
odfcanvas.load("'.$file_url_web.'");
var odfelement = document.getElementById("odf"),
odfcanvas = new odf.OdfCanvas(odfelement);
odfcanvas.load("'.$file_url_web.'");
}
$(document).ready(function() {
window.setTimeout(init, 0);

@ -8,6 +8,9 @@
* */
use \ChamiloSession as Session;
use Silex\Application;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Routing\Router;
class Template
{
@ -28,22 +31,32 @@ class Template
public $force_plugin_load = true;
public $navigation_array;
public $loadBreadcrumb = true;
/** @var Symfony\Component\Security\Core\SecurityContext */
/** @var SecurityContext */
private $security;
/** @var Symfony\Component\Translation\Translator */
/** @var Translator */
private $translator;
/** @var Router */
private $urlGenerator;
/**
* @param Application $app
* @param $database
* @param $security
* @param $translator
* @param Database $database
* @param SecurityContext $security
* @param Translator $translator
* @param Router $urlGenerator
*/
public function __construct(Application $app, $database, $security, $translator)
{
public function __construct(
Application $app,
Database $database,
SecurityContext $security,
Translator $translator,
Router $urlGenerator
) {
$this->app = &$app;
$this->security = $security;
$this->translator = $translator;
$this->urlGenerator = $urlGenerator;
$this->app['classic_layout'] = true;
$this->navigation_array = $this->returnNavigationArray();
@ -100,21 +113,20 @@ class Template
}
/**
* @param array $interbreadcrumb
* @param array $breadCrumb
*/
public function setBreadcrumb($interbreadcrumb)
public function setBreadcrumb($breadCrumb)
{
if (isset($this->app['breadcrumb']) && !empty($this->app['breadcrumb'])) {
if (empty($interbreadcrumb)) {
$interbreadcrumb = $this->app['breadcrumb'];
if (empty($breadCrumb)) {
$breadCrumb = $this->app['breadcrumb'];
} else {
$interbreadcrumb = array_merge($interbreadcrumb, $this->app['breadcrumb']);
$breadCrumb = array_merge($breadCrumb, $this->app['breadcrumb']);
}
}
if (!empty($interbreadcrumb)) {
$this->app['breadcrumb'] = $interbreadcrumb;
if (!empty($breadCrumb)) {
$this->app['breadcrumb'] = $breadCrumb;
}
}
@ -127,7 +139,7 @@ class Template
*/
public static function get_icon_path($image, $size = ICON_SIZE_SMALL)
{
return Display:: return_icon($image, '', array(), $size, false, true);
return Display::return_icon($image, '', array(), $size, false, true);
}
/**
@ -272,12 +284,22 @@ class Template
* @param string $name
* @return string
*/
public function get_template($name)
public function getTemplate($name)
{
return $this->app['template_style'].'/'.$name;
}
/** Set course parameters */
/**
* @deprecated use getTemplate
*/
public function get_template($name)
{
return $this->getTemplate($name);
}
/**
* Set course parameters
*/
private function setCourseParameters()
{
//Setting course id
@ -306,13 +328,6 @@ class Template
$new_messages = MessageManager::get_new_messages();
$user_info['messages_count'] = $new_messages != 0 ? Display::label($new_messages, 'warning') : null;
/*$usergroup = new UserGroup();
$messages_invitations_count = $usergroup->get_groups_by_user_count($user_info['user_id'], GROUP_USER_PERMISSION_PENDING_INVITATION, false);
$user_info['messages_invitations_count'] = $messages_invitations_count != 0 ? Display::label(
$messages_invitations_count,
'warning'
) : null;*/
$this->user_is_logged_in = true;
}
@ -325,9 +340,9 @@ class Template
*/
private function setSystemParameters()
{
global $_configuration;
$version = $this->app['configuration']['system_version'];
//Setting app paths/URLs
// Setting app paths/URLs.
$_p = array(
'web' => api_get_path(WEB_PATH),
'web_course' => api_get_path(WEB_COURSE_PATH),
@ -352,7 +367,7 @@ class Template
//Here we can add system parameters that can be use in any template
$_s = array(
'software_name' => api_get_software_name(),
'system_version' => $_configuration['system_version'],
'system_version' => $version,
'site_name' => api_get_setting('siteName'),
'institution' => api_get_setting('Institution')
);
@ -797,6 +812,10 @@ class Template
return $template->render(array());
}
/**
* @param string $key
* @param mixed $value
*/
public function assign($key, $value = null)
{
if ($this->app['allowed'] == true) {
@ -804,6 +823,9 @@ class Template
}
}
/**
* @param string $template
*/
public function display($template = null)
{
if (!empty($template)) {
@ -895,7 +917,6 @@ class Template
}
/**
*
* @return string
*/
public function getNavigationLinks()
@ -920,7 +941,6 @@ class Template
return $this->app['twig']->render($this->app['template_style'].'/layout/'.$layout);
}
/**
* @param string $layout
* @deprecated use renderLayout
@ -1106,10 +1126,9 @@ class Template
$html = '';
if ((api_get_setting('showonline', 'world') == 'true' AND !$user_id) OR (api_get_setting(
'showonline',
'users'
) == 'true' AND $user_id) OR (api_get_setting('showonline', 'course') == 'true' AND $user_id AND $course_id)
if ((api_get_setting('showonline', 'world') == 'true' AND !$user_id) OR
(api_get_setting('showonline', 'users') == 'true' AND $user_id) OR
(api_get_setting('showonline', 'course') == 'true' AND $user_id AND $course_id)
) {
$number = Online::who_is_online_count(api_get_setting('time_limit_whosonline'));
@ -1124,10 +1143,8 @@ class Template
// Display the who's online of the platform
if ($number) {
if ((api_get_setting('showonline', 'world') == 'true' AND !$user_id) OR (api_get_setting(
'showonline',
'users'
) == 'true' AND $user_id)
if ((api_get_setting('showonline', 'world') == 'true' AND !$user_id) OR
(api_get_setting('showonline', 'users' ) == 'true' AND $user_id)
) {
$html .= '<li><a href="'.SocialManager::getUserOnlineLink().'" target="_top" title="'.get_lang(
'UsersOnline'
@ -1143,10 +1160,9 @@ class Template
// Display the who's online for the course
if ($number_online_in_course) {
if (is_array($_course) AND api_get_setting(
'showonline',
'course'
) == 'true' AND isset($_course['sysCode'])
if (is_array($_course) AND
api_get_setting('showonline', 'course' ) == 'true' AND
isset($_course['sysCode'])
) {
$html .= '<li><a href="'.SocialManager::getUserOnlineLink($_course['sysCode']).'" target="_top">'.
Display::return_icon(
@ -1380,7 +1396,7 @@ class Template
$navigation[] = $navigation_item;
}
// Part 2: Interbreadcrumbs.
// Part 2: breadcrumbs.
// If there is an array $interbreadcrumb defined then these have to appear before the last breadcrumb
// (which is the tool itself)
if (isset($interbreadcrumb) && is_array($interbreadcrumb)) {

@ -185,7 +185,7 @@ $settingCourseConditions = function (Request $request) use ($cidReset, $app) {
};
/** Only course admin has access. */
$userCourseAdmin = function(Request $request) use ($app) {
$userCourseAdmin = function (Request $request) use ($app) {
if (api_is_allowed_to_edit()) {
return null;
} else {
@ -501,18 +501,23 @@ $app->get('/userportal/{type}/{filter}/{page}', 'userPortal.controller:indexActi
->value('page', '1')
->bind('userportal');
/** get javascript file */
$app->match('/main/inc/lib/javascript/{file}', 'legacy.controller:getJavascript', 'GET')
->assert('file', '.+')
->bind('legacy.controller:getJavascript');
/** Legacy wrapper */
$app->match('/main/{file}', 'legacy.controller:classicAction', 'GET|POST')
->before($removeCidResetDependingOfSection)
->before($settingCourseConditions)
->before($checkLogin)
->before(
function() use ($app) {
// Do not load breadcrumbs
$app['template']->loadBreadcrumb = false;
})
->before(function () use ($app) {
// Do not load breadcrumbs
$app['template']->loadBreadcrumb = false;
})
->assert('file', '.+')
->assert('type', '.+');
->assert('type', '.+')
->bind('legacy.controller:classicAction');
/** Login form */
$app->match('/login', 'index.controller:loginAction', 'GET|POST')
@ -729,7 +734,6 @@ if ($alreadyInstalled) {
$app->mount('/app/session_path', new ChamiloLMS\Provider\ReflectionControllerProvider('session_path.controller'));
$app->mount('/app/session_path/tree', new ChamiloLMS\Provider\ReflectionControllerProvider('session_tree.controller'));
$app->mount('/courses/{course}/curriculum/category', new ChamiloLMS\Provider\ReflectionControllerProvider('curriculum_category.controller'));
$app->mount('/courses/{course}/curriculum/item', new ChamiloLMS\Provider\ReflectionControllerProvider('curriculum_item.controller'));
$app->mount('/courses/{course}/curriculum/user', new ChamiloLMS\Provider\ReflectionControllerProvider('curriculum_user.controller'));

@ -62,11 +62,8 @@ if (isset($app['configuration']['services']['media-alchemyst'])) {
),
//'media-alchemyst.logger' => $logger, // A PSR Logger
));
}
use Knp\Provider\ConsoleServiceProvider;
$app->register(new ConsoleServiceProvider(), array(
@ -77,7 +74,6 @@ $app->register(new ConsoleServiceProvider(), array(
// Monolog.
if (is_writable($app['sys_temp_path'])) {
/**
* Adding Monolog service provider.
* Examples:
@ -596,7 +592,13 @@ class ChamiloServiceProvider implements ServiceProviderInterface
// Template class
$app['template'] = $app->share(function () use ($app) {
$template = new Template($app, $app['database'], $app['security'], $app['translator']);
$template = new Template(
$app,
$app['database'],
$app['security'],
$app['translator'],
$app['url_generator']
);
return $template;
});
@ -631,7 +633,6 @@ class ChamiloServiceProvider implements ServiceProviderInterface
return $mailGenerator;
});
// Setting up name conventions
$conventions = require_once $app['sys_root'].'main/inc/lib/internationalization_database/name_order_conventions.php';
if (isset($configuration['name_order_conventions']) && !empty($configuration['name_order_conventions'])) {
@ -852,3 +853,11 @@ $app['editor_connector'] = $app->share(function ($app) {
);
});
/*
$app->register(
new ChamiloLMS\Provider\BootstrapSilexProvider(),
array(
)
);*/

@ -50,7 +50,7 @@ class CkEditor extends Editor
*/
public function editorReplace()
{
$toolbar = new Toolbar\Basic($this->toolbarSet, $this->config, 'CkEditor');
$toolbar = new Toolbar\Basic($this->urlGenerator, $this->toolbarSet, $this->config, 'CkEditor');
$toolbar->setLanguage($this->translator->getLocale());
$config = $toolbar->getConfig();
$javascript = $this->toJavascript($config);

@ -8,7 +8,6 @@ namespace ChamiloLMS\Component\Editor\CkEditor\Toolbar;
*/
class Documents extends Basic
{
public function getConfig()
{
$config['toolbarGroups'] = array(
@ -29,9 +28,12 @@ class Documents extends Basic
array('name' => 'mode')
);
$config['extraPlugins'] = $this->getConfigAttribute('extraPlugins').',mathjax';
$config['mathJaxLib'] = $this->urlGenerator->generate(
'legacy.controller:getJavascript',
array('file' => 'math_jax/MathJax.js', 'config'=> 'default')
);
$config['fullPage'] = true;
//$config['height'] = '200';
return $config;
}
}

@ -2,7 +2,7 @@
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Component\Editor;
use \Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Routing\Router;
use \Entity\Course;
@ -52,8 +52,8 @@ class Editor
*/
public function __construct(Translator $translator, Router $urlGenerator, $course)
{
$this->toolbarSet = 'Basic';
$this->value = '';
$this->toolbarSet = 'Basic';
$this->value = '';
$this->config = array();
$this->setConfigAttribute('width', '100%');
$this->setConfigAttribute('height', '200');
@ -96,7 +96,7 @@ class Editor
*/
public function editorReplace()
{
$toolbar = new Toolbar($this->toolbarSet, $this->config);
$toolbar = new Toolbar($this->urlGenerator, $this->toolbarSet, $this->config);
$toolbar->setLanguage($this->translator->getLocale());
$config = $toolbar->getConfig();
$javascript = $this->toJavascript($config);

@ -46,7 +46,7 @@ class TinyMce extends Editor
*/
public function editorReplace()
{
$toolbar = new Toolbar\Basic($this->toolbarSet, $this->config, 'TinyMce');
$toolbar = new Toolbar\Basic($this->urlGenerator, $this->toolbarSet, $this->config, 'TinyMce');
$toolbar->setLanguage($this->translator->getLocale());
$config = $toolbar->getConfig();
$config['selector'] = "#".$this->name;

@ -3,6 +3,8 @@
namespace ChamiloLMS\Component\Editor;
use Symfony\Component\Routing\Router;
/**
* Class Toolbar
* @package ChamiloLMS\Component\Editor
@ -10,18 +12,24 @@ namespace ChamiloLMS\Component\Editor;
class Toolbar
{
public $config;
public $urlGenerator;
/**
* @param Router $urlGenerator
* @param string $toolbar
* @param array $config
* @param string $prefix
*/
public function __construct($toolbar = null, $config = array(), $prefix = null)
{
public function __construct(
Router $urlGenerator,
$toolbar = null,
$config = array(),
$prefix = null
) {
if (!empty($toolbar)) {
$class = __NAMESPACE__."\\".$prefix."\\Toolbar\\".$toolbar;
if (class_exists($class)) {
$toolbarObj = new $class;
$toolbarObj = new $class($urlGenerator);
$this->setConfig($toolbarObj->getConfig());
}
}
@ -29,6 +37,7 @@ class Toolbar
if (!empty($config)) {
$this->updateConfig($config);
}
$this->urlGenerator = $urlGenerator;
}
/**
@ -59,6 +68,18 @@ class Toolbar
return $this->config;
}
/**
* @param string
* @return array
*/
public function getConfigAttribute($variable)
{
if (isset($this->config[$variable])) {
return $this->config[$variable];
}
return null;
}
/**
* @param $language
*/

@ -17,7 +17,6 @@ use \ChamiloSession as Session;
class LegacyController extends CommonController
{
public $section;
public $language_files = array('courses', 'index', 'admin');
/**
* Handles default Chamilo scripts handled by Display::display_header() and display_footer()
@ -41,8 +40,9 @@ class LegacyController extends CommonController
//$_REQUEST = $request->request->all();
$mainPath = $app['paths']['sys_root'].'main/';
$fileToLoad = $mainPath.$file;
if (is_file($mainPath.$file)) {
if (is_file($fileToLoad) && \Security::check_abs_path($fileToLoad, $mainPath)) {
// Default values
$_course = api_get_course_info();
@ -90,4 +90,18 @@ class LegacyController extends CommonController
}
return new Response($response, 200, $responseHeaders);
}
/**
* @param Application $app
* @param string $file
* @return BinaryFileResponse
*/
public function getJavascript(Application $app, $file)
{
$mainPath = $app['paths']['sys_root'].'main/inc/lib/javascript/';
$fileToLoad = $mainPath.$file;
if (is_file($fileToLoad) && \Security::check_abs_path($fileToLoad, $mainPath)) {
return $app->sendFile($fileToLoad);
}
}
}

Loading…
Cancel
Save