Add faqbundle

ofaj
jmontoyaa 9 years ago
parent f2b46bb449
commit 136793be5c
  1. 7
      app/AppKernel.php
  2. 1
      app/config/config.yml
  3. 41
      app/config/mopa/mopa_bootstrap.yml
  4. 2
      app/config/routing.yml
  5. 6
      app/config/routing_dev.yml
  6. 4
      app/config/sonata/sonata_admin.yml
  7. 1
      app/config/sonata/sonata_page.yml
  8. 6
      app/config/sonata/sonata_translation.yml
  9. 2
      cli-config.php
  10. 110
      composer.json
  11. 3
      src/Chamilo/AdminBundle/Resources/views/layout.html.twig
  12. 82
      src/Chamilo/AdminBundle/Resources/views/standard_layout.html.twig
  13. 68
      src/Chamilo/FaqBundle/Admin/CategoryAdmin.php
  14. 74
      src/Chamilo/FaqBundle/Admin/QuestionAdmin.php
  15. 18
      src/Chamilo/FaqBundle/ChamiloFaqBundle.php
  16. 183
      src/Chamilo/FaqBundle/Controller/FaqController.php
  17. 27
      src/Chamilo/FaqBundle/DependencyInjection/ChamiloFaqExtension.php
  18. 315
      src/Chamilo/FaqBundle/Entity/Category.php
  19. 63
      src/Chamilo/FaqBundle/Entity/CategoryRepository.php
  20. 313
      src/Chamilo/FaqBundle/Entity/Question.php
  21. 32
      src/Chamilo/FaqBundle/Entity/QuestionRepository.php
  22. 19
      src/Chamilo/FaqBundle/Resources/config/admin.yml
  23. 8
      src/Chamilo/FaqBundle/Resources/config/routing.yml
  24. 18
      src/Chamilo/FaqBundle/Resources/config/services.yml
  25. 34
      src/Chamilo/FaqBundle/Resources/views/Faq/index.html.twig
  26. 9
      src/Chamilo/FaqBundle/Resources/views/Faq/index_without_collapse.html.twig
  27. 3
      src/Chamilo/PageBundle/Resources/views/demo_layout.html.twig
  28. 38
      src/Chamilo/ThemeBundle/Resources/views/Layout/base-layout.html.twig

