parent
50f5c546ec
commit
17de9b3800
@ -1,5 +1,4 @@ |
||||
debug: |
||||
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. |
||||
# See the "server:dump" command to start a new server. |
||||
#dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" |
||||
dump_destination: null |
||||
dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" |
||||
|
||||
@ -1,7 +0,0 @@ |
||||
jms_serializer: |
||||
visitors: |
||||
json_serialization: |
||||
options: |
||||
- JSON_PRETTY_PRINT |
||||
- JSON_UNESCAPED_SLASHES |
||||
- JSON_PRESERVE_ZERO_FRACTION |
||||
@ -1,5 +1,5 @@ |
||||
translation: |
||||
symfony_profiler: |
||||
enabled: true |
||||
webui: |
||||
enabled: true |
||||
#translation: |
||||
# symfony_profiler: |
||||
# enabled: true |
||||
# webui: |
||||
# enabled: true |
||||
|
||||
@ -1,6 +0,0 @@ |
||||
#jms_serializer: |
||||
# visitors: |
||||
# json: |
||||
# options: |
||||
# - JSON_UNESCAPED_SLASHES |
||||
# - JSON_PRESERVE_ZERO_FRACTION |
||||
@ -1,5 +1,4 @@ |
||||
framework: |
||||
test: ~ |
||||
# Uncomment this section if you're using sessions |
||||
#session: |
||||
# storage_id: session.storage.mock_file |
||||
test: true |
||||
session: |
||||
storage_id: session.storage.mock_file |
||||
|
||||
@ -1,5 +1,6 @@ |
||||
web_profiler: |
||||
toolbar: false |
||||
intercept_redirects: false |
||||
|
||||
framework: |
||||
profiler: {collect: false} |
||||
|
||||
@ -1,14 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\AdminBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Class ChamiloAdminBundle. |
||||
*/ |
||||
class ChamiloAdminBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,44 +0,0 @@ |
||||
{# See vendor/sonata-project/admin-bundle/Resources/views/standard_layout.html.twig#} |
||||
{% extends '@ChamiloAdmin/standard_layout.html.twig' %} |
||||
|
||||
{#{% block stylesheets %}#} |
||||
{#{{ parent() }}#} |
||||
|
||||
{#<link rel="stylesheet"#} |
||||
{#href="{{ asset('bundles/sonataformatter/markitup/skins/sonata/style.css') }}"#} |
||||
{#type="text/css" media="all"/>#} |
||||
{#<link rel="stylesheet"#} |
||||
{#href="{{ asset('bundles/sonataformatter/markitup/sets/markdown/style.css') }}"#} |
||||
{#type="text/css" media="all"/>#} |
||||
{#<link rel="stylesheet"#} |
||||
{#href="{{ asset('bundles/sonataformatter/markitup/sets/html/style.css') }}"#} |
||||
{#type="text/css" media="all"/>#} |
||||
{#<link rel="stylesheet"#} |
||||
{#href="{{ asset('bundles/sonataformatter/markitup/sets/textile/style.css') }}"#} |
||||
{#type="text/css" media="all"/>#} |
||||
{#<link rel="stylesheet"#} |
||||
{#href="{{ asset('bundles/sonatacore/vendor/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css') }}"/>#} |
||||
|
||||
{#{% endblock %}#} |
||||
|
||||
{#{% block javascripts %}#} |
||||
{#{{ parent() }}#} |
||||
|
||||
{#<script src="{{ asset('libs/ckeditor/ckeditor.js') }}"></script>#} |
||||
{#<script src="{{ asset('bundles/sonataformatter/vendor/markitup-markitup/markitup/jquery.markitup.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
{#<script src="{{ asset('bundles/sonataformatter/markitup/sets/markdown/set.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
{#<script src="{{ asset('bundles/sonataformatter/markitup/sets/html/set.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
{#<script src="{{ asset('bundles/sonataformatter/markitup/sets/textile/set.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
{#<script src="{{ asset('bundles/sonatacore/vendor/moment/min/moment.min.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
{#<script src="{{ asset('bundles/sonatacore/vendor/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js') }}"#} |
||||
{#type="text/javascript"></script>#} |
||||
|
||||
{#{% endblock %}#} |
||||
|
||||
{#{% block footer %}#} |
||||
{#{% endblock %}#} |
||||
@ -1,373 +0,0 @@ |
||||
{# |
||||
|
||||
This file is part of the Sonata package. |
||||
|
||||
(c) Thomas Rabaix <thomas.rabaix@sonata-project.org> |
||||
|
||||
For the full copyright and license information, please view the LICENSE |
||||
file that was distributed with this source code. |
||||
|
||||
#} |
||||
|
||||
{%- set _preview = block('preview') is defined ? block('preview')|trim : null %} |
||||
{% set _form = block('form') is defined ? block('form')|trim : null %} |
||||
{% set _show = block('show') is defined ? block('show')|trim : null %} |
||||
{% set _list_table = block('list_table') is defined ? block('list_table')|trim : null %} |
||||
{% set _list_filters = block('list_filters') is defined ? block('list_filters')|trim : null %} |
||||
{% set _tab_menu = block('tab_menu') is defined ? block('tab_menu')|trim : null %} |
||||
{% set _content = block('content') is defined ? block('content')|trim : null %} |
||||
{% set _title = block('title') is defined ? block('title')|trim : null %} |
||||
{% set _breadcrumb = block('breadcrumb') is defined ? block('breadcrumb')|trim : null %} |
||||
{% set _actions = block('actions') is defined ? block('actions')|trim : null %} |
||||
{% set _navbar_title = block('navbar_title') is defined ? block('navbar_title')|trim : null %} |
||||
{% set _list_filters_actions = block('list_filters_actions') is defined ? block('list_filters_actions')|trim : null -%} |
||||
|
||||
<!DOCTYPE html> |
||||
<html {% block html_attributes %}class="no-js"{% endblock %}> |
||||
<head> |
||||
{% 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'> |
||||
{% endblock %} |
||||
|
||||
<meta data-sonata-admin='{{ { |
||||
config: { |
||||
CONFIRM_EXIT: sonata_admin.adminPool.getOption('confirm_exit'), |
||||
USE_SELECT2: sonata_admin.adminPool.getOption('use_select2'), |
||||
USE_ICHECK: sonata_admin.adminPool.getOption('use_icheck'), |
||||
USE_STICKYFORMS: sonata_admin.adminPool.getOption('use_stickyforms'), |
||||
}, |
||||
translations: { |
||||
CONFIRM_EXIT: 'confirm_exit'|trans({}, 'SonataAdminBundle'), |
||||
}, |
||||
}|json_encode()|raw }}' |
||||
> |
||||
|
||||
{% block stylesheets %} |
||||
{% for stylesheet in sonata_admin.adminPool.getOption('stylesheets', []) %} |
||||
<link rel="stylesheet" href="{{ asset(stylesheet) }}"> |
||||
{% endfor %} |
||||
{% endblock %} |
||||
|
||||
{% block javascripts %} |
||||
{% block sonata_javascript_config %} |
||||
{% endblock %} |
||||
|
||||
{% block sonata_javascript_pool %} |
||||
{% for javascript in sonata_admin.adminPool.getOption('javascripts', []) %} |
||||
<script src="{{ asset(javascript) }}"></script> |
||||
{% endfor %} |
||||
{% endblock %} |
||||
|
||||
{# localize moment #} |
||||
{% set localeForMoment = canonicalize_locale_for_moment() %} |
||||
{% if localeForMoment %} |
||||
<script src="{{ asset( |
||||
'bundles/sonatacore/vendor/moment/locale/' ~ |
||||
localeForMoment ~ |
||||
'.js' |
||||
) }}"></script> |
||||
{% endif %} |
||||
|
||||
{# localize select2 #} |
||||
{% if sonata_admin.adminPool.getOption('use_select2') %} |
||||
{% set localeForSelect2 = canonicalize_locale_for_select2() %} |
||||
{% if localeForSelect2 %} |
||||
<script src="{{ asset('bundles/sonatacore/vendor/select2/select2_locale_' ~ localeForSelect2 ~ '.js') }}"></script> |
||||
{% endif %} |
||||
{% endif %} |
||||
{% endblock %} |
||||
|
||||
<title> |
||||
{% block sonata_head_title %} |
||||
{{ 'Admin'|trans({}, 'SonataAdminBundle') }} |
||||
|
||||
{% if _title is not empty %} |
||||
{{ _title|striptags|raw }} |
||||
{% else %} |
||||
{% if action is defined %} |
||||
- |
||||
{% for menu in breadcrumbs_builder.breadcrumbs(admin, action) %} |
||||
{% if not loop.first %} |
||||
{% if loop.index != 2 %} |
||||
> |
||||
{% endif %} |
||||
|
||||
{%- set translation_domain = menu.extra('translation_domain', 'messages') -%} |
||||
{%- set label = menu.label -%} |
||||
{%- if translation_domain is not same as(false) -%} |
||||
{%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} |
||||
{%- endif -%} |
||||
|
||||
{{ label }} |
||||
{% endif %} |
||||
{% endfor %} |
||||
{% endif %} |
||||
{% endif %} |
||||
{% endblock %} |
||||
</title> |
||||
</head> |
||||
<body |
||||
{% block body_attributes -%} |
||||
class="sonata-bc skin-black fixed |
||||
{% if app.request.cookies.get('sonata_sidebar_hide') -%} |
||||
sidebar-collapse |
||||
{%- endif -%}" |
||||
{%- endblock -%} |
||||
> |
||||
|
||||
<div class="wrapper"> |
||||
|
||||
{% block sonata_header %} |
||||
<header class="main-header"> |
||||
{% block sonata_header_noscript_warning %} |
||||
<noscript> |
||||
<div class="noscript-warning"> |
||||
{{ 'noscript_warning'|trans({}, 'SonataAdminBundle') }} |
||||
</div> |
||||
</noscript> |
||||
{% endblock %} |
||||
{% block logo %} |
||||
{% apply 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 }}"> |
||||
{% endif %} |
||||
{% if 'single_text' == sonata_admin.adminPool.getOption('title_mode') or 'both' == sonata_admin.adminPool.getOption('title_mode') %} |
||||
<span>{{ sonata_admin.adminPool.title }}</span> |
||||
{% endif %} |
||||
</a> |
||||
{% endapply %} |
||||
{% endblock %} |
||||
{% block sonata_nav %} |
||||
<nav class="navbar navbar-static-top" role="navigation"> |
||||
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" |
||||
role="button" title="{{ 'toggle_navigation'|trans({}, 'SonataAdminBundle') }}"> |
||||
<span class="sr-only">{{ 'toggle_navigation'|trans({}, 'SonataAdminBundle') }}</span> |
||||
</a> |
||||
|
||||
<div class="navbar-left"> |
||||
{% block sonata_breadcrumb %} |
||||
<div class="hidden-xs"> |
||||
{% if _breadcrumb is not empty or action is defined %} |
||||
<ol class="nav navbar-top-links breadcrumb"> |
||||
{% if _breadcrumb is empty %} |
||||
{% if action is defined %} |
||||
{% for menu in breadcrumbs_builder.breadcrumbs(admin, action) %} |
||||
{%- set translation_domain = menu.extra('translation_domain', 'messages') -%} |
||||
{%- set label = menu.label -%} |
||||
{%- if translation_domain is not same as(false) -%} |
||||
{%- set label = label|trans(menu.extra('translation_params', {}), translation_domain) -%} |
||||
{%- endif -%} |
||||
|
||||
{% if not loop.last %} |
||||
<li> |
||||
{% if menu.uri is not empty %} |
||||
<a href="{{ menu.uri }}"> |
||||
{% if menu.extra('safe_label', true) %} |
||||
{{- label|raw -}} |
||||
{% else %} |
||||
{{- label -}} |
||||
{% endif %} |
||||
</a> |
||||
{% else %} |
||||
<span>{{ label }}</span> |
||||
{% endif %} |
||||
</li> |
||||
{% else %} |
||||
<li class="active"><span>{{ label }}</span></li> |
||||
{% endif %} |
||||
{% endfor %} |
||||
{% endif %} |
||||
{% else %} |
||||
{{ _breadcrumb|raw }} |
||||
{% endif %} |
||||
</ol> |
||||
{% endif %} |
||||
</div> |
||||
{% endblock sonata_breadcrumb %} |
||||
</div> |
||||
|
||||
{% block sonata_top_nav_menu %} |
||||
{% if app.user and is_granted(sonata_admin.adminPool.getOption('role_admin')) %} |
||||
<div class="navbar-custom-menu"> |
||||
<ul class="nav navbar-nav"> |
||||
{% block sonata_top_nav_menu_add_block %} |
||||
<li class="dropdown"> |
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> |
||||
<i class="fa fa-plus-square fa-fw" aria-hidden="true"></i> <i class="fa fa-caret-down" aria-hidden="true"></i> |
||||
</a> |
||||
{% include get_global_template('add_block') %} |
||||
</li> |
||||
{% endblock %} |
||||
{% block sonata_top_nav_menu_user_block %} |
||||
<li class="dropdown user-menu"> |
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> |
||||
<i class="fa fa-user fa-fw" aria-hidden="true"></i> <i class="fa fa-caret-down" aria-hidden="true"></i> |
||||
</a> |
||||
<ul class="dropdown-menu dropdown-user"> |
||||
{% include get_global_template('user_block') %} |
||||
</ul> |
||||
</li> |
||||
{% endblock %} |
||||
</ul> |
||||
</div> |
||||
{% endif %} |
||||
{% endblock %} |
||||
</nav> |
||||
{% endblock sonata_nav %} |
||||
</header> |
||||
{% endblock sonata_header %} |
||||
|
||||
{% block sonata_wrapper %} |
||||
{% block sonata_left_side %} |
||||
<aside class="main-sidebar"> |
||||
<section class="sidebar"> |
||||
{% block sonata_side_nav %} |
||||
{% block sonata_sidebar_search %} |
||||
{% if sonata_admin.adminPool.getOption('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') }}"> |
||||
<span class="input-group-btn"> |
||||
<button class="btn btn-flat" type="submit"> |
||||
<i class="fa fa-search" aria-hidden="true"></i> |
||||
</button> |
||||
</span> |
||||
</div> |
||||
</form> |
||||
{% endif %} |
||||
{% endblock sonata_sidebar_search %} |
||||
|
||||
{% block side_bar_before_nav %} {% endblock %} |
||||
{% block side_bar_nav %} |
||||
{{ knp_menu_render('sonata_admin_sidebar', {template: get_global_template('knp_menu_template')}) }} |
||||
{% endblock side_bar_nav %} |
||||
{% block side_bar_after_nav %} |
||||
<p class="text-center small" style="border-top: 1px solid #444444; padding-top: 10px"> |
||||
{% block side_bar_after_nav_content %} |
||||
{% endblock %} |
||||
</p> |
||||
{% endblock %} |
||||
{% endblock sonata_side_nav %} |
||||
</section> |
||||
</aside> |
||||
{% endblock sonata_left_side %} |
||||
|
||||
<div class="content-wrapper"> |
||||
{% block sonata_page_content %} |
||||
<section class="content-header"> |
||||
|
||||
{% block sonata_page_content_header %} |
||||
{% block sonata_page_content_nav %} |
||||
{% if _navbar_title is not empty |
||||
or _tab_menu is not empty |
||||
or _actions is not empty |
||||
or _list_filters_actions is not empty |
||||
%} |
||||
<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> |
||||
</div> |
||||
{% endif %} |
||||
{% endblock %} |
||||
|
||||
<div class="navbar-collapse"> |
||||
{% if _tab_menu is not empty %} |
||||
<div class="navbar-left"> |
||||
{{ _tab_menu|raw }} |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% 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> |
||||
{% endfor %} |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% block sonata_admin_content_actions_wrappers %} |
||||
{% if _actions|replace({ '<li>': '', '</li>': '' })|trim is not empty %} |
||||
<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"> |
||||
{{ _actions|raw }} |
||||
</ul> |
||||
</li> |
||||
{% else %} |
||||
{{ _actions|raw }} |
||||
{% endif %} |
||||
</ul> |
||||
{% endif %} |
||||
{% endblock sonata_admin_content_actions_wrappers %} |
||||
|
||||
{% if _list_filters_actions is not empty %} |
||||
{{ _list_filters_actions|raw }} |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
</nav> |
||||
{% endif %} |
||||
{% endblock sonata_page_content_nav %} |
||||
{% endblock sonata_page_content_header %} |
||||
</section> |
||||
|
||||
<section class="content"> |
||||
{% block sonata_admin_content %} |
||||
|
||||
{% block notice %} |
||||
{% include '@SonataCore/FlashMessage/render.html.twig' %} |
||||
{% endblock notice %} |
||||
|
||||
{% if _preview is not empty %} |
||||
<div class="sonata-ba-preview">{{ _preview|raw }}</div> |
||||
{% endif %} |
||||
|
||||
{% if _content is not empty %} |
||||
<div class="sonata-ba-content">{{ _content|raw }}</div> |
||||
{% endif %} |
||||
|
||||
{% if _show is not empty %} |
||||
<div class="sonata-ba-show">{{ _show|raw }}</div> |
||||
{% endif %} |
||||
|
||||
{% if _form is not empty %} |
||||
<div class="sonata-ba-form">{{ _form|raw }}</div> |
||||
{% endif %} |
||||
|
||||
{% if _list_filters is not empty %} |
||||
<div class="row"> |
||||
{{ _list_filters|raw }} |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% if _list_table is not empty %} |
||||
<div class="row"> |
||||
{{ _list_table|raw }} |
||||
</div> |
||||
{% endif %} |
||||
{% endblock sonata_admin_content %} |
||||
</section> |
||||
{% endblock sonata_page_content %} |
||||
</div> |
||||
{% endblock sonata_wrapper %} |
||||
</div> |
||||
|
||||
{% if sonata_admin.adminPool.getOption('use_bootlint') %} |
||||
{% 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)})(); |
||||
</script> |
||||
{% endblock %} |
||||
{% endif %} |
||||
|
||||
</body> |
||||
</html> |
||||
@ -1,14 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ClassificationBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Class ChamiloClassificationBundle. |
||||
*/ |
||||
class ChamiloClassificationBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,40 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* This file is part of the <name> project. |
||||
* |
||||
* (c) <yourname> <youremail> |
||||
* |
||||
* For the full copyright and license information, please view the LICENSE |
||||
* file that was distributed with this source code. |
||||
*/ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Document; |
||||
|
||||
use Sonata\ClassificationBundle\Document\BaseCategory as BaseCategory; |
||||
|
||||
/** |
||||
* This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ). |
||||
* |
||||
* References : |
||||
* working with object : http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/working-with-objects.html |
||||
* |
||||
* @author <yourname> <youremail> |
||||
*/ |
||||
class Category extends BaseCategory |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,40 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* This file is part of the <name> project. |
||||
* |
||||
* (c) <yourname> <youremail> |
||||
* |
||||
* For the full copyright and license information, please view the LICENSE |
||||
* file that was distributed with this source code. |
||||
*/ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Document; |
||||
|
||||
use Sonata\ClassificationBundle\Document\BaseTag as BaseTag; |
||||
|
||||
/** |
||||
* This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ). |
||||
* |
||||
* References : |
||||
* working with object : http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/working-with-objects.html |
||||
* |
||||
* @author <yourname> <youremail> |
||||
*/ |
||||
class Tag extends BaseTag |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,26 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Entity; |
||||
|
||||
use Sonata\ClassificationBundle\Entity\BaseCategory; |
||||
|
||||
/** |
||||
* Class Category. |
||||
*/ |
||||
class Category extends BaseCategory |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
*/ |
||||
public function getId(): int |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,26 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Entity; |
||||
|
||||
use Sonata\ClassificationBundle\Entity\BaseCollection; |
||||
|
||||
/** |
||||
* Class Collection. |
||||
*/ |
||||
class Collection extends BaseCollection |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
*/ |
||||
public function getId(): int |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Entity; |
||||
|
||||
use Sonata\ClassificationBundle\Entity\BaseContext; |
||||
|
||||
/** |
||||
* Class Context. |
||||
*/ |
||||
class Context extends BaseContext |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,26 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ClassificationBundle\Entity; |
||||
|
||||
use Sonata\ClassificationBundle\Entity\BaseTag; |
||||
|
||||
/** |
||||
* Class Tag. |
||||
*/ |
||||
class Tag extends BaseTag |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
*/ |
||||
public function getId(): int |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,27 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\ClassificationBundle\Entity\Category" |
||||
table="classification__category" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
<options> |
||||
<option name="row_format">DYNAMIC</option> |
||||
</options> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,32 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\ClassificationBundle\Entity\Collection" |
||||
table="classification__collection" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
<attribute-overrides> |
||||
<attribute-override name="slug"> |
||||
<field column="slug" length="190" unique="true" type="string" /> |
||||
</attribute-override> |
||||
</attribute-overrides> |
||||
<options> |
||||
<option name="row_format">DYNAMIC</option> |
||||
</options> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,27 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( https://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\ClassificationBundle\Entity\Context" |
||||
table="classification__context" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="string" column="id"> |
||||
<generator strategy="NONE"/> |
||||
</id> |
||||
<options> |
||||
<option name="row_format">DYNAMIC</option> |
||||
</options> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,32 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\ClassificationBundle\Entity\Tag" |
||||
table="classification__tag" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
<attribute-overrides> |
||||
<attribute-override name="slug"> |
||||
<field column="slug" length="190" unique="true" type="string" /> |
||||
</attribute-override> |
||||
</attribute-overrides> |
||||
<options> |
||||
<option name="row_format">DYNAMIC</option> |
||||
</options> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Document\Category" |
||||
exclusion-policy="all" xml-root-name="_category"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Document\Tag" |
||||
exclusion-policy="all" xml-root-name="_tag"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Entity\Category" |
||||
exclusion-policy="all" xml-root-name="_category"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Entity\Collection" |
||||
exclusion-policy="all" xml-root-name="_collection"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Entity\Context" |
||||
exclusion-policy="all" xml-root-name="_context"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\ClassificationBundle\Entity\Tag" exclusion-policy="all" |
||||
xml-root-name="_tag"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,44 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Admin; |
||||
|
||||
use A2lix\TranslationFormBundle\Form\Type\TranslationsType; |
||||
use Sonata\AdminBundle\Admin\AbstractAdmin; |
||||
use Sonata\AdminBundle\Datagrid\DatagridMapper; |
||||
use Sonata\AdminBundle\Datagrid\ListMapper; |
||||
use Sonata\AdminBundle\Form\FormMapper; |
||||
|
||||
/** |
||||
* Class UserAdmin. |
||||
*/ |
||||
class CategoryAdmin extends AbstractAdmin |
||||
{ |
||||
protected function configureListFields(ListMapper $listMapper) |
||||
{ |
||||
$listMapper |
||||
//->add('headline', null, array('identifier' => true)) |
||||
//->add('name', null, array('identifier' => true)) |
||||
->add('translations', null, ['identifier' => true]) |
||||
->add('email', null, ['identifier' => true]) |
||||
; |
||||
} |
||||
|
||||
protected function configureFormFields(FormMapper $formMapper) |
||||
{ |
||||
$formMapper |
||||
//->add('name') |
||||
->add('translations', TranslationsType::class, []) |
||||
->add('email') |
||||
; |
||||
} |
||||
|
||||
protected function configureDatagridFilters(DatagridMapper $datagridMapper) |
||||
{ |
||||
$datagridMapper |
||||
->add('translations', null, ['identifier' => true]) |
||||
->add('email', null, ['identifier' => true]) |
||||
; |
||||
} |
||||
} |
||||
@ -1,14 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Class ChamiloContactBundle. |
||||
*/ |
||||
class ChamiloContactBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,88 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Controller; |
||||
|
||||
use Chamilo\ContactBundle\Entity\Category; |
||||
use Chamilo\ContactBundle\Form\Type\ContactType; |
||||
use Chamilo\UserBundle\Entity\User; |
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
use Symfony\Component\Mailer\MailerInterface; |
||||
use Symfony\Component\Mime\Email; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
|
||||
/** |
||||
* Class ContactController. |
||||
* |
||||
* @Route("/") |
||||
*/ |
||||
class ContactController extends AbstractController |
||||
{ |
||||
/** |
||||
* @Route("/", name="contact") |
||||
*/ |
||||
public function indexAction(Request $request, MailerInterface $mailer) |
||||
{ |
||||
/** @var User $user */ |
||||
$user = $this->getUser(); |
||||
$data = []; |
||||
|
||||
if ($user) { |
||||
$data = [ |
||||
'firstname' => $user->getFirstname(), |
||||
'lastname' => $user->getFirstname(), |
||||
'email' => $user->getEmail(), |
||||
]; |
||||
} |
||||
|
||||
$form = $this->createForm(ContactType::class, $data); |
||||
|
||||
if ($request->isMethod('POST')) { |
||||
$form->bind($request); |
||||
|
||||
$em = $this->getDoctrine()->getManager(); |
||||
|
||||
$category = $form->get('category')->getData(); |
||||
/** @var Category $category */ |
||||
$category = $em->getRepository('ChamiloContactBundle:Category')->find($category); |
||||
|
||||
if ($form->isValid()) { |
||||
$message = new Email(); |
||||
$message->subject($form->get('subject')->getData()) |
||||
->from($form->get('email')->getData()) |
||||
->to($category->getEmail()) |
||||
->setBody( |
||||
$this->renderView( |
||||
'@ChamiloContact/contact.html.twig', |
||||
[ |
||||
'ip' => $request->getClientIp(), |
||||
'firstname' => $form->get('firstname')->getData(), |
||||
'lastname' => $form->get('lastname')->getData(), |
||||
'subject' => $form->get('subject')->getData(), |
||||
'email' => $form->get('email')->getData(), |
||||
'message' => $form->get('message')->getData(), |
||||
] |
||||
) |
||||
); |
||||
|
||||
$mailer->send($message); |
||||
|
||||
$this->addFlash( |
||||
'success', |
||||
$this->get('translator')->trans('Your email has been sent! Thanks!') |
||||
); |
||||
|
||||
return $this->redirect($this->generateUrl('contact')); |
||||
} |
||||
} |
||||
|
||||
return $this->render( |
||||
'@ChamiloContact/index.html.twig', |
||||
[ |
||||
'form' => $form->createView(), |
||||
] |
||||
); |
||||
} |
||||
} |
||||
@ -1,24 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\DependencyInjection; |
||||
|
||||
use Symfony\Component\Config\FileLocator; |
||||
use Symfony\Component\DependencyInjection\ContainerBuilder; |
||||
use Symfony\Component\DependencyInjection\Loader; |
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension; |
||||
|
||||
/** |
||||
* 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 ChamiloContactExtension extends Extension |
||||
{ |
||||
public function load(array $configs, ContainerBuilder $container) |
||||
{ |
||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); |
||||
$loader->load('admin.yml'); |
||||
} |
||||
} |
||||
@ -1,120 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait; |
||||
|
||||
/** |
||||
* Class Category. |
||||
* |
||||
* @ORM\Entity |
||||
* @ORM\Table(name="contact_category") |
||||
*/ |
||||
class Category implements TranslatableInterface |
||||
{ |
||||
use TranslatableTrait; |
||||
|
||||
/** |
||||
* @var int |
||||
* |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue() |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="name", type="string", nullable=false) |
||||
*/ |
||||
protected $name; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="email", type="string") |
||||
*/ |
||||
protected $email; |
||||
|
||||
/** |
||||
* @param $method |
||||
* @param $arguments |
||||
*/ |
||||
public function __call($method, $arguments) |
||||
{ |
||||
return $this->proxyCurrentLocaleTranslation($method, $arguments); |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->getName(); |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getName() |
||||
{ |
||||
return $this->name; |
||||
} |
||||
|
||||
/** |
||||
* @param string $name |
||||
* |
||||
* @return Category |
||||
*/ |
||||
public function setName($name) |
||||
{ |
||||
$this->name = $name; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getEmail() |
||||
{ |
||||
return $this->email; |
||||
} |
||||
|
||||
/** |
||||
* @param string $email |
||||
* |
||||
* @return Category |
||||
*/ |
||||
public function setEmail($email) |
||||
{ |
||||
$this->email = $email; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* @param int $id |
||||
* |
||||
* @return Category |
||||
*/ |
||||
public function setId($id) |
||||
{ |
||||
$this->id = $id; |
||||
|
||||
return $this; |
||||
} |
||||
} |
||||
@ -1,70 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait; |
||||
|
||||
/** |
||||
* Class CategoryTranslation. |
||||
* |
||||
* @ORM\Entity |
||||
* @ORM\Table( |
||||
* name="contact_category_translation", |
||||
* options={"row_format":"DYNAMIC"} |
||||
* ) |
||||
*/ |
||||
class CategoryTranslation implements TranslationInterface |
||||
{ |
||||
use TranslationTrait; |
||||
|
||||
/** |
||||
* @var int |
||||
* |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue() |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string", length=255, nullable=false) |
||||
*/ |
||||
protected $name; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(type="string", length=190, nullable=false) |
||||
*/ |
||||
protected $locale; |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->name; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getName() |
||||
{ |
||||
return $this->name; |
||||
} |
||||
|
||||
/** |
||||
* @return CategoryTranslation |
||||
*/ |
||||
public function setName($name) |
||||
{ |
||||
$this->name = $name; |
||||
|
||||
return $this; |
||||
} |
||||
} |
||||
@ -1,9 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Entity; |
||||
|
||||
class Contact |
||||
{ |
||||
} |
||||
@ -1,72 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\ContactBundle\Form\Type; |
||||
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; |
||||
use Symfony\Component\Form\AbstractType; |
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; |
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType; |
||||
use Symfony\Component\Form\FormBuilderInterface; |
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface; |
||||
use Symfony\Component\Validator\Constraints\Collection; |
||||
use Symfony\Component\Validator\Constraints\Email; |
||||
use Symfony\Component\Validator\Constraints\Length; |
||||
use Symfony\Component\Validator\Constraints\NotBlank; |
||||
|
||||
/** |
||||
* Class ContactType. |
||||
*/ |
||||
class ContactType extends AbstractType |
||||
{ |
||||
public function buildForm(FormBuilderInterface $builder, array $options) |
||||
{ |
||||
$builder |
||||
->add( |
||||
'category', |
||||
EntityType::class, |
||||
['class' => 'Chamilo\ContactBundle\Entity\Category'] |
||||
) |
||||
->add('firstname') |
||||
->add('lastname') |
||||
->add('email') |
||||
->add('subject') |
||||
->add('message', TextareaType::class) |
||||
->add('send', SubmitType::class, ['attr' => ['class' => 'btn btn-primary']]) |
||||
; |
||||
} |
||||
|
||||
public function setDefaultOptions(OptionsResolverInterface $resolver) |
||||
{ |
||||
$collectionConstraint = new Collection([ |
||||
'category' => [ |
||||
new NotBlank(['message' => 'Category should not be blank.']), |
||||
], |
||||
'firstname' => [ |
||||
new NotBlank(['message' => 'Firstname should not be blank.']), |
||||
new Length(['min' => 2]), |
||||
], |
||||
'lastname' => [ |
||||
new NotBlank(['message' => 'Lastname should not be blank.']), |
||||
new Length(['min' => 2]), |
||||
], |
||||
'email' => [ |
||||
new NotBlank(['message' => 'Email should not be blank.']), |
||||
new Email(['message' => 'Invalid email address.']), |
||||
], |
||||
'subject' => [ |
||||
new NotBlank(['message' => 'Subject should not be blank.']), |
||||
new Length(['min' => 3]), |
||||
], |
||||
'message' => [ |
||||
new NotBlank(['message' => 'Message should not be blank.']), |
||||
new Length(['min' => 5]), |
||||
], |
||||
]); |
||||
|
||||
$resolver->setDefaults([ |
||||
'constraints' => $collectionConstraint, |
||||
]); |
||||
} |
||||
} |
||||
@ -1,9 +0,0 @@ |
||||
services: |
||||
sonata.admin.contact_category: |
||||
class: Chamilo\ContactBundle\Admin\CategoryAdmin |
||||
tags: |
||||
- {name: sonata.admin, manager_type: orm, group: "LMS", label: "Contact category"} |
||||
arguments: |
||||
- ~ |
||||
- Chamilo\ContactBundle\Entity\Category |
||||
- ~ |
||||
@ -1,3 +0,0 @@ |
||||
contact: |
||||
resource: "@ChamiloContactBundle/Controller/ContactController.php" |
||||
type: annotation |
||||
@ -1,26 +0,0 @@ |
||||
msgid "Category" |
||||
msgstr "Categoría" |
||||
|
||||
msgid "Firstname" |
||||
msgstr "Apellidos" |
||||
|
||||
msgid "Lastname" |
||||
msgstr "Nombre" |
||||
|
||||
msgid "Email" |
||||
msgstr "Correo electrónico" |
||||
|
||||
msgid "Subject" |
||||
msgstr "Asunto" |
||||
|
||||
msgid "Message" |
||||
msgstr "Mensaje" |
||||
|
||||
msgid "Send" |
||||
msgstr "Enviar" |
||||
|
||||
msgid "You had a new message from %url%" |
||||
msgstr "Ha recibido un nuevo mensaje de %url%" |
||||
|
||||
msgid "Your email has been sent! Thanks!" |
||||
msgstr "Su mensaje ha sido enviado! Gracias!" |
||||
@ -1,11 +0,0 @@ |
||||
{{ 'You had a new message from %url%' | trans({'%url%': url(app.request.attributes.get('_route'))} ) }} |
||||
|
||||
{{ 'Firstname' | trans }} : {{ firstname }} |
||||
{{ 'Lastname' | trans }} : {{ lastname }} |
||||
|
||||
Email: {{ email }} |
||||
IP: {{ ip }} |
||||
|
||||
{{ 'Subject' | trans }} : {{ subject }} |
||||
{{ 'Message' | trans }} : |
||||
{{ message|raw }} |
||||
@ -1,13 +0,0 @@ |
||||
{% extends "@ChamiloTheme/Layout/base-layout.html.twig" %} |
||||
|
||||
{% block chamilo_content %} |
||||
|
||||
<section id="main_content"> |
||||
<div class="page-header"> |
||||
<h2>{{ 'Contact' | trans }}</h2> |
||||
</div> |
||||
{{ form_start(form) }} |
||||
{{ form_widget(form, {'attr': {'class': ''}}) }} |
||||
{{ form_end(form) }} |
||||
</section> |
||||
{% endblock %} |
||||
@ -1,65 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Admin; |
||||
|
||||
use A2lix\TranslationFormBundle\Form\Type\TranslationsType; |
||||
use Sonata\AdminBundle\Admin\AbstractAdmin; |
||||
use Sonata\AdminBundle\Datagrid\DatagridMapper; |
||||
use Sonata\AdminBundle\Datagrid\ListMapper; |
||||
use Sonata\AdminBundle\Form\FormMapper; |
||||
|
||||
/** |
||||
* Class QuestionAdmin. |
||||
*/ |
||||
class CategoryAdmin extends AbstractAdmin |
||||
{ |
||||
protected $datagridValues = [ |
||||
'_page' => 1, |
||||
'_sort_by' => 'created_at', |
||||
'_sort_order' => 'Desc', |
||||
]; |
||||
|
||||
protected function configureDatagridFilters(DatagridMapper $datagridMapper) |
||||
{ |
||||
$datagridMapper |
||||
//->add('headline') |
||||
//->add('body') |
||||
->add('rank') |
||||
->add('isActive') |
||||
; |
||||
} |
||||
|
||||
protected function configureListFields(ListMapper $listMapper) |
||||
{ |
||||
$listMapper |
||||
//->add('headline', null, array('identifier' => true)) |
||||
->add('translations', null, ['identifier' => true]) |
||||
->add('rank') |
||||
->add( |
||||
'_action', |
||||
'actions', |
||||
[ |
||||
'actions' => [ |
||||
//'show' => array(), |
||||
'preview' => ['template' => 'ChamiloFaqBundle:Faq:preview_category_partial.html.twig'], |
||||
'edit' => [], |
||||
'delete' => [], |
||||
], |
||||
] |
||||
) |
||||
; |
||||
} |
||||
|
||||
protected function configureFormFields(FormMapper $formMapper) |
||||
{ |
||||
$formMapper |
||||
->add('translations', TranslationsType::class, []) |
||||
->add('rank', null, ['required' => false]) |
||||
// ->add('slug') |
||||
->add('isActive') |
||||
->end() |
||||
; |
||||
} |
||||
} |
||||
@ -1,71 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Admin; |
||||
|
||||
use A2lix\TranslationFormBundle\Form\Type\TranslationsType; |
||||
use Sonata\AdminBundle\Admin\AbstractAdmin; |
||||
use Sonata\AdminBundle\Datagrid\DatagridMapper; |
||||
use Sonata\AdminBundle\Datagrid\ListMapper; |
||||
use Sonata\AdminBundle\Form\FormMapper; |
||||
|
||||
/** |
||||
* Class QuestionAdmin. |
||||
*/ |
||||
class QuestionAdmin extends AbstractAdmin |
||||
{ |
||||
protected $datagridValues = [ |
||||
'_page' => 1, |
||||
'_sort_by' => 'issueDate', |
||||
'_sort_order' => 'Desc', |
||||
]; |
||||
|
||||
protected function configureDatagridFilters(DatagridMapper $datagridMapper) |
||||
{ |
||||
$datagridMapper |
||||
->add('id') |
||||
->add('isActive') |
||||
; |
||||
} |
||||
|
||||
protected function configureListFields(ListMapper $listMapper) |
||||
{ |
||||
$listMapper |
||||
->addIdentifier('id') |
||||
->add('translations', null, ['identifier' => true]) |
||||
->add('Category') |
||||
->add('rank') |
||||
->add( |
||||
'_action', |
||||
'actions', |
||||
[ |
||||
'actions' => [ |
||||
//'show' => array(), |
||||
'preview' => ['template' => 'ChamiloFaqBundle:Faq:preview_question_partial.html.twig'], |
||||
'edit' => [], |
||||
'delete' => [], |
||||
], |
||||
] |
||||
); |
||||
} |
||||
|
||||
protected function configureFormFields(FormMapper $formMapper) |
||||
{ |
||||
$formMapper |
||||
->add('translations', TranslationsType::class, []) |
||||
->add( |
||||
'category', |
||||
null, |
||||
[ |
||||
'expanded' => true, |
||||
'required' => true, |
||||
'attr' => ['class' => 'radio-list vertical'], |
||||
] |
||||
) |
||||
->add('rank', null, ['required' => false]) |
||||
->add('onlyAuthUsers') |
||||
->add('isActive') |
||||
->end(); |
||||
} |
||||
} |
||||
@ -1,16 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Class ChamiloFaqBundle. |
||||
* |
||||
* Based in GenjFaqBundle |
||||
*/ |
||||
class ChamiloFaqBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,188 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Controller; |
||||
|
||||
use Chamilo\FaqBundle\Entity\Category; |
||||
use Chamilo\FaqBundle\Entity\CategoryRepository; |
||||
use Chamilo\FaqBundle\Entity\Question; |
||||
use Chamilo\FaqBundle\Entity\QuestionRepository; |
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
|
||||
/** |
||||
* Class FaqController. |
||||
*/ |
||||
class FaqController extends AbstractController |
||||
{ |
||||
/** |
||||
* 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 = []; |
||||
$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', |
||||
[ |
||||
'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', |
||||
[ |
||||
'categories' => $categories, |
||||
'categorySlug' => $categorySlug, |
||||
] |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Open first category or question if none was selected so far. |
||||
* |
||||
* @param string $categorySlug |
||||
* @param string $questionSlug |
||||
* |
||||
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException |
||||
* |
||||
* @return \Symfony\Component\HttpFoundation\RedirectResponse |
||||
*/ |
||||
protected function generateRedirectToDefaultSelection($categorySlug, $questionSlug) |
||||
{ |
||||
$doRedirect = false; |
||||
//$config = $this->container->getParameter('faq'); |
||||
$config = []; |
||||
$config['select_first_category_by_default'] = false; |
||||
$config['select_first_question_by_default'] = false; |
||||
|
||||
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', ['categorySlug' => $categorySlug, 'questionSlug' => $questionSlug], true) |
||||
); |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* @param string $questionSlug |
||||
* |
||||
* @return Question |
||||
*/ |
||||
protected function getSelectedQuestion($questionSlug = null) |
||||
{ |
||||
$selectedQuestion = null; |
||||
|
||||
if (null !== $questionSlug) { |
||||
$selectedQuestion = $this->getQuestionRepository()->getQuestionBySlug($questionSlug); |
||||
} |
||||
|
||||
return $selectedQuestion; |
||||
} |
||||
|
||||
/** |
||||
* @param string $categorySlug |
||||
* |
||||
* @return Category |
||||
*/ |
||||
protected function getSelectedCategory($categorySlug = null) |
||||
{ |
||||
$selectedCategory = null; |
||||
|
||||
if (null !== $categorySlug) { |
||||
$selectedCategory = $this->getCategoryRepository()->getCategoryActiveBySlug($categorySlug); |
||||
} |
||||
|
||||
return $selectedCategory; |
||||
} |
||||
|
||||
/** |
||||
* @return QuestionRepository |
||||
*/ |
||||
protected function getQuestionRepository() |
||||
{ |
||||
return $this->container->get('faq.entity.question_repository'); |
||||
} |
||||
|
||||
/** |
||||
* @return CategoryRepository |
||||
*/ |
||||
protected function getCategoryRepository() |
||||
{ |
||||
return $this->container->get('faq.entity.category_repository'); |
||||
} |
||||
} |
||||
@ -1,25 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\DependencyInjection; |
||||
|
||||
use Symfony\Component\Config\FileLocator; |
||||
use Symfony\Component\DependencyInjection\ContainerBuilder; |
||||
use Symfony\Component\DependencyInjection\Loader; |
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension; |
||||
|
||||
/** |
||||
* 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 |
||||
{ |
||||
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'); |
||||
} |
||||
} |
||||
@ -1,179 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
use Gedmo\Timestampable\Traits\TimestampableEntity; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait; |
||||
|
||||
/** |
||||
* Class Category. |
||||
* |
||||
* @ORM\Entity(repositoryClass="Chamilo\FaqBundle\Repository\CategoryRepository") |
||||
* @ORM\Table( |
||||
* name="faq_category", |
||||
* indexes={@ORM\Index(name="is_active_idx", columns={"is_active"})} |
||||
* ) |
||||
*/ |
||||
class Category implements TranslatableInterface |
||||
{ |
||||
use TimestampableEntity; |
||||
use TranslatableTrait; |
||||
|
||||
/** |
||||
* @ORM\Column(type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue(strategy="AUTO") |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\OneToMany(targetEntity="Question", mappedBy="category") |
||||
*/ |
||||
protected $questions; |
||||
|
||||
/** |
||||
* @Gedmo\SortablePosition |
||||
* |
||||
* @ORM\Column(name="`rank`", type="integer") |
||||
*/ |
||||
protected $rank; |
||||
|
||||
/** |
||||
* @ORM\Column(name="is_active", type="boolean") |
||||
*/ |
||||
protected $isActive; |
||||
|
||||
/** |
||||
* @param $method |
||||
* @param $arguments |
||||
*/ |
||||
public function __call($method, $arguments) |
||||
{ |
||||
return $this->proxyCurrentLocaleTranslation($method, $arguments); |
||||
} |
||||
|
||||
/** |
||||
* Returns a string representation of this object. |
||||
* |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->getHeadline(); |
||||
} |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* 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 bool $isActive |
||||
* |
||||
* @return Category |
||||
*/ |
||||
public function setIsActive($isActive) |
||||
{ |
||||
$this->isActive = $isActive; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* Get isActive. |
||||
* |
||||
* @return bool |
||||
*/ |
||||
public function getIsActive() |
||||
{ |
||||
return $this->isActive; |
||||
} |
||||
|
||||
/** |
||||
* Add question. |
||||
* |
||||
* @return Category |
||||
*/ |
||||
public function addQuestion(Question $question) |
||||
{ |
||||
$this->questions[] = $question; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* Remove question. |
||||
*/ |
||||
public function removeQuestion(Question $question) |
||||
{ |
||||
$this->questions->removeElement($question); |
||||
} |
||||
|
||||
/** |
||||
* Get questions. |
||||
* |
||||
* @return \Doctrine\Common\Collections\Collection |
||||
*/ |
||||
public function getQuestions() |
||||
{ |
||||
return $this->questions; |
||||
} |
||||
|
||||
/** |
||||
* 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 [ |
||||
'categorySlug' => $this->getSlug(), |
||||
]; |
||||
} |
||||
} |
||||
@ -1,117 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait; |
||||
|
||||
/** |
||||
* Class CategoryTranslation. |
||||
* |
||||
* @ORM\Entity |
||||
* @ORM\Table( |
||||
* name="faq_category_translation", |
||||
* options={"row_format":"DYNAMIC"} |
||||
* ) |
||||
* @ORM\AttributeOverrides({ |
||||
* @ORM\AttributeOverride(name="locale", |
||||
* column=@ORM\Column( |
||||
* name="locale", |
||||
* type="string", |
||||
* length=190 |
||||
* ) |
||||
* ) |
||||
* }) |
||||
*/ |
||||
class CategoryTranslation implements TranslationInterface |
||||
{ |
||||
use TranslationTrait; |
||||
|
||||
/** |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue(strategy="AUTO") |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string", length=255, nullable=false) |
||||
*/ |
||||
protected $headline; |
||||
|
||||
/** |
||||
* @ORM\Column(type="text", nullable=true) |
||||
*/ |
||||
protected $body; |
||||
|
||||
/** |
||||
* @Gedmo\Slug(fields={"headline"}, updatable=false) |
||||
* |
||||
* @ORM\Column(type="string", length=50, nullable=false) |
||||
*/ |
||||
protected $slug; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(type="string", length=190, nullable=false) |
||||
*/ |
||||
protected $locale; |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->headline; |
||||
} |
||||
|
||||
public function getHeadline() |
||||
{ |
||||
return $this->headline; |
||||
} |
||||
|
||||
/** |
||||
* @return CategoryTranslation |
||||
*/ |
||||
public function setHeadline($headline) |
||||
{ |
||||
$this->headline = $headline; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getBody() |
||||
{ |
||||
return $this->body; |
||||
} |
||||
|
||||
/** |
||||
* @return CategoryTranslation |
||||
*/ |
||||
public function setBody($body) |
||||
{ |
||||
$this->body = $body; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
public function getSlug() |
||||
{ |
||||
return $this->slug; |
||||
} |
||||
|
||||
/** |
||||
* @return CategoryTranslation |
||||
*/ |
||||
public function setSlug($slug) |
||||
{ |
||||
$this->slug = $slug; |
||||
|
||||
return $this; |
||||
} |
||||
} |
||||
@ -1,209 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
use Gedmo\Timestampable\Traits\TimestampableEntity; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait; |
||||
|
||||
/** |
||||
* Class Question. |
||||
* |
||||
* @ORM\Entity(repositoryClass="Chamilo\FaqBundle\Repository\QuestionRepository") |
||||
* @ORM\Table(name="faq_question") |
||||
*/ |
||||
class Question implements TranslatableInterface |
||||
{ |
||||
use TranslatableTrait; |
||||
use TimestampableEntity; |
||||
|
||||
/** |
||||
* @ORM\Column(type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue(strategy="AUTO") |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\ManyToOne(targetEntity="Category", inversedBy="questions") |
||||
* @ORM\OrderBy({"rank" = "asc"}) |
||||
*/ |
||||
protected $category; |
||||
|
||||
/** |
||||
* @Gedmo\SortablePosition |
||||
* |
||||
* @ORM\Column(name="`rank`", type="integer") |
||||
*/ |
||||
protected $rank; |
||||
|
||||
/** |
||||
* @var bool |
||||
* |
||||
* @ORM\Column(name="only_auth_users", type="boolean", nullable=false) |
||||
*/ |
||||
protected $onlyAuthUsers; |
||||
|
||||
/** |
||||
* @ORM\Column(name="is_active", type="boolean") |
||||
*/ |
||||
protected $isActive; |
||||
|
||||
/** |
||||
* @param $method |
||||
* @param $arguments |
||||
*/ |
||||
public function __call($method, $arguments) |
||||
{ |
||||
return $this->proxyCurrentLocaleTranslation($method, $arguments); |
||||
} |
||||
|
||||
/** |
||||
* Returns a string representation of this object. |
||||
* |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->getHeadline(); |
||||
} |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* 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 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 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 [ |
||||
'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 bool |
||||
*/ |
||||
public function isOnlyAuthUsers() |
||||
{ |
||||
return $this->onlyAuthUsers; |
||||
} |
||||
|
||||
/** |
||||
* @param bool $onlyAuthUsers |
||||
* |
||||
* @return Question |
||||
*/ |
||||
public function setOnlyAuthUsers($onlyAuthUsers) |
||||
{ |
||||
$this->onlyAuthUsers = $onlyAuthUsers; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* Set is_active. |
||||
* |
||||
* @param bool $isActive |
||||
* |
||||
* @return Question |
||||
*/ |
||||
public function setIsActive($isActive) |
||||
{ |
||||
$this->isActive = $isActive; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* Get isActive. |
||||
* |
||||
* @return bool |
||||
*/ |
||||
public function getIsActive() |
||||
{ |
||||
return $this->isActive; |
||||
} |
||||
} |
||||
@ -1,131 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Entity; |
||||
|
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface; |
||||
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait; |
||||
|
||||
/** |
||||
* Class CategoryTranslation. |
||||
* |
||||
* @ORM\Entity |
||||
* @ORM\Table( |
||||
* name="faq_question_translation", |
||||
* options={"row_format":"DYNAMIC"} |
||||
* ) |
||||
* |
||||
* @ORM\AttributeOverrides({ |
||||
* @ORM\AttributeOverride(name="locale", |
||||
* column=@ORM\Column( |
||||
* name="locale", |
||||
* type="string", |
||||
* length=190 |
||||
* ) |
||||
* ) |
||||
* }) |
||||
*/ |
||||
class QuestionTranslation implements TranslationInterface |
||||
{ |
||||
use TranslationTrait; |
||||
|
||||
/** |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue(strategy="AUTO") |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string", length=255, nullable=false) |
||||
*/ |
||||
protected $headline; |
||||
|
||||
/** |
||||
* @ORM\Column(type="text", nullable=true) |
||||
*/ |
||||
protected $body; |
||||
|
||||
/** |
||||
* @Gedmo\Slug(fields={"headline"}, updatable=false) |
||||
* @ORM\Column(type="string", length=50, nullable=false) |
||||
*/ |
||||
protected $slug; |
||||
|
||||
/** |
||||
* @var string |
||||
* @ORM\Column(type="string", length=190, nullable=false) |
||||
*/ |
||||
protected $locale; |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function __toString() |
||||
{ |
||||
return (string) $this->headline; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getHeadline() |
||||
{ |
||||
return $this->headline; |
||||
} |
||||
|
||||
/** |
||||
* @param string $headline |
||||
* |
||||
* @return QuestionTranslation |
||||
*/ |
||||
public function setHeadline($headline) |
||||
{ |
||||
$this->headline = $headline; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getBody() |
||||
{ |
||||
return $this->body; |
||||
} |
||||
|
||||
/** |
||||
* @param string $body |
||||
* |
||||
* @return QuestionTranslation |
||||
*/ |
||||
public function setBody($body) |
||||
{ |
||||
$this->body = $body; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getSlug() |
||||
{ |
||||
return $this->slug; |
||||
} |
||||
|
||||
/** |
||||
* @param string $slug |
||||
* |
||||
* @return QuestionTranslation |
||||
*/ |
||||
public function setSlug($slug) |
||||
{ |
||||
$this->slug = $slug; |
||||
|
||||
return $this; |
||||
} |
||||
} |
||||
@ -1,76 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Repository; |
||||
|
||||
use Chamilo\FaqBundle\Entity\Category; |
||||
use Doctrine\ORM\EntityRepository; |
||||
|
||||
/** |
||||
* Class CategoryRepository. |
||||
*/ |
||||
class CategoryRepository extends EntityRepository |
||||
{ |
||||
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 |
||||
*/ |
||||
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(); |
||||
} |
||||
|
||||
/** |
||||
* @param string $slug |
||||
*/ |
||||
public function getCategoryActiveBySlug($slug) |
||||
{ |
||||
$query = $this->createQueryBuilder('c') |
||||
->join('c.translations', 't') |
||||
->where('c.isActive = :isActive') |
||||
->andWhere('t.slug = :slug') |
||||
->getQuery(); |
||||
|
||||
$query->setParameter('isActive', true); |
||||
$query->setParameter('slug', $slug); |
||||
|
||||
return $query->getOneOrNullResult(); |
||||
} |
||||
|
||||
/** |
||||
* @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(); |
||||
} |
||||
} |
||||
@ -1,53 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\FaqBundle\Repository; |
||||
|
||||
use Chamilo\FaqBundle\Entity\Question; |
||||
use Doctrine\ORM\EntityRepository; |
||||
|
||||
/** |
||||
* Class QuestionRepository. |
||||
*/ |
||||
class QuestionRepository extends EntityRepository |
||||
{ |
||||
/** |
||||
* @param string $categorySlug |
||||
* |
||||
* @return Question|null |
||||
*/ |
||||
public function retrieveFirstByCategorySlug($categorySlug) |
||||
{ |
||||
$query = $this->createQueryBuilder('q') |
||||
->join('q.category', 'c') |
||||
->join('c.translations', 't') |
||||
->where('t.slug = :categorySlug') |
||||
->orderBy('q.rank', 'ASC') |
||||
->setMaxResults(1) |
||||
->getQuery(); |
||||
|
||||
$query->setParameter('categorySlug', $categorySlug); |
||||
|
||||
return $query->getOneOrNullResult(); |
||||
} |
||||
|
||||
/** |
||||
* @param string $slug |
||||
* |
||||
* @return Question|null |
||||
*/ |
||||
public function getQuestionBySlug($slug) |
||||
{ |
||||
$query = $this->createQueryBuilder('q') |
||||
->join('q.translations', 't') |
||||
->where('t.slug = :slug') |
||||
->orderBy('q.rank', 'ASC') |
||||
->setMaxResults(1) |
||||
->getQuery(); |
||||
|
||||
$query->setParameter('slug', $slug); |
||||
|
||||
return $query->getOneOrNullResult(); |
||||
} |
||||
} |
||||
@ -1,18 +0,0 @@ |
||||
services: |
||||
sonata.admin.faq_question: |
||||
class: Chamilo\FaqBundle\Admin\QuestionAdmin |
||||
tags: |
||||
- {name: sonata.admin, manager_type: orm, group: "Content", label: "Question"} |
||||
arguments: |
||||
- ~ |
||||
- Chamilo\FaqBundle\Entity\Question |
||||
- ~ |
||||
|
||||
sonata.admin.faq_category: |
||||
class: Chamilo\FaqBundle\Admin\CategoryAdmin |
||||
tags: |
||||
- {name: sonata.admin, manager_type: orm, group: "Content", label: "Category"} |
||||
arguments: |
||||
- ~ |
||||
- Chamilo\FaqBundle\Entity\Category |
||||
- ~ |
||||
@ -1,12 +0,0 @@ |
||||
faq_index: |
||||
path: /faq |
||||
defaults: {_controller: 'Chamilo\FaqBundle\Controller\FaqController::indexAction', categorySlug: null, questionSlug: null} |
||||
|
||||
faq: |
||||
path: /faq/{categorySlug}/{questionSlug} |
||||
defaults: {_controller: 'Chamilo\FaqBundle\Controller\FaqController::indexAction', 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: |
||||
path: /faq-without-collapse/{categorySlug} |
||||
defaults: {_controller: 'Chamilo\FaqBundle\Controller\FaqController::indexWithoutCollapseAction', categorySlug: null} |
||||
@ -1,3 +0,0 @@ |
||||
services: |
||||
_defaults: |
||||
autowire: true |
||||
@ -1,80 +0,0 @@ |
||||
{% extends '@ChamiloTheme/Layout/layout_cms.html.twig' %} |
||||
|
||||
{% block sonata_page_container %} |
||||
<script> |
||||
function backToTopGo() { |
||||
window.scroll(0, 0); |
||||
backToTopScroll(); |
||||
} |
||||
|
||||
$(function () { |
||||
var positionCurrent, positionNew = 0; |
||||
$(window).scroll(function () { |
||||
positionNew = $(this).scrollTop(); |
||||
if (positionNew > positionCurrent) { |
||||
$('#barra').show('slow'); |
||||
} else if (positionNew < positionCurrent) { |
||||
$('#barra').hide('slow'); |
||||
} |
||||
positionCurrent = positionNew; |
||||
}); |
||||
}); |
||||
</script> |
||||
|
||||
<a id="barra" class="btn btn-primary back_to_top_wrap" onclick="backToTopGo()"> |
||||
<div class="back_to_top"> |
||||
<i class="fa fa-arrow-up" aria-hidden="true"></i> Go up |
||||
</div> |
||||
</a> |
||||
|
||||
<div class="page-faq"> |
||||
<h1 class="title">FAQ</h1> |
||||
<div class="list-faq"> |
||||
<ul> |
||||
{% for category in categories %} |
||||
<li class="active"> |
||||
<h3 class="list-title">{{ category.getHeadline|e }}</h3> |
||||
</li> |
||||
<ul class="list-items-faq"> |
||||
{% set list = [false] %} |
||||
{% if is_granted('IS_AUTHENTICATED_FULLY') %} |
||||
{% set list = [false, true] %} |
||||
{% endif %} |
||||
|
||||
{% for question in category.questions if question.onlyAuthUsers in list %} |
||||
{% if question.isActive %} |
||||
<li> |
||||
<a href="#{{ question.id }}"><i class="fa fa-file-text-o" aria-hidden="true"></i> |
||||
{{ question.getHeadline|e }} |
||||
</a> |
||||
</li> |
||||
{% endif %} |
||||
{% endfor %} |
||||
</ul> |
||||
{% endfor %} |
||||
</ul> |
||||
</div> |
||||
<div class="block-faq"> |
||||
{% for category in categories %} |
||||
{% set list = [false] %} |
||||
{% if is_granted('IS_AUTHENTICATED_FULLY') %} |
||||
{% set list = [false, true] %} |
||||
<h2 class="title"><i class="fa fa-question-circle" aria-hidden="true"></i> {{ category.getHeadline|e }}</h2> |
||||
{% endif %} |
||||
|
||||
{% for question in category.questions if question.onlyAuthUsers in list %} |
||||
{% if question.isActive %} |
||||
<div class="panel panel-default"> |
||||
<div class="panel-heading"> |
||||
{{ question.getHeadline|e }} <a name="{{ question.id }}" id="{{ question.id }}"></a> |
||||
</div> |
||||
<div class="panel-body"> |
||||
<p>{{ question.getBody }}</p> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
{% endfor %} |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
||||
@ -1,10 +0,0 @@ |
||||
<h1>FAQ</h1> |
||||
|
||||
{% for category in categories %} |
||||
<h2>{{ category.headline|e }}</h2> |
||||
{% for question in category.questions %} |
||||
{{ question.isAuth |var_dump }} |
||||
<p><strong>{{ question.headline|e }}</strong></p> |
||||
<p>{{ question.body }}</p> |
||||
{% endfor %} |
||||
{% endfor %} |
||||
@ -1,9 +0,0 @@ |
||||
<a target = "_blank" |
||||
href="{{ url('faq', {'categorySlug': object.getSlug}) }}" |
||||
class="btn btn-sm btn-default" |
||||
title="{{ 'Preview'|trans({}, 'SonataAdminBundle') }}" |
||||
> |
||||
<i class="fa fa-external-link"></i> |
||||
{{ 'Preview'|trans({}, 'SonataAdminBundle') }} |
||||
</a> |
||||
|
||||
@ -1,11 +0,0 @@ |
||||
{% if object.category %} |
||||
<a target = "_blank" |
||||
href="{{ url('faq', {'categorySlug': object.category.getSlug, 'questionSlug' : object.getSlug }) }}" |
||||
class="btn btn-sm btn-default" |
||||
title="{{ 'Preview'|trans({}, 'SonataAdminBundle') }}" |
||||
> |
||||
<i class="fa fa-external-link"></i> |
||||
{{ 'Preview'|trans({}, 'SonataAdminBundle') }} |
||||
</a> |
||||
{% endif %} |
||||
|
||||
@ -1,19 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\MediaBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ). |
||||
* |
||||
* References : |
||||
* bundles : http://symfony.com/doc/current/book/bundles.html |
||||
* |
||||
* @author <yourname> <youremail> |
||||
*/ |
||||
class ChamiloMediaBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,35 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\MediaBundle\Entity; |
||||
|
||||
use Sonata\MediaBundle\Entity\BaseGallery; |
||||
use Sonata\MediaBundle\Model\GalleryHasMediaInterface; |
||||
|
||||
/** |
||||
* Class Gallery. |
||||
*/ |
||||
class Gallery extends BaseGallery |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
*/ |
||||
public function getId(): int |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
public function addGalleryHasMedia(GalleryHasMediaInterface $galleryHasMedia) |
||||
{ |
||||
} |
||||
|
||||
public function removeGalleryHasMedia(GalleryHasMediaInterface $galleryHasMedia) |
||||
{ |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\MediaBundle\Entity; |
||||
|
||||
use Sonata\MediaBundle\Entity\BaseGalleryHasMedia as BaseGalleryHasMedia; |
||||
|
||||
/** |
||||
* Class GalleryHasMedia. |
||||
*/ |
||||
class GalleryHasMedia extends BaseGalleryHasMedia |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,30 +0,0 @@ |
||||
<?php |
||||
|
||||
///* For licensing terms, see /license.txt */ |
||||
// |
||||
//namespace Chamilo\MediaBundle\Entity; |
||||
// |
||||
//use Sonata\MediaBundle\Entity\BaseGalleryItem; |
||||
// |
||||
///** |
||||
// * Class GalleryItem. |
||||
// * |
||||
// * @package Chamilo\MediaBundle\Entity |
||||
// */ |
||||
//class GalleryItem extends BaseGalleryItem |
||||
//{ |
||||
// /** |
||||
// * @var int |
||||
// */ |
||||
// protected $id; |
||||
// |
||||
// /** |
||||
// * Get id. |
||||
// * |
||||
// * @return int $id |
||||
// */ |
||||
// public function getId() |
||||
// { |
||||
// return $this->id; |
||||
// } |
||||
//} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\MediaBundle\Entity; |
||||
|
||||
use Sonata\MediaBundle\Entity\BaseMedia; |
||||
|
||||
/** |
||||
* Class Media. |
||||
*/ |
||||
class Media extends BaseMedia |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\MediaBundle\Entity\Gallery" |
||||
table="media__gallery" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\MediaBundle\Entity\GalleryHasMedia" |
||||
table="media__gallery_media" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\MediaBundle\Entity\Media" |
||||
table="media__media" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\MediaBundle\Entity\Gallery" exclusion-policy="all" |
||||
xml-root-name="_gallery"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,17 +0,0 @@ |
||||
<!--<?xml version="1.0" encoding="UTF-8"?>--> |
||||
<!--<serializer>--> |
||||
<!--<!–--> |
||||
<!--This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends )--> |
||||
|
||||
<!--@author <yourname> <youremail>--> |
||||
<!--–>--> |
||||
|
||||
<!--<class name="Chamilo\MediaBundle\Entity\GalleryItem"--> |
||||
<!--exclusion-policy="all" xml-root-name="_gallery_has_media">--> |
||||
|
||||
<!--<property xml-attribute-map="true" name="id" type="integer"--> |
||||
<!--expose="true" since-version="1.0"--> |
||||
<!--groups="sonata_api_read,sonata_api_write,sonata_search"/>--> |
||||
|
||||
<!--</class>--> |
||||
<!--</serializer>--> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\MediaBundle\Entity\Media" exclusion-policy="all" |
||||
xml-root-name="_media"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,62 +0,0 @@ |
||||
{% extends '@SonataBlock/Block/block_base.html.twig' %} |
||||
|
||||
{% block block %} |
||||
{% if settings.format %} |
||||
<div class="{{ settings.class }}"> |
||||
{% if settings.title %} |
||||
<h3> |
||||
{% if settings.icon %} |
||||
<i class="{{ settings.icon }}" aria-hidden="true"></i> |
||||
{% endif %} |
||||
{% if settings.translation_domain %} |
||||
{{ settings.title|trans({}, settings.translation_domain) }} |
||||
{% else %} |
||||
{{ settings.title }} |
||||
{% endif %} |
||||
</h3> |
||||
{% endif %} |
||||
|
||||
<div id="carousel-{{ block.id }}" class="carousel slide" |
||||
data-interval="{{ settings.pauseTime }}" |
||||
{% if settings.startPaused != 1 %}data-ride="carousel"{% endif %} |
||||
> |
||||
|
||||
<!-- Indicators --> |
||||
<ol class="carousel-indicators"> |
||||
{% for element in elements %} |
||||
{{ block('element_indicator') }} |
||||
{% endfor %} |
||||
</ol> |
||||
|
||||
<!-- Wrapper for slides --> |
||||
<div class="carousel-inner"> |
||||
{% for element in elements %} |
||||
{{ block('element_display') }} |
||||
{% endfor %} |
||||
</div> |
||||
|
||||
<!-- Controls --> |
||||
<a class="left carousel-control" href="#carousel-{{ block.id }}" data-slide="prev"> |
||||
<span class="glyphicon glyphicon-chevron-left"></span> |
||||
</a> |
||||
<a class="right carousel-control" href="#carousel-{{ block.id }}" data-slide="next"> |
||||
<span class="glyphicon glyphicon-chevron-right"></span> |
||||
</a> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
{% endblock %} |
||||
|
||||
{% block element_indicator %} |
||||
<li data-target="#carousel-{{ block.id }}" data-slide-to="{{ loop.index0 }}"{% if loop.first %} class="active"{% endif %}></li> |
||||
{% endblock element_indicator %} |
||||
|
||||
{% block element_display %} |
||||
<div class="item{% if loop.first %} active{% endif %}"> |
||||
{% media element.media, settings.format %} |
||||
<div class="carousel-caption"> |
||||
<h4>{{ element.title }}</h4> |
||||
<p>{{ element.caption }}</p> |
||||
</div> |
||||
</div> |
||||
{% endblock element_display %} |
||||
@ -1,14 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\NotificationBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Bundle needed for sonata pages (CMS). |
||||
*/ |
||||
class ChamiloNotificationBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\NotificationBundle\Entity; |
||||
|
||||
use Sonata\NotificationBundle\Entity\BaseMessage; |
||||
|
||||
/** |
||||
* Class Message. |
||||
*/ |
||||
class Message extends BaseMessage |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\NotificationBundle\Entity\Message" |
||||
table="notification__message" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,17 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/bundles/easy-extends ) |
||||
|
||||
@author <yourname> <youremail> |
||||
--> |
||||
|
||||
<class name="Chamilo\NotificationBundle\Entity\Message" |
||||
exclusion-policy="all" xml-root-name="_message"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,14 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
|
||||
/** |
||||
* Class ChamiloPageBundle. |
||||
*/ |
||||
class ChamiloPageBundle extends Bundle |
||||
{ |
||||
} |
||||
@ -1,352 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle\Controller; |
||||
|
||||
use Chamilo\CoreBundle\Controller\BaseController; |
||||
use Chamilo\CoreBundle\Traits\ControllerTrait; |
||||
use Chamilo\PageBundle\Entity\Block; |
||||
use Chamilo\PageBundle\Entity\Page; |
||||
use Chamilo\PageBundle\Entity\Snapshot; |
||||
use FOS\CKEditorBundle\Form\Type\CKEditorType; |
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; |
||||
use Sonata\PageBundle\Entity\BlockInteractor; |
||||
use Sonata\PageBundle\Entity\BlockManager; |
||||
use Sonata\PageBundle\Entity\PageManager; |
||||
use Sonata\PageBundle\Entity\SiteManager; |
||||
use Sonata\PageBundle\Page\TemplateManager; |
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
|
||||
/** |
||||
* Class PageController. |
||||
*/ |
||||
class PageController extends BaseController |
||||
{ |
||||
use ControllerTrait; |
||||
|
||||
/** |
||||
* @Route("/cms/page/latest/{number}") |
||||
* |
||||
* @param int $number |
||||
*/ |
||||
public function getLatestPages($number, PageManager $pageManager): Response |
||||
{ |
||||
$site = $this->get('sonata.page.site.selector')->retrieve(); |
||||
|
||||
$criteria = ['enabled' => 1, 'site' => $site, 'decorate' => 1, 'routeName' => 'page_slug']; |
||||
$order = ['createdAt' => 'desc']; |
||||
// Get latest pages |
||||
$pages = $pageManager->findBy($criteria, $order, $number); |
||||
$pagesToShow = []; |
||||
/** @var Page $page */ |
||||
foreach ($pages as $page) { |
||||
// Skip homepage |
||||
if ('/' === $page->getUrl()) { |
||||
continue; |
||||
} |
||||
$criteria = ['pageId' => $page]; |
||||
/** @var Snapshot $snapshot */ |
||||
// Check if page has a valid snapshot |
||||
$snapshot = $this->get('sonata.page.manager.snapshot')->findEnableSnapshot($criteria); |
||||
if ($snapshot) { |
||||
$pagesToShow[] = $page; |
||||
} |
||||
} |
||||
|
||||
return $this->render( |
||||
'@ChamiloPage/latest.html.twig', |
||||
['pages' => $pagesToShow] |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Creates a site if needed checking the host and locale. |
||||
* Creates a first root page. |
||||
* Creates a page if it doesn't exists. |
||||
* Updates the page if page exists. |
||||
* |
||||
* @param string $pageSlug |
||||
* @param bool $redirect |
||||
* |
||||
* @throws \Exception |
||||
* |
||||
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response |
||||
*/ |
||||
public function createPage( |
||||
$pageSlug, |
||||
$redirect, |
||||
Request $request, |
||||
SiteManager $siteManager, |
||||
PageManager $pageManager, |
||||
TemplateManager $templateManager, |
||||
BlockInteractor $blockInteractor, |
||||
BlockManager $blockManager |
||||
) { |
||||
$host = $request->getHost(); |
||||
$locale = $request->get('_locale'); |
||||
$criteria = [ |
||||
'locale' => $locale, |
||||
'host' => $host, |
||||
]; |
||||
|
||||
$site = $siteManager->findOneBy($criteria); |
||||
// If site doesn't exists or the site has a different locale from request, create new one. |
||||
if (!$site || ($site && ($locale !== $site->getLocale()))) { |
||||
// Create new site for this host and language |
||||
$site = $siteManager->create(); |
||||
$site->setHost($host); |
||||
$site->setEnabled(true); |
||||
$site->setName($host.' in language '.$locale); |
||||
$site->setEnabledFrom(new \DateTime('now')); |
||||
$site->setEnabledTo(new \DateTime('+20 years')); |
||||
$site->setRelativePath(''); |
||||
$site->setIsDefault(false); |
||||
$site->setLocale($locale); |
||||
$site = $siteManager->save($site); |
||||
|
||||
// Create first root page |
||||
/** @var \Sonata\PageBundle\Model\Page $page */ |
||||
$page = $pageManager->create(); |
||||
$page->setSlug('homepage'); |
||||
$page->setUrl('/'); |
||||
$page->setName('homepage'); |
||||
$page->setTitle('home'); |
||||
$page->setEnabled(true); |
||||
$page->setDecorate(1); |
||||
$page->setRequestMethod('GET|POST|HEAD|DELETE|PUT'); |
||||
$page->setTemplateCode('default'); |
||||
$page->setRouteName('homepage'); |
||||
//$page->setParent($this->getReference('page-homepage')); |
||||
$page->setSite($site); |
||||
$pageManager->save($page); |
||||
} |
||||
|
||||
$em = $this->getDoctrine()->getManager(); |
||||
$page = null; |
||||
|
||||
$form = $this->createFormBuilder() |
||||
->add('content', CKEditorType::class) |
||||
->add('save', SubmitType::class, ['label' => 'Update']) |
||||
->getForm(); |
||||
|
||||
$blockToEdit = null; |
||||
if ($site) { |
||||
// Getting parent |
||||
$criteria = ['site' => $site, 'enabled' => true, 'parent' => null]; |
||||
/** @var Page $page */ |
||||
$parent = $pageManager->findOneBy($criteria); |
||||
|
||||
// Check if a page exists for this site |
||||
$criteria = ['site' => $site, 'enabled' => true, 'parent' => $parent, 'slug' => $pageSlug]; |
||||
|
||||
/** @var Page $page */ |
||||
$page = $pageManager->findOneBy($criteria); |
||||
if ($page) { |
||||
$blocks = $page->getBlocks(); |
||||
/** @var Block $block */ |
||||
foreach ($blocks as $block) { |
||||
if ('Main content' === $block->getName()) { |
||||
$code = $block->getSetting('code'); |
||||
if ('content' === $code) { |
||||
$children = $block->getChildren(); |
||||
/** @var Block $child */ |
||||
foreach ($children as $child) { |
||||
if ('sonata.formatter.block.formatter' === $child->getType()) { |
||||
$blockToEdit = $child; |
||||
|
||||
break 2; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} else { |
||||
$page = $pageManager->create(); |
||||
$page->setSlug($pageSlug); |
||||
$page->setUrl('/'.$pageSlug); |
||||
$page->setName($pageSlug); |
||||
$page->setTitle($pageSlug); |
||||
$page->setEnabled(true); |
||||
$page->setDecorate(1); |
||||
$page->setRequestMethod('GET'); |
||||
$page->setTemplateCode('default'); |
||||
$page->setRouteName($pageSlug); |
||||
$page->setParent($parent); |
||||
$page->setSite($site); |
||||
|
||||
$pageManager->save($page); |
||||
|
||||
$template = $templateManager->get('default'); |
||||
$templateContainers = $template->getContainers(); |
||||
|
||||
$containers = []; |
||||
foreach ($templateContainers as $id => $area) { |
||||
$containers[$id] = [ |
||||
'area' => $area, |
||||
'block' => false, |
||||
]; |
||||
} |
||||
|
||||
// Create blocks for this page |
||||
$parentBlock = null; |
||||
foreach ($containers as $id => $area) { |
||||
if (false === $area['block'] && false === $templateContainers[$id]['shared']) { |
||||
$block = $blockInteractor->createNewContainer( |
||||
[ |
||||
'page' => $page, |
||||
'name' => $templateContainers[$id]['name'], |
||||
'code' => $id, |
||||
] |
||||
); |
||||
|
||||
if ('content' === $id && 'Main content' === $templateContainers[$id]['name']) { |
||||
$parentBlock = $block; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Create block in main content |
||||
$myBlock = $blockManager->create(); |
||||
$myBlock->setType('sonata.formatter.block.formatter'); |
||||
$myBlock->setSetting('format', 'richhtml'); |
||||
$myBlock->setSetting('content', ''); |
||||
$myBlock->setSetting('rawContent', ''); |
||||
$myBlock->setSetting('template', '@SonataFormatter/Block/block_formatter.html.twig'); |
||||
$myBlock->setParent($parentBlock); |
||||
$page->addBlocks($myBlock); |
||||
$pageManager->save($page); |
||||
} |
||||
} |
||||
|
||||
if ($blockToEdit) { |
||||
$form->setData(['content' => $blockToEdit->getSetting('content')]); |
||||
} |
||||
|
||||
$form->handleRequest($request); |
||||
|
||||
if ($form->isSubmitted() && $form->isValid() && $blockToEdit) { |
||||
$data = $form->getData(); |
||||
$content = $data['content']; |
||||
/** @var Block $blockToEdit */ |
||||
$blockToEdit->setSetting('rawContent', $content); |
||||
$blockToEdit->setSetting('content', $content); |
||||
$em->persist($blockToEdit); |
||||
$em->flush(); |
||||
$this->addFlash('success', $this->trans('Updated')); |
||||
|
||||
if (!empty($redirect)) { |
||||
return $this->redirect($redirect); |
||||
} |
||||
|
||||
return $this->redirectToRoute('home'); |
||||
} |
||||
|
||||
return $this->render( |
||||
'@ChamiloTheme/Index/page_edit.html.twig', |
||||
[ |
||||
'page' => $page, |
||||
'form' => $form->createView(), |
||||
'current_locale' => $locale, |
||||
] |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* The Chamilo index home page. |
||||
* |
||||
* @Route("/internal_page/edit/{slug}", methods={"GET", "POST"}, name="edit_page") |
||||
* |
||||
* @Security("has_role('ROLE_ADMIN')") |
||||
* |
||||
* @param string $slug |
||||
*/ |
||||
public function editPageAction($slug, Request $request): Response |
||||
{ |
||||
$defaultLocale = $request->getLocale(); |
||||
$localeFromGet = $request->get('_locale'); |
||||
if (!empty($localeFromGet)) { |
||||
$defaultLocale = $localeFromGet; |
||||
} |
||||
|
||||
return $this->forward( |
||||
'Chamilo\PageBundle\Controller\PageController:createPage', |
||||
[ |
||||
'pageSlug' => $slug, |
||||
'redirect' => $this->generateUrl('edit_page', ['slug' => $slug, '_locale' => $defaultLocale]), |
||||
'request' => $request, |
||||
] |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* @Route("/internal_page/{slug}") |
||||
* |
||||
* @param bool $showEditPageLink |
||||
* |
||||
* @return Response |
||||
*/ |
||||
public function renderPageAction( |
||||
string $slug, |
||||
Request $request, |
||||
$showEditPageLink = true, |
||||
SiteManager $siteManager, |
||||
PageManager $pageManager |
||||
) { |
||||
$host = $request->getHost(); |
||||
$criteria = [ |
||||
'locale' => $request->getLocale(), |
||||
'host' => $host, |
||||
]; |
||||
$site = $siteManager->findOneBy($criteria); |
||||
|
||||
$page = null; |
||||
$contentText = null; |
||||
|
||||
if ($site) { |
||||
// Parents only of homepage |
||||
$criteria = ['site' => $site, 'enabled' => true, 'slug' => $slug]; |
||||
/** @var Page $page */ |
||||
$page = $pageManager->findOneBy($criteria); |
||||
$blocks = $page->getBlocks(); |
||||
|
||||
foreach ($blocks as $block) { |
||||
if ('Main content' !== $block->getName()) { |
||||
continue; |
||||
} |
||||
|
||||
$code = $block->getSetting('code'); |
||||
|
||||
if ('content' !== $code) { |
||||
continue; |
||||
} |
||||
|
||||
$children = $block->getChildren(); |
||||
|
||||
/** @var Block $child */ |
||||
foreach ($children as $child) { |
||||
if ('sonata.formatter.block.formatter' !== $child->getType()) { |
||||
continue; |
||||
} |
||||
|
||||
$contentText = $child->getSetting('content'); |
||||
|
||||
break 2; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return $this->render( |
||||
'@ChamiloTheme/Index/page.html.twig', |
||||
[ |
||||
'page' => $page, |
||||
'slug' => $slug, |
||||
'show_edit_page_link' => $showEditPageLink, |
||||
'content' => $contentText, |
||||
] |
||||
); |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle\Entity; |
||||
|
||||
use Sonata\PageBundle\Entity\BaseBlock; |
||||
|
||||
/** |
||||
* Class Block. |
||||
*/ |
||||
class Block extends BaseBlock |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle\Entity; |
||||
|
||||
use Sonata\PageBundle\Entity\BasePage; |
||||
|
||||
/** |
||||
* Class Page. |
||||
*/ |
||||
class Page extends BasePage |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle\Entity; |
||||
|
||||
use Sonata\PageBundle\Entity\BaseSite; |
||||
|
||||
/** |
||||
* Class Site. |
||||
*/ |
||||
class Site extends BaseSite |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,28 +0,0 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\PageBundle\Entity; |
||||
|
||||
use Sonata\PageBundle\Entity\BaseSnapshot; |
||||
|
||||
/** |
||||
* Class Snapshot. |
||||
*/ |
||||
class Snapshot extends BaseSnapshot |
||||
{ |
||||
/** |
||||
* @var int |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* Get id. |
||||
* |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
} |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\PageBundle\Entity\Block" |
||||
table="page__bloc" |
||||
repository-class="Doctrine\ORM\EntityRepository"> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\PageBundle\Entity\Page" |
||||
table="page__page" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\PageBundle\Entity\Site" |
||||
table="page__site" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,24 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<doctrine-mapping |
||||
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" |
||||
xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> |
||||
<!-- |
||||
This file has been generated by the EasyExtends bundle ( http://sonata-project.org/easy-extends ) |
||||
|
||||
References : |
||||
xsd : https://github.com/doctrine/doctrine2/blob/master/doctrine-mapping.xsd |
||||
xml mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/xml-mapping/en |
||||
association mapping : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/association-mapping/en |
||||
--> |
||||
<entity |
||||
name="Chamilo\PageBundle\Entity\Snapshot" |
||||
table="page__snapshot" |
||||
> |
||||
|
||||
<id name="id" type="integer" column="id"> |
||||
<generator strategy="AUTO"/> |
||||
</id> |
||||
|
||||
</entity> |
||||
</doctrine-mapping> |
||||
@ -1,3 +0,0 @@ |
||||
page: |
||||
resource: '@ChamiloPageBundle/Controller/PageController.php' |
||||
type: annotation |
||||
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<class name="Chamilo\PageBundle\Entity\Block" exclusion-policy="all" |
||||
xml-root-name="block"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<class name="Chamilo\PageBundle\Entity\Page" exclusion-policy="all" |
||||
xml-root-name="page"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<class name="Chamilo\PageBundle\Entity\Site" exclusion-policy="all" |
||||
xml-root-name="site"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<serializer> |
||||
<class name="Chamilo\PageBundle\Entity\Snapshot" exclusion-policy="all" |
||||
xml-root-name="snapshot"> |
||||
|
||||
<property xml-attribute-map="true" name="id" type="integer" |
||||
expose="true" since-version="1.0" |
||||
groups="sonata_api_read,sonata_api_write,sonata_search"/> |
||||
|
||||
</class> |
||||
</serializer> |
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue