diff --git a/config/packages/sonata_page.yaml b/config/packages/sonata_page.yaml
index d8da62e4a6..0d7bd3ee7a 100644
--- a/config/packages/sonata_page.yaml
+++ b/config/packages/sonata_page.yaml
@@ -37,6 +37,8 @@ sonata_page:
- ^/js/(.*)
- ^/faq/(.*)
- ^/faq
+ - ^/news
+ - ^/news/(.*)
- ^/courses/(.*)
- ^/editor/(.*)
- ^/resource/(.*)
diff --git a/index.php b/index.php
index fbc05e9659..4f40df6317 100755
--- a/index.php
+++ b/index.php
@@ -145,14 +145,15 @@ if (!isset($_REQUEST['include'])) {
if (api_get_setting('show_hot_courses') == 'true') {
$hotCourses = $controller->return_hot_courses();
}
+
$announcements_block = $controller->return_announcements();
+
}
if (api_get_configuration_value('show_hot_sessions') === true) {
$hotSessions = SessionManager::getHotSessions();
$controller->tpl->assign('hot_sessions', $hotSessions);
}
$controller->tpl->assign('hot_courses', $hotCourses);
-$controller->tpl->assign('announcements_block', $announcements_block);
if ($includeFile) {
// If we are including a static page, then home_welcome is empty
$controller->tpl->assign('home_welcome', '');
diff --git a/main/inc/lib/system_announcements.lib.php b/main/inc/lib/system_announcements.lib.php
index 937cfc26c9..a4080002bb 100755
--- a/main/inc/lib/system_announcements.lib.php
+++ b/main/inc/lib/system_announcements.lib.php
@@ -820,9 +820,9 @@ class SystemAnnouncementManager
* @param string $visible see self::VISIBLE_* constants
* @param int $id The identifier of the announcement to display
*
- * @return string
+ * @return array
*/
- public static function displayAnnouncementsSlider($visible, $id = null)
+ public static function getAnnouncements($visible, $id = null) : array
{
$user_selected_language = Database::escape_string(api_get_interface_language());
$table = Database::get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
@@ -837,7 +837,7 @@ class SystemAnnouncementManager
$sql .= self::getVisibilityCondition($visible);
if (isset($id) && !empty($id)) {
- $id = intval($id);
+ $id = (int) $id;
$sql .= " AND id = $id ";
}
@@ -846,7 +846,7 @@ class SystemAnnouncementManager
$sql .= " AND access_url_id IN ('1', '$current_url_id') ";
}
- $sql .= " ORDER BY date_start DESC";
+ $sql .= ' ORDER BY date_start DESC';
$result = Database::query($sql);
$announcements = [];
@@ -871,14 +871,10 @@ class SystemAnnouncementManager
}
if (count($announcements) === 0) {
- return null;
+ return [];
}
- $template = new Template(null, false, false);
- $template->assign('announcements', $announcements);
- $layout = $template->get_template('announcement/slider.tpl');
-
- return $template->fetch($layout);
+ return $announcements;
}
/**
@@ -887,18 +883,19 @@ class SystemAnnouncementManager
* @param int $announcementId The announcement ID
* @param int $visibility The announcement visibility
*
- * @return string The HTML code
+ * @return array
*/
- public static function displayAnnouncement($announcementId, $visibility)
+ public static function getAnnouncement($announcementId, $visibility): array
{
$selectedUserLanguage = Database::escape_string(api_get_interface_language());
$announcementTable = Database::get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
$now = api_get_utc_datetime();
+ $announcementId = (int) $announcementId;
$whereConditions = [
"(lang = ? OR lang IS NULL OR lang = '') " => $selectedUserLanguage,
"AND (? >= date_start AND ? <= date_end) " => [$now, $now],
- "AND id = ? " => intval($announcementId),
+ "AND id = ? " => $announcementId,
];
$condition = self::getVisibilityCondition($visibility);
@@ -918,13 +915,10 @@ class SystemAnnouncementManager
'first'
);
- $template = new Template(null, false, false);
- $template->assign('announcement', $announcement);
- $layout = $template->get_template('announcement/view.tpl');
-
- return $template->fetch($layout);
+ return $announcement;
}
+
/**
* @return string
*/
diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php
index fbcf1505e7..80b17f4fac 100755
--- a/main/inc/lib/userportal.lib.php
+++ b/main/inc/lib/userportal.lib.php
@@ -91,51 +91,6 @@ class IndexManager
}
}
- /**
- * @param bool $show_slide
- *
- * @return null|string
- */
- public function return_announcements($show_slide = true)
- {
- $hideAnnouncements = api_get_setting('hide_global_announcements_when_not_connected');
- $currentUserId = api_get_user_id();
- if ($hideAnnouncements == 'true' && empty($currentUserId)) {
- return null;
- }
- $announcement = isset($_GET['announcement']) ? $_GET['announcement'] : null;
- $announcement = intval($announcement);
-
- if (!api_is_anonymous() && $this->user_id) {
- $visibility = SystemAnnouncementManager::getCurrentUserVisibility();
- if ($show_slide) {
- $announcements = SystemAnnouncementManager::displayAnnouncementsSlider(
- $visibility,
- $announcement
- );
- } else {
- $announcements = SystemAnnouncementManager::displayAllAnnouncements(
- $visibility,
- $announcement
- );
- }
- } else {
- if ($show_slide) {
- $announcements = SystemAnnouncementManager::displayAnnouncementsSlider(
- SystemAnnouncementManager::VISIBLE_GUEST,
- $announcement
- );
- } else {
- $announcements = SystemAnnouncementManager::displayAllAnnouncements(
- SystemAnnouncementManager::VISIBLE_GUEST,
- $announcement
- );
- }
- }
-
- return $announcements;
- }
-
/**
* Alias for the online_logout() function.
*
diff --git a/main/template/default/announcement/view.html.twig b/main/template/default/announcement/view.html.twig
deleted file mode 100644
index 0747b48445..0000000000
--- a/main/template/default/announcement/view.html.twig
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-{% if not announcement is empty %}
-
-
-
-{% else %}
-
- {{ "NoResults" | get_lang }}
-
-{% endif %}
diff --git a/news_list.php b/news_list.php
deleted file mode 100755
index c5b72ab897..0000000000
--- a/news_list.php
+++ /dev/null
@@ -1,31 +0,0 @@
-assign(
- 'actions',
- Display::toolbarAction('toolbar', [$actionEdit])
- );
-}
-
-$tpl->assign('content', $content);
-$tpl->display_one_col_template();
diff --git a/src/CoreBundle/Controller/IndexController.php b/src/CoreBundle/Controller/IndexController.php
index 14ab6e44ff..520c17c07c 100644
--- a/src/CoreBundle/Controller/IndexController.php
+++ b/src/CoreBundle/Controller/IndexController.php
@@ -10,6 +10,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
+use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
/**
* Class IndexController
@@ -34,13 +35,11 @@ class IndexController extends BaseController
if ($user) {
$userId = $this->getUser()->getId();
}
- $announcementsBlock = $pageController->getAnnouncements($userId);
return $this->render(
'@ChamiloCore/Index/index.html.twig',
[
- 'content' => '',
- 'announcements_block' => $announcementsBlock,
+ 'content' => ''
//'home_page_block' => $pageController->returnHomePage()
]
);
@@ -50,6 +49,7 @@ class IndexController extends BaseController
* Toggle the student view action.
*
* @Route("/toggle_student_view", methods={"GET"})
+ *
* @Security("has_role('ROLE_TEACHER')")
*
* @param Request $request
diff --git a/src/CoreBundle/Controller/NewsController.php b/src/CoreBundle/Controller/NewsController.php
new file mode 100644
index 0000000000..7df68b6b46
--- /dev/null
+++ b/src/CoreBundle/Controller/NewsController.php
@@ -0,0 +1,81 @@
+.
+ * @Route("/news")
+ *
+ * @package Chamilo\CoreBundle\Controller
+ */
+class NewsController extends BaseController
+{
+ /**
+ * The Chamilo index home page.
+ *
+ * @Route("/", name="news_index", methods={"GET", "POST"}, options={"expose"=true})
+ *
+ * @return Response
+ */
+ public function indexAction(Request $request): Response
+ {
+ $toolBar = '';
+ if ($this->isGranted('ROLE_ADMIN')) {
+ $actionEdit = \Display::url(
+ \Display::return_icon('edit.png', get_lang('EditSystemAnnouncement'), [], ICON_SIZE_MEDIUM),
+ api_get_path(WEB_PATH).'main/admin/system_announcements.php'
+ );
+ $toolBar = \Display::toolbarAction('toolbar', [$actionEdit]);
+ }
+
+ return $this->render(
+ '@ChamiloCore/News/index.html.twig',
+ [
+ 'toolbar' => $toolBar
+ ]
+ );
+ }
+
+ /**
+ * The Chamilo index home page.
+ *
+ * @Route("/{id}", name="news", methods={"GET", "POST"}, options={"expose"=true})
+ *
+ * @return Response
+ */
+ public function newsAction($id = null)
+ {
+ $visibility = \SystemAnnouncementManager::getCurrentUserVisibility();
+
+ $toolBar = '';
+ if (empty($id)) {
+ $content = \SystemAnnouncementManager::getAnnouncements($visibility);
+
+ return $this->render(
+ '@ChamiloCore/News/slider.html.twig',
+ [
+ 'announcements' => $content
+ ]
+ );
+ } else {
+ $content = \SystemAnnouncementManager::getAnnouncement($id, $visibility);
+
+ return $this->render(
+ '@ChamiloCore/News/view.html.twig',
+ [
+ 'announcement' => $content
+ ]
+ );
+ }
+ }
+}
diff --git a/src/CoreBundle/Framework/PageController.php b/src/CoreBundle/Framework/PageController.php
index c73f03efcd..ba4db1b9dd 100644
--- a/src/CoreBundle/Framework/PageController.php
+++ b/src/CoreBundle/Framework/PageController.php
@@ -157,55 +157,6 @@ class PageController
return $html;
}
- /**
- * Returns a list of announcements.
- *
- * @param int User ID
- * @param bool True: show the announcements as a slider. False: show them as a vertical list
- *
- * @return string HTML list of announcements
- */
- public function getAnnouncements($user_id = null, $show_slide = true)
- {
- // Display System announcements
- $hideAnnouncements = api_get_setting('hide_global_announcements_when_not_connected');
- if ($hideAnnouncements == 'true' && empty($user_id)) {
- return null;
- }
-
- $announcement = isset($_GET['announcement']) ? $_GET['announcement'] : null;
- $announcement = intval($announcement);
-
- if (!api_is_anonymous() && $user_id) {
- $visibility = api_is_allowed_to_create_course() ? SystemAnnouncementManager::VISIBLE_TEACHER : SystemAnnouncementManager::VISIBLE_STUDENT;
- if ($show_slide) {
- $announcements = SystemAnnouncementManager::displayAnnouncementsSlider(
- $visibility,
- $announcement
- );
- } else {
- $announcements = SystemAnnouncementManager::displayAllAnnouncements(
- $visibility,
- $announcement
- );
- }
- } else {
- if ($show_slide) {
- $announcements = SystemAnnouncementManager::displayAnnouncementsSlider(
- SystemAnnouncementManager::VISIBLE_GUEST,
- $announcement
- );
- } else {
- $announcements = SystemAnnouncementManager::displayAllAnnouncements(
- SystemAnnouncementManager::VISIBLE_GUEST,
- $announcement
- );
- }
- }
-
- return $announcements;
- }
-
/**
* Return the homepage, including announcements.
*
diff --git a/src/CoreBundle/Resources/views/Index/index.html.twig b/src/CoreBundle/Resources/views/Index/index.html.twig
index 013bf6246a..a0dc31dcf9 100644
--- a/src/CoreBundle/Resources/views/Index/index.html.twig
+++ b/src/CoreBundle/Resources/views/Index/index.html.twig
@@ -4,12 +4,14 @@
{% autoescape false %}
{{ render(controller('ChamiloPageBundle:Page:renderPage', {'slug': 'welcome'} )) }}
- {{ announcements_block }}
+ {% if chamilo_settings_get('announcement.hide_global_announcements_when_not_connected') == 'false' %}
+ {{ render(controller('ChamiloCoreBundle:News:news')) }}
+ {% endif %}
+
{{ content }}
{% if chamilo_settings_get('display.show_hot_courses') == 'true' %}
{# See CourseBlockService.php #}
{{ sonata_block_render({'type': 'chamilo_core.block.course'}) }}
{% endif %}
-
{% endautoescape %}
{% endblock %}
diff --git a/src/CoreBundle/Resources/views/Index/userportal.html.twig b/src/CoreBundle/Resources/views/Index/userportal.html.twig
index bb1ebcde03..2c1198163f 100644
--- a/src/CoreBundle/Resources/views/Index/userportal.html.twig
+++ b/src/CoreBundle/Resources/views/Index/userportal.html.twig
@@ -7,6 +7,5 @@
{% if content is null %}
{% include '@ChamiloCore/default/layout/welcome_to_course.html.twig' %}
{% endif %}
-
{% endautoescape %}
{% endblock %}
diff --git a/src/CoreBundle/Resources/views/News/index.html.twig b/src/CoreBundle/Resources/views/News/index.html.twig
new file mode 100644
index 0000000000..e5356da42a
--- /dev/null
+++ b/src/CoreBundle/Resources/views/News/index.html.twig
@@ -0,0 +1,8 @@
+{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
+
+{% block content %}
+ {% autoescape false %}
+ {{ toolbar }}
+ {{ render(controller('ChamiloCoreBundle:News:news')) }}
+ {% endautoescape %}
+{% endblock %}
diff --git a/main/template/default/announcement/slider.html.twig b/src/CoreBundle/Resources/views/News/slider.html.twig
similarity index 97%
rename from main/template/default/announcement/slider.html.twig
rename to src/CoreBundle/Resources/views/News/slider.html.twig
index a9b4ed06c5..5a441a2dde 100644
--- a/main/template/default/announcement/slider.html.twig
+++ b/src/CoreBundle/Resources/views/News/slider.html.twig
@@ -1,3 +1,4 @@
+{% autoescape false %}
@@ -41,4 +42,5 @@
Next
-
\ No newline at end of file
+
+{% endautoescape %}
\ No newline at end of file
diff --git a/src/CoreBundle/Resources/views/News/view.html.twig b/src/CoreBundle/Resources/views/News/view.html.twig
new file mode 100644
index 0000000000..c2bfa32957
--- /dev/null
+++ b/src/CoreBundle/Resources/views/News/view.html.twig
@@ -0,0 +1,24 @@
+{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
+
+{% block content %}
+ {% autoescape false %}
+
+
+ {% if not announcement is empty %}
+
+
+
+ {% else %}
+
+ {{ "NoResults" | get_lang }}
+
+ {% endif %}
+ {% endautoescape %}
+{% endblock %}
+
+