@ -35,6 +35,8 @@ class AppKernel extends Kernel
new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(),
// Data grid
//new APY\DataGridBundle\APYDataGridBundle(),
new Chamilo\FaqBundle\ChamiloFaqBundle(),
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
// Sonata
new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(),
@ -48,7 +50,7 @@ class AppKernel extends Kernel
new Sonata\NotificationBundle\SonataNotificationBundle(),
new Sonata\DatagridBundle\SonataDatagridBundle(),
new Sonata\MediaBundle\SonataMediaBundle(),
//new Sonata\TranslationBundle\SonataTranslationBundle(),
new Sonata\TranslationBundle\SonataTranslationBundle(),
new Sonata\PageBundle\SonataPageBundle(),
new Spy\TimelineBundle\SpyTimelineBundle(),
@ -70,7 +72,7 @@ class AppKernel extends Kernel
//new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
//new Gregwar\CaptchaBundle\GregwarCaptchaBundle(),
//new Mopa\Bundle\BootstrapBundle\MopaBootstrapBundle(),
new Mopa\Bundle\BootstrapBundle\MopaBootstrapBundle(),
//new Liip\ThemeBundle\LiipThemeBundle(),
new Ivory\CKEditorBundle\IvoryCKEditorBundle(),
new FM\ElfinderBundle\FMElfinderBundle(),
@ -112,6 +114,7 @@ class AppKernel extends Kernel
// Extra
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
/*
//new JMS\TranslationBundle\JMSTranslationBundle(),
//new JMS\DiExtraBundle\JMSDiExtraBundle($this),

@ -31,6 +31,7 @@ imports:
- { resource: sonata/sonata_admin.yml }
- { resource: sonata/sonata_page.yml }
- { resource: sonata/sonata_media.yml }
- { resource: sonata/sonata_translation.yml }
# - { resource: sonata/sonata_news.yml }
# - { resource: sonata/sonata_user.yml }
# - { resource: sonata/sonata_notification.yml }

@ -1,22 +1,21 @@
# see https://github.com/phiamo/MopaBootstrapBundle/blob/master/Resources/doc/misc/configuration-reference.md
#mopa_bootstrap:
# # Adds twig form theme support
## horizontal_label_class: 'aa'
## horizontal_input_wrapper_class: 'dd'
# menu: ~ # enables twig helpers for menu
# form:
# show_legend: true # default is true
# show_child_legend: false # default is true
# error_type: block # or inline which is default
# render_optional_text: true
#
# collection:
# widget_remove_btn:
# icon: trash
# icon_color: white
# attr:
# class: btn btn-danger
# widget_add_btn:
# icon: plus-sign
# attr:
# class: btn btn-primary
mopa_bootstrap:
# Adds twig form theme support
# horizontal_label_class: 'aa'
# horizontal_input_wrapper_class: 'dd'
menu: ~ # enables twig helpers for menu
form:
show_legend: true # default is true
show_child_legend: false # default is true
error_type: block # or inline which is default
render_optional_text: true
collection:
widget_remove_btn:
icon: trash
attr:
class: btn btn-danger
widget_add_btn:
icon: plus-sign
attr:
class: btn btn-primary

@ -79,3 +79,5 @@ core_bundle:
fos_js_routing:
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
faq:
resource: "@ChamiloFaqBundle/Resources/config/routing.yml"

@ -6,9 +6,9 @@ _profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix: /_profiler
_configurator:
resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
prefix: /_configurator
#_configurator:
# resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
# prefix: /_configurator
_errors:
resource: "@TwigBundle/Resources/config/routing/errors.xml"

@ -75,6 +75,7 @@ sonata_admin:
- sonata.classification.admin.category
- sonata.classification.admin.tag
- sonata.classification.admin.collection
sonata.admin.group.site_builder:
label: Site Builder
label_catalogue: SonataDemoBundle
@ -82,6 +83,9 @@ sonata_admin:
items:
- sonata.page.admin.page
- sonata.page.admin.site
- sonata.admin.faq_question
- sonata.admin.faq_category
sonata.admin.group.administration:
label: sonata_administration
label_catalogue: SonataAdminBundle

@ -40,6 +40,7 @@ sonata_page:
- ^/userportal
- ^/userportal/(.*)
- ^/js/(.*)
- ^/faq/(.*)
- ^/courses/(.*)
- ^/front/editor

@ -0,0 +1,6 @@
sonata_translation:
locales: [en, fr, it, nl, es]
default_locale: en
# here enable the types you need
gedmo:
enabled: true

@ -15,7 +15,7 @@
use Doctrine\ORM\Tools\Console\ConsoleRunner;
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/main/inc/lib/api.lib.php';
//require_once __DIR__.'/main/inc/lib/api.lib.php';
$configurationFile = __DIR__.'/app/config/configuration.php';
if (!is_file($configurationFile)) {

@ -46,28 +46,31 @@
"twig/twig": "1.*",
"twig/extensions": "~1.0",
"symfony/symfony": "2.8.*",
"symfony/symfony": ">=2.8",
"symfony/intl": "^3.0",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~4.0",
"sensio/distribution-bundle": "~5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"sensio/generator-bundle": "~2.4",
"sensio/generator-bundle": "~3.0",
"incenteev/composer-parameter-handler": "~2.0",
"jms/serializer-bundle": "~0.12",
"doctrine/orm": "~2.4",
"doctrine/dbal": "~2.4",
"doctrine/doctrine-bundle": "~1.5",
"doctrine/migrations": "~1.0@dev",
"doctrine/doctrine-migrations-bundle": "*@dev",
"doctrine/doctrine-fixtures-bundle": "~2.2",
"doctrine/migrations": "~1.0@dev",
"doctrine/doctrine-fixtures-bundle": "^2.3",
"doctrine/data-fixtures": "~1.0@dev",
"symfony-cmf/routing-bundle": "~1.1",
"stof/doctrine-extensions-bundle": "~1.0",
"gedmo/doctrine-extensions": "~2.3",
"knplabs/gaufrette": "~0.1.6",
"knplabs/knp-menu-bundle": "dev-master",
"sonata-project/easy-extends-bundle": "~2.1@dev",
"sonata-project/seo-bundle": "~2.0",
@ -94,19 +97,20 @@
"friendsofsymfony/comment-bundle": "~2.0@dev",
"stof/doctrine-extensions-bundle": "~1.0",
"gedmo/doctrine-extensions": "~2.3",
"toin0u/digitalocean": "dev-master",
"mopa/bootstrap-bundle": "~3.0",
"egeloen/ckeditor-bundle": "~3.0",
"helios-ag/fm-elfinder-bundle": "~5",
"helios-ag/fm-elfinder-bundle": "~6.0",
"friendsofsymfony/jsrouting-bundle": "~1.5",
"michelf/php-markdown": "~1.4",
"knplabs/knp-markdown-bundle": "~1.3",
"sabre/vobject": "~3.1",
"toin0u/digitalocean": "~1.4",
"emojione/emojione": "1.3.0",
"zendframework/zend-config": "2.3.3",
@ -130,58 +134,60 @@
"graphp/graphviz": "~0.2.0",
"graphp/algorithms": "~0.8.0",
"sunra/php-simple-html-dom-parser": "~1.5.0",
"media-alchemyst/media-alchemyst": "0.4.8",
"media-alchemyst/media-alchemyst": "~0.5",
"php-ffmpeg/php-ffmpeg": "0.5.1",
"imagine/imagine": "0.6.2",
"essence/essence": "^2.5",
"jeroendesloovere/vcard": "^1.2"
},
"require-dev": {
"behat/behat": "2.5.*@stable",
"behat/mink": "1.7.*@stable",
"behat/behat": "@stable",
"behat/mink": "@stable",
"behat/mink-extension": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*"
},
"scripts": {
"pre-install-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::deleteOldFilesFrom19x"
],
"pre-update-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::deleteOldFilesFrom19x"
],
"post-install-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::dumpCssFiles",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"post-update-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::dumpCssFiles",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
]
"pre-install-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::deleteOldFilesFrom19x"
],
"pre-update-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::deleteOldFilesFrom19x"
],
"post-install-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::dumpCssFiles",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"post-update-cmd": [
"Chamilo\\CoreBundle\\Composer\\ScriptHandler::dumpCssFiles",
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
]
},
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "1.11.x-dev"
},
"asset-installer-paths": {
"bower-asset-library": "web/assets/"
}
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "1.11.x-dev"
},
"asset-installer-paths": {
"bower-asset-library": "web/assets/"
}
},
"config": {
"component-dir": "web/assets"

@ -18,6 +18,9 @@
type="text/css" media="all"/>
<link rel="stylesheet"
href="{{ asset('bundles/sonatacore/vendor/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css') }}"/>
<link rel="stylesheet" href="{{ asset('bundles/sonatatranslation/css/sonata-translation.css') }}"/>
{% endblock %}
{% block javascripts %}

@ -27,8 +27,7 @@ file that was distributed with this source code.
{% block meta_tags %}
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="UTF-8">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'
name='viewport'>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
{% endblock %}
{% block stylesheets %}
@ -46,7 +45,7 @@ file that was distributed with this source code.
USE_STICKYFORMS: {% if sonata_admin.adminPool.getOption('use_stickyforms') %}true{% else %}false{% endif %}
};
window.SONATA_TRANSLATIONS = {
CONFIRM_EXIT: '{{ 'confirm_exit'|trans({}, 'SonataAdminBundle')|escape('js') }}'
CONFIRM_EXIT: '{{ 'confirm_exit'|trans({}, 'SonataAdminBundle')|escape('js') }}'
};
// http://getbootstrap.com/getting-started/#support-ie10-width
@ -89,7 +88,7 @@ file that was distributed with this source code.
-
{% for menu in admin.breadcrumbs(action) %}
{% if not loop.first %}
{% if loop.index != 2 %}
{% if loop.index != 2 %}
&gt;
{% endif %}
@ -97,7 +96,7 @@ file that was distributed with this source code.
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endif%}
{% endblock %}
</title>
</head>
@ -118,8 +117,7 @@ file that was distributed with this source code.
{% spaceless %}
<a class="logo" href="{{ path('sonata_admin_dashboard') }}">
{% if 'single_image' == sonata_admin.adminPool.getOption('title_mode') or 'both' == sonata_admin.adminPool.getOption('title_mode') %}
<img src="{{ asset(sonata_admin.adminPool.titlelogo) }}"
alt="{{ sonata_admin.adminPool.title }}">
<img src="{{ asset(sonata_admin.adminPool.titlelogo) }}" alt="{{ sonata_admin.adminPool.title }}">
{% endif %}
{% if 'single_text' == sonata_admin.adminPool.getOption('title_mode') or 'both' == sonata_admin.adminPool.getOption('title_mode') %}
<span>{{ sonata_admin.adminPool.title }}</span>
@ -129,8 +127,7 @@ file that was distributed with this source code.
{% endblock %}
{% block sonata_nav %}
<nav class="navbar navbar-static-top" role="navigation">
<a href="#" class="sidebar-toggle" data-toggle="offcanvas"
role="button">
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
<span class="sr-only">Toggle navigation</span>
</a>
@ -142,7 +139,7 @@ file that was distributed with this source code.
{% if _breadcrumb is empty %}
{% if action is defined %}
{% for menu in admin.breadcrumbs(action) %}
{% if not loop.last %}
{% if not loop.last %}
<li>
{% if menu.uri is not empty %}
<a href="{{ menu.uri }}">{{ menu.label|raw }}</a>
@ -151,9 +148,7 @@ file that was distributed with this source code.
{% endif %}
</li>
{% else %}
<li class="active">
<span>{{ menu.label }}</span>
</li>
<li class="active"><span>{{ menu.label }}</span></li>
{% endif %}
{% endfor %}
{% endif %}
@ -170,18 +165,14 @@ file that was distributed with this source code.
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle"
data-toggle="dropdown" href="#">
<i class="fa fa-plus-square fa-fw"></i>
<i class="fa fa-caret-down"></i>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-plus-square fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
{% include sonata_admin.adminPool.getTemplate('add_block') %}
</li>
<li class="dropdown user-menu">
<a class="dropdown-toggle"
data-toggle="dropdown" href="#">
<i class="fa fa-user fa-fw"></i> <i
class="fa fa-caret-down"></i>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-user">
{% include sonata_admin.adminPool.getTemplate('user_block') %}
@ -202,17 +193,11 @@ file that was distributed with this source code.
{% block sonata_side_nav %}
{% block sonata_sidebar_search %}
{% if app.user and is_granted('ROLE_SONATA_ADMIN') %}
<form action="{{ path('sonata_admin_search') }}"
method="GET" class="sidebar-form"
role="search">
<form action="{{ path('sonata_admin_search') }}" method="GET" class="sidebar-form" role="search">
<div class="input-group custom-search-form">
<input type="text" name="q"
value="{{ app.request.get('q') }}"
class="form-control"
placeholder="{{ 'search_placeholder'|trans({}, 'SonataAdminBundle') }}">
<input type="text" name="q" value="{{ app.request.get('q') }}" class="form-control" placeholder="{{ 'search_placeholder'|trans({}, 'SonataAdminBundle') }}">
<span class="input-group-btn">
<button class="btn btn-flat"
type="submit">
<button class="btn btn-flat" type="submit">
<i class="fa fa-search"></i>
</button>
</span>
@ -228,12 +213,9 @@ file that was distributed with this source code.
{% endif %}
{% endblock side_bar_nav %}
{% block side_bar_after_nav %}
<p class="text-center small"
style="border-top: 1px solid #444444; padding-top: 10px">
<p class="text-center small" style="border-top: 1px solid #444444; padding-top: 10px">
{% block side_bar_after_nav_content %}
<a href="https://sonata-project.org"
rel="noreferrer" target="_blank">sonata
project</a>
<a href="https://sonata-project.org" rel="noreferrer" target="_blank">sonata project</a>
{% endblock %}
</p>
{% endblock %}
@ -249,14 +231,12 @@ file that was distributed with this source code.
{% block sonata_page_content_header %}
{% block sonata_page_content_nav %}
{% if _tab_menu is not empty or _actions is not empty or _list_filters_actions is not empty %}
<nav class="navbar navbar-default"
role="navigation">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
{% block tab_menu_navbar_header %}
{% if _navbar_title is not empty %}
<div class="navbar-header">
<a class="navbar-brand"
href="#">{{ _navbar_title|raw }}</a>
<a class="navbar-brand" href="#">{{ _navbar_title|raw }}</a>
</div>
{% endif %}
{% endblock %}
@ -271,9 +251,7 @@ file that was distributed with this source code.
{% if admin is defined and action is defined and action == 'list' and admin.listModes|length > 1 %}
<div class="nav navbar-right btn-group">
{% for mode, settings in admin.listModes %}
<a href="{{ admin.generateUrl('list', app.request.query.all|merge({_list_mode: mode})) }}"
class="btn btn-default navbar-btn btn-sm{% if admin.getListMode() == mode %} active{% endif %}"><i
class="{{ settings.class }}"></i></a>
<a href="{{ admin.generateUrl('list', app.request.query.all|merge({_list_mode: mode})) }}" class="btn btn-default navbar-btn btn-sm{% if admin.getListMode() == mode %} active{% endif %}"><i class="{{ settings.class }}"></i></a>
{% endfor %}
</div>
{% endif %}
@ -283,12 +261,8 @@ file that was distributed with this source code.
<ul class="nav navbar-nav navbar-right">
{% if _actions|split('</a>')|length > 2 %}
<li class="dropdown sonata-actions">
<a href="#"
class="dropdown-toggle"
data-toggle="dropdown">{{ 'link_actions'|trans({}, 'SonataAdminBundle') }}
<b class="caret"></b></a>
<ul class="dropdown-menu"
role="menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ 'link_actions'|trans({}, 'SonataAdminBundle') }} <b class="caret"></b></a>
<ul class="dropdown-menu" role="menu">
{{ _actions|raw }}
</ul>
</li>
@ -356,17 +330,7 @@ file that was distributed with this source code.
{% block bootlint %}
{# Bootlint - https://github.com/twbs/bootlint#in-the-browser #}
<script type="text/javascript">
javascript:(function () {
var s = document.createElement("script");
s.onload = function () {
bootlint.showLintReportForCurrentDocument([], {
hasProblems: false,
problemFree: false
});
};
s.src = "https://maxcdn.bootstrapcdn.com/bootlint/latest/bootlint.min.js";
document.body.appendChild(s)
})();
javascript:(function(){var s=document.createElement("script");s.onload=function(){bootlint.showLintReportForCurrentDocument([], {hasProblems: false, problemFree: false});};s.src="https://maxcdn.bootstrapcdn.com/bootlint/latest/bootlint.min.js";document.body.appendChild(s)})();
</script>
{% endblock %}
{% endif %}

@ -0,0 +1,68 @@
<?php
namespace Chamilo\FaqBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
/**
* Class QuestionAdmin
*
* @package Genj\FaqAdminBundle\Admin
*/
class CategoryAdmin extends Admin
{
protected $datagridValues = array(
'_page' => 1,
'_sort_by' => 'created_at',
'_sort_order' => 'Desc'
);
/**
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('headline')
->add('body')
->add('rank')
->add('isActive')
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('headline', null, array('identifier' => true))
->add('_action', 'actions',
array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array()
)
)
)
;
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('headline', null, array('attr' => array('class' => 'span12')))
->add('body', null, array('required' => false, 'attr' => array('class' => 'span12')))
->add('rank', null, array('required' => false, 'attr' => array('class' => 'span12')))
->add('slug')
->add('isActive')
->end();
}
}

@ -0,0 +1,74 @@
<?php
namespace Chamilo\FaqBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
/**
* Class QuestionAdmin
*
* @package Genj\FaqAdminBundle\Admin
*/
class QuestionAdmin extends Admin
{
protected $datagridValues = array(
'_page' => 1,
'_sort_by' => 'issueDate',
'_sort_order' => 'Desc'
);
/**
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('headline')
->add('body')
->add('category')
->add('slug');
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('headline', null, array('identifier' => true))
->add('Category')
->add('rank')
->add('_action', 'actions',
array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array()
)
)
);
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('headline', null, array('attr' => array('class' => 'span12')))
->add('body', null, array('required' => false, 'attr' => array('class' => 'span12')))
->add('category', null, array(
'expanded' => true,
'required' => true,
'attr' => array('class' => 'radio-list vertical')
))
->add('rank', null, array('required' => false, 'attr' => array('class' => 'span12')))
->add('slug', null, array('required' => false, 'attr' => array('class' => 'span12')))
->add('onlyAuthUsers')
->end();
}
}

@ -0,0 +1,18 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\FaqBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
/**
* Class ChamiloFaqBundle
*
* Based in GenjFaqBundle
*
* @package Chamilo\UserBundle
*/
class ChamiloFaqBundle extends Bundle
{
}

@ -0,0 +1,183 @@
<?php
namespace Chamilo\FaqBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Chamilo\FaqBundle\Entity\Category;
use Chamilo\FaqBundle\Entity\Question;
/**
* Class FaqController
*
* @package Genj\FaqBundle\Controller
*/
class FaqController extends Controller
{
/**
* Default index. Shows one category/question at a time. If you want to just show everything at once, use the
* indexWithoutCollapse action instead.
*
* @param string $categorySlug
* @param string $questionSlug
*
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexAction($categorySlug, $questionSlug)
{
if (!$categorySlug || !$questionSlug) {
$redirect = $this->generateRedirectToDefaultSelection($categorySlug, $questionSlug);
if ($redirect) {
return $redirect;
}
}
// Otherwise get the selected category and/or question as usual
$questions = array();
$categories = $this->getCategoryRepository()->retrieveActive();
$selectedCategory = $this->getSelectedCategory($categorySlug);
$selectedQuestion = $this->getSelectedQuestion($questionSlug);
if ($selectedCategory) {
$questions = $selectedCategory->getQuestions();
}
// Throw 404 if there is no category in the database
if (!$categories) {
throw $this->createNotFoundException('You need at least 1 active faq category in the database');
}
return $this->render(
'@ChamiloFaq/Faq/index.html.twig',
array(
'categories' => $categories,
'questions' => $questions,
'selectedCategory' => $selectedCategory,
'selectedQuestion' => $selectedQuestion
)
);
}
/**
* Index without any collapsing. Will just show all categories and questions at once.
*
* @param string $categorySlug
*
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexWithoutCollapseAction($categorySlug)
{
if ($categorySlug) {
$categories = $this->getCategoryRepository()->retrieveActiveBySlug($categorySlug);
} else {
$categories = $this->getCategoryRepository()->retrieveActive();
}
if (!$categories) {
throw $this->createNotFoundException('Faq category not found');
}
return $this->render(
'@ChamiloFaq/Faq/index_without_collapse.html.twig',
array(
'categories' => $categories,
'categorySlug' => $categorySlug
)
);
}
/**
* Open first category or question if none was selected so far.
*
* @param string $categorySlug
* @param string $questionSlug
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
protected function generateRedirectToDefaultSelection($categorySlug, $questionSlug)
{
$doRedirect = false;
//$config = $this->container->getParameter('faq');
$config = [];
$config['select_first_category_by_default'] = true;
$config['select_first_question_by_default'] = true;
if (!$categorySlug && $config['select_first_category_by_default']) {
$firstCategory = $this->getCategoryRepository()->retrieveFirst();
if ($firstCategory instanceof Category) {
$categorySlug = $firstCategory->getSlug();
$doRedirect = true;
} else {
throw $this->createNotFoundException('Tried to open the first faq category by default, but there was none.');
}
}
if (!$questionSlug && $config['select_first_question_by_default']) {
$firstQuestion = $this->getQuestionRepository()->retrieveFirstByCategorySlug($categorySlug);
if ($firstQuestion instanceof Question) {
$questionSlug = $firstQuestion->getSlug();
$doRedirect = true;
} else {
throw $this->createNotFoundException('Tried to open the first faq question by default, but there was none.');
}
}
if ($doRedirect) {
return $this->redirect(
$this->generateUrl('faq', array('categorySlug' => $categorySlug, 'questionSlug' => $questionSlug), true)
);
}
return false;
}
/**
* @param string $questionSlug
*
* @return \Genj\FaqBundle\Entity\Question
*/
protected function getSelectedQuestion($questionSlug = null)
{
$selectedQuestion = null;
if ($questionSlug !== null) {
$selectedQuestion = $this->getQuestionRepository()->findOneBySlug($questionSlug);
}
return $selectedQuestion;
}
/**
* @param string $categorySlug
*
* @return \Genj\FaqBundle\Entity\Category
*/
protected function getSelectedCategory($categorySlug = null)
{
$selectedCategory = null;
if ($categorySlug !== null) {
$selectedCategory = $this->getCategoryRepository()->findOneBy(array('isActive' => true, 'slug' => $categorySlug));
}
return $selectedCategory;
}
/**
* @return \Genj\FaqBundle\Entity\QuestionRepository
*/
protected function getQuestionRepository()
{
return $this->container->get('genj_faq.entity.question_repository');
}
/**
* @return \Genj\FaqBundle\Entity\CategoryRepository
*/
protected function getCategoryRepository()
{
return $this->container->get('genj_faq.entity.category_repository');
}
}

@ -0,0 +1,27 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\FaqBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class ChamiloFaqExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('admin.yml');
$loader->load('services.yml');
}
}

@ -0,0 +1,315 @@
<?php
namespace Chamilo\FaqBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Category
*
* @ORM\Entity(repositoryClass="Chamilo\FaqBundle\Entity\CategoryRepository")
* @ORM\Table(
* name="faq_category",
* indexes={@ORM\Index(name="is_active_idx", columns={"is_active"})}
* )
*
* @package Genj\FaqBundle\Entity
*/
class Category
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Question", mappedBy="category")
*/
protected $questions;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
protected $headline;
/**
* @ORM\Column(type="text", nullable=true)
*/
protected $body;
/**
* @Gedmo\SortablePosition
* @ORM\Column(name="rank", type="integer")
*/
protected $rank;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
protected $isActive;
/**
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created_at", type="datetime")
*/
protected $createdAt;
/**
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="updated_at", type="datetime")
*/
protected $updatedAt;
/**
* @Gedmo\Slug(fields={"headline"}, updatable=false)
* @ORM\Column(type="string", length=50, nullable=false)
*/
protected $slug;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set headline
*
* @param string $headline
*
* @return Category
*/
public function setHeadline($headline)
{
$this->headline = $headline;
return $this;
}
/**
* Get headline
*
* @return string
*/
public function getHeadline()
{
return $this->headline;
}
/**
* Get body
*
* @return string
*/
public function getBody()
{
return $this->body;
}
/**
* Set body
*
* @param string $body
*
* @return Question
*/
public function setBody($body)
{
$this->body = $body;
return $this;
}
/**
* Get rank
*
* @return string
*/
public function getRank()
{
return $this->rank;
}
/**
* Set rank
*
* @param string $rank
*
* @return Question
*/
public function setRank($rank)
{
$this->rank = $rank;
return $this;
}
/**
* Set is_active
*
* @param boolean $isActive
*
* @return Category
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* @return boolean
*/
public function getIsActive()
{
return $this->isActive;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return Category
*/
public function setCreatedAt(\DateTime $createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
*
* @return Category
*/
public function setUpdatedAt(\DateTime $updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* Set slug
*
* @param string $slug
*
* @return Category
*/
public function setSlug($slug)
{
$this->slug = $slug;
return $this;
}
/**
* Get slug
*
* @return string
*/
public function getSlug()
{
return $this->slug;
}
/**
* Add question
*
* @param Question $question
*
* @return Category
*/
public function addQuestion(Question $question)
{
$this->questions[] = $question;
return $this;
}
/**
* Remove question
*
* @param Question $question
*/
public function removeQuestion(Question $question)
{
$this->questions->removeElement($question);
}
/**
* Get questions
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getQuestions()
{
return $this->questions;
}
/**
* Returns a string representation of this object
*
* @return string
*/
public function __toString()
{
return $this->getHeadline();
}
/**
* Returns the route name for url generation
*
* @return string
*/
public function getRouteName()
{
return 'faq';
}
/**
* Returns the route parameters for url generation
*
* @return array
*/
public function getRouteParameters()
{
return array(
'categorySlug' => $this->getSlug()
);
}
}

@ -0,0 +1,63 @@
<?php
namespace Chamilo\FaqBundle\Entity;
use Doctrine\ORM\EntityRepository;
/**
* Class CategoryRepository
*
* @package Genj\FaqBundle\Entity
*/
class CategoryRepository extends EntityRepository
{
/**
* @return mixed
*/
public function retrieveActive()
{
$query = $this->createQueryBuilder('c')
->where('c.isActive = :isActive')
->orderBy('c.rank', 'ASC')
->getQuery();
$query->setParameter('isActive', true);
return $query->execute();
}
/**
* @param string $slug
*
* @return mixed
*/
public function retrieveActiveBySlug($slug)
{
$query = $this->createQueryBuilder('c')
->where('c.isActive = :isActive')
->andWhere('c.slug = :slug')
->orderBy('c.rank', 'ASC')
->getQuery();
$query->setParameter('isActive', true);
$query->setParameter('slug', $slug);
return $query->execute();
}
/**
* @return Category|null
*/
public function retrieveFirst()
{
$query = $this->createQueryBuilder('c')
->where('c.isActive = :isActive')
->orderBy('c.rank', 'ASC')
->setMaxResults(1)
->getQuery();
$query->setParameter('isActive', true);
return $query->getOneOrNullResult();
}
}

@ -0,0 +1,313 @@
<?php
namespace Chamilo\FaqBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Question
*
* @ORM\MappedSuperclass
* @ORM\Entity(repositoryClass="Chamilo\FaqBundle\Entity\QuestionRepository")
* @ORM\Table(name="faq_question")
*
* @package Genj\FaqBundle\Entity
*/
class Question
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="questions")
* @ORM\OrderBy({"rank" = "asc"})
*/
protected $category;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
protected $headline;
/**
* @ORM\Column(type="text", nullable=true)
*/
protected $body;
/**
* @Gedmo\SortablePosition
* @ORM\Column(name="rank", type="integer")
*/
protected $rank;
/**
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created_at", type="datetime")
*/
protected $createdAt;
/**
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="updated_at", type="datetime")
*/
protected $updatedAt;
/**
* @Gedmo\Slug(fields={"headline"}, updatable=false)
* @ORM\Column(type="string", length=50, nullable=false)
*/
protected $slug;
/**
* @var boolean
* @ORM\Column(name="only_auth_users", type="boolean", nullable=false)
*/
protected $onlyAuthUsers;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set headline
*
* @param string $headline
*
* @return Question
*/
public function setHeadline($headline)
{
$this->headline = $headline;
return $this;
}
/**
* Get headline
*
* @return string
*/
public function getHeadline()
{
return $this->headline;
}
/**
* Set body
*
* @param string $body
*
* @return Question
*/
public function setBody($body)
{
$this->body = $body;
return $this;
}
/**
* Get rank
*
* @return string
*/
public function getRank()
{
return $this->rank;
}
/**
* Set rank
*
* @param string $rank
*
* @return Question
*/
public function setRank($rank)
{
$this->rank = $rank;
return $this;
}
/**
* Get body
*
* @return string
*/
public function getBody()
{
return $this->body;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
*
* @return Question
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set updatedAt
*
* @param \DateTime $updatedAt
*
* @return Question
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* Get updatedAt
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* Set slug
*
* @param string $slug
*
* @return Question
*/
public function setSlug($slug)
{
$this->slug = $slug;
return $this;
}
/**
* Get slug
*
* @return string
*/
public function getSlug()
{
return $this->slug;
}
/**
* Set category
*
* @param Category $category
*
* @return Question
*/
public function setCategory(Category $category = null)
{
$this->category = $category;
return $this;
}
/**
* Get category
*
* @return Category
*/
public function getCategory()
{
return $this->category;
}
/**
* Returns a string representation of this object
*
* @return string
*/
public function __toString()
{
return $this->getHeadline();
}
/**
* Returns the route name for url generation
*
* @return string
*/
public function getRouteName()
{
return 'faq';
}
/**
* Returns the route parameters for url generation
*
* @return array
*/
public function getRouteParameters()
{
return array(
'categorySlug' => $this->getCategory()->getSlug(),
'questionSlug' => $this->getSlug()
);
}
/**
* Returns a string representation of the entity build out of BundleName + EntityName + EntityId
*
* @return string
*/
public function getEntityIdentifier()
{
return 'GenjFaqBundle:Question:' . $this->getId();
}
/**
* @return boolean
*/
public function isOnlyAuthUsers()
{
return $this->onlyAuthUsers;
}
/**
* @param boolean $onlyAuthUsers
* @return Question
*/
public function setOnlyAuthUsers($onlyAuthUsers)
{
$this->onlyAuthUsers = $onlyAuthUsers;
return $this;
}
}

@ -0,0 +1,32 @@
<?php
namespace Chamilo\FaqBundle\Entity;
use Doctrine\ORM\EntityRepository;
/**
* Class QuestionRepository
*
* @package Genj\FaqBundle\Entity
*/
class QuestionRepository extends EntityRepository
{
/**
* @param string $categorySlug
*
* @return Question|null
*/
public function retrieveFirstByCategorySlug($categorySlug)
{
$query = $this->createQueryBuilder('q')
->join('q.category', 'c')
->where('c.slug = :categorySlug')
->orderBy('q.rank', 'ASC')
->setMaxResults(1)
->getQuery();
$query->setParameter('categorySlug', $categorySlug);
return $query->getOneOrNullResult();
}
}

@ -0,0 +1,19 @@
services:
sonata.admin.faq_question:
class: Chamilo\FaqBundle\Admin\QuestionAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "FAQ" }
arguments:
- ~
- Chamilo\FaqBundle\Entity\Question
- ~
sonata.admin.faq_category:
class: Chamilo\FaqBundle\Admin\CategoryAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "FAQ category" }
arguments:
- ~
- Chamilo\FaqBundle\Entity\Category
- ~

@ -0,0 +1,8 @@
faq:
pattern: /faq/{categorySlug}/{questionSlug}
defaults: { _controller: ChamiloFaqBundle:Faq:index, categorySlug: null, questionSlug: null }
# Shows the entire FAQ at once, without collapsing any categories or questions. Useful if your FAQ is not that big.
faq_without_collapse:
pattern: /faq-without-collapse/{categorySlug}
defaults: { _controller: ChamiloFaqBundle:Faq:indexWithoutCollapse, categorySlug: null }

@ -0,0 +1,18 @@
parameters:
genj_faq.entity.question.class: Chamilo\FaqBundle\Entity\Question
genj_faq.entity.category.class: Chamilo\FaqBundle\Entity\Category
genj_faq.entity.question_repository.class: Genj\FaqBundle\Entity\QuestionRepository
genj_faq.entity.category_repository.class: Genj\FaqBundle\Entity\CategoryRepository
services:
genj_faq.entity.question_repository:
factory_service: doctrine
factory_method: getRepository
class: %genj_faq.entity.question_repository.class%
arguments: [%genj_faq.entity.question.class%]
genj_faq.entity.category_repository:
factory_service: doctrine
factory_method: getRepository
class: %genj_faq.entity.category_repository.class%
arguments: [%genj_faq.entity.category.class%]

@ -0,0 +1,34 @@
<h1>FAQ</h1>
<h2>Categories</h2>
<ul>
{% for category in categories %}
{% if selectedCategory.slug is defined and selectedCategory.slug == category.slug%}
<li class="active" >
<strong>{{ category.headline|e }}</strong>
</li>
{% else %}
<li>
<a href="{{ path('faq', { 'categorySlug': category.slug }) }}">{{ category.headline|e }}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% if selectedCategory is not null %}
<h2>Questions</h2>
<ul>
{% for question in questions %}
{% if selectedQuestion.slug is defined and selectedQuestion.slug == question.slug%}
<li class="active" >
<strong>{{ question.headline|e }}</strong>
<div>{{ selectedQuestion.body }}</div>
</li>
{% else %}
<li>
<a href="{{ path('faq', { 'categorySlug': selectedCategory.slug, 'questionSlug': question.slug }) }}">{{ question.headline|e }}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}

@ -0,0 +1,9 @@
<h1>FAQ</h1>
{% for category in categories %}
<h2>{{ category.headline|e }}</h2>
{% for question in category.questions %}
<p><strong>{{ question.headline|e }}</strong></p>
<p>{{ question.body }}</p>
{% endfor %}
{% endfor %}

@ -23,4 +23,5 @@
{{ parent() }}
{% endblock %}
{% block sonata_page_breadcrumb %}{% endblock %}
{% block sonata_page_breadcrumb %}
{% endblock %}

@ -28,25 +28,25 @@
<title>
{% block title %}
{{ chamilo_settings_get('platform.institution') }} - {{ chamilo_settings_get('platform.site_name') }}
{#{{ chamilo_settings_get('platform.institution') }} - {{ chamilo_settings_get('platform.site_name') }}#}
{% endblock %}
</title>
{# Check chamilo_css key in assetic.yml #}
{%- stylesheets '@chamilo_css' -%}
<link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
{#{%- stylesheets '@chamilo_css' -%}#}
{#<link rel="stylesheet" href="{{ asset_url }}"/>#}
{#{% endstylesheets %}#}
{% stylesheets
'@MopaBootstrapBundle/Resources/public/less/mopabootstrapbundle.less'
'@MopaBootstrapBundle/Resources/public/less/eyecon-datepicker.less'
%}
{#{% stylesheets#}
{#'@MopaBootstrapBundle/Resources/public/less/mopabootstrapbundle.less'#}
{#'@MopaBootstrapBundle/Resources/public/less/eyecon-datepicker.less'#}
{#%}#}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen" />
{% endstylesheets %}
{#<link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen" />#}
{#{% endstylesheets %}#}
{# Chamilo theme #}
{% set theme = chamilo_settings_get('platform.theme') %}
{% set theme = 'chamilo' %}
{% set bug_notification_link = '' %}
{% set help_content = '' %}
@ -74,9 +74,9 @@
{# Check chamilo_js key in assetic.yml #}
{% block javascripts %}
{%- javascripts '@chamilo_js' -%}
<script src="{{ asset_url }} "></script>
{% endjavascripts %}
{#{%- javascripts '@chamilo_js' -%}#}
{#<script src="{{ asset_url }} "></script>#}
{#{% endjavascripts %}#}
<script src="{{ asset('bundles/ivoryckeditor/ckeditor.js') }}" type="text/javascript"></script>
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
@ -112,10 +112,10 @@
{# topbar #}
{% block topbar %}
{% include "@template_style/layout/topbar.html.twig" %}
{% if show_toolbar == 1 %}
{#{% include "@template_style/layout/topbar.html.twig" %}#}
{#{% if show_toolbar == 1 %}#}
{#<div class="clear-header"></div>#}
{% endif %}
{#{% endif %}#}
{% endblock %}
<header>
@ -134,9 +134,9 @@
<div class="row">
<div class="col-lg-3">
<div class="logo">
<a href="{{ url('home') }}">
{#<a href="{{ url('index') }}">#}
<img src="{{ asset('bundles/chamilocore/css/themes/'~ theme ~'/images/header-logo.png') }}"/>
</a>
{#</a>#}
</div>
</div>
<div class="col-lg-9">

Loading…
Cancel
Save