mirror of https://github.com/MISP/MISP
new: [news] Show the latest news in nicer view
parent
196c87963d
commit
098adf9f4f
|
@ -397,10 +397,11 @@ class ACLComponent extends Component
|
|||
'queryEnrichment' => array('perm_auth'),
|
||||
),
|
||||
'news' => array(
|
||||
'add' => array(),
|
||||
'edit' => array(),
|
||||
'delete' => array(),
|
||||
'index' => array('*'),
|
||||
'add' => array(),
|
||||
'edit' => array(),
|
||||
'delete' => array(),
|
||||
'admin_index' => array(),
|
||||
'index' => ['*'],
|
||||
),
|
||||
'noticelists' => array(
|
||||
'delete' => array(),
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<?php
|
||||
App::uses('AppController', 'Controller', 'CRUD');
|
||||
App::uses('AppController', 'Controller');
|
||||
|
||||
/**
|
||||
* @property News $News
|
||||
*/
|
||||
class NewsController extends AppController
|
||||
{
|
||||
public $components = array('Session', 'RequestHandler');
|
||||
|
@ -8,28 +11,51 @@ class NewsController extends AppController
|
|||
public $paginate = array(
|
||||
'limit' => 5,
|
||||
'maxLimit' => 9999, // LATER we will bump here on a problem once we have more than 9999 events <- no we won't, this is the max a user van view/page.
|
||||
'order' => array(
|
||||
'order' => [
|
||||
'News.id' => 'DESC'
|
||||
),
|
||||
],
|
||||
'contain' => [
|
||||
'User' => ['fields' => ['User.email']],
|
||||
]
|
||||
);
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->paginate['contain'] = array('User' => array('fields' => array('User.email')));
|
||||
$user = $this->Auth->user();
|
||||
$newsItems = $this->paginate();
|
||||
|
||||
$newsread = $this->Auth->user('newsread');
|
||||
foreach ($newsItems as $key => $item) {
|
||||
if ($item['News']['date_created'] > $newsread) {
|
||||
$newsItems[$key]['News']['new'] = true;
|
||||
} else {
|
||||
$newsItems[$key]['News']['new'] = false;
|
||||
$newsread = $user['newsread'];
|
||||
$hasUnreadNews = false;
|
||||
foreach ($newsItems as &$item) {
|
||||
$isNew = $item['News']['date_created'] > $newsread;
|
||||
$item['News']['new'] = $isNew;
|
||||
if ($isNew) {
|
||||
$hasUnreadNews = true;
|
||||
}
|
||||
}
|
||||
$this->set('newsItems', $newsItems);
|
||||
$this->set('hasUnreadNews', $hasUnreadNews);
|
||||
|
||||
$this->loadModel('User');
|
||||
$this->User->updateField($this->Auth->user(), 'newsread', time());
|
||||
if ($hasUnreadNews) {
|
||||
$homepage = $this->User->UserSetting->getValueForUser($user['id'], 'homepage');
|
||||
if (!empty($homepage)) {
|
||||
$this->set('homepage', $homepage);
|
||||
} else {
|
||||
$this->set('homepage', "{$this->baseurl}/events/index");
|
||||
}
|
||||
|
||||
$this->User->updateField($user, 'newsread', time());
|
||||
}
|
||||
}
|
||||
|
||||
public function admin_index()
|
||||
{
|
||||
$user = $this->Auth->user();
|
||||
$this->paginate['limit'] = 25;
|
||||
$newsItems = $this->paginate();
|
||||
|
||||
$this->set('newsItems', $newsItems);
|
||||
$this->set('user', $user);
|
||||
}
|
||||
|
||||
public function add()
|
||||
|
@ -74,7 +100,6 @@ class NewsController extends AppController
|
|||
|
||||
public function delete($id)
|
||||
{
|
||||
$this->defaultModel = 'News';
|
||||
$this->CRUD->delete($id);
|
||||
if ($this->IndexFilter->isRest()) {
|
||||
return $this->restResponsePayload;
|
||||
|
|
|
@ -1364,9 +1364,14 @@ $divider = $this->element('/genericElements/SideMenu/side_menu_divider');
|
|||
case 'news':
|
||||
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
|
||||
'url' => $baseurl . '/news/index',
|
||||
'text' => __('View News')
|
||||
'text' => __('View News'),
|
||||
));
|
||||
if ($isSiteAdmin) {
|
||||
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
|
||||
'url' => $baseurl . '/admin/news/index',
|
||||
'text' => __('View News as Admin'),
|
||||
'element_id' => 'admin_index',
|
||||
));
|
||||
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
|
||||
'url' => $baseurl . '/news/add',
|
||||
'text' => __('Add News Item')
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<?php
|
||||
$edit = $this->request->params['action'] === 'edit' ? true : false;
|
||||
$isEdit = $this->request->params['action'] === 'edit';
|
||||
echo $this->element(
|
||||
'/genericElements/SideMenu/side_menu',
|
||||
[
|
||||
'menuList' => 'news',
|
||||
'menuItem' => $edit ? 'edit' : 'add'
|
||||
'menuItem' => $isEdit ? 'edit' : 'add'
|
||||
]
|
||||
);
|
||||
|
||||
echo $this->element('genericElements/Form/genericForm', [
|
||||
'data' => [
|
||||
'title' => $edit ? __('Edit News Item') : __('Add News Item'),
|
||||
'title' => $isEdit ? __('Edit News Item') : __('Add News Item'),
|
||||
'fields' => [
|
||||
[
|
||||
'field' => 'title',
|
||||
|
@ -22,7 +22,7 @@ echo $this->element('genericElements/Form/genericForm', [
|
|||
],
|
||||
[
|
||||
'field' => 'message',
|
||||
'label' => __('Message'),
|
||||
'label' => __('Message (you can use Markdown format)'),
|
||||
'type' => 'textarea',
|
||||
'error' => ['escape' => false],
|
||||
'div' => 'input clear',
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
$this->set('menuData', ['menuList' => 'news', 'menuItem' => 'admin_index']);
|
||||
echo $this->element('genericElements/IndexTable/scaffold', [
|
||||
'scaffold_data' => [
|
||||
'data' => [
|
||||
'data' => $newsItems,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => __('ID'),
|
||||
'sort' => 'id',
|
||||
'data_path' => 'News.id'
|
||||
],
|
||||
[
|
||||
'name' => __('User'),
|
||||
'sort' => 'email',
|
||||
'data_path' => 'User.email'
|
||||
],
|
||||
[
|
||||
'name' => __('Title'),
|
||||
'sort' => 'title',
|
||||
'data_path' => 'News.title'
|
||||
],
|
||||
[
|
||||
'name' => __('Message'),
|
||||
'sort' => 'message',
|
||||
'data_path' => 'News.message'
|
||||
],
|
||||
[
|
||||
'name' => __('Created at'),
|
||||
'sort' => 'date_created',
|
||||
'data_path' => 'News.date_created',
|
||||
'element' => 'datetime'
|
||||
],
|
||||
],
|
||||
'title' => empty($ajax) ? __('News') : false,
|
||||
'pull' => 'right',
|
||||
'actions' => [
|
||||
[
|
||||
'url' => $baseurl . '/news/edit',
|
||||
'url_params_data_paths' => [
|
||||
'News.id'
|
||||
],
|
||||
'icon' => 'edit',
|
||||
'title' => __('Edit News'),
|
||||
],
|
||||
[
|
||||
'url' => $baseurl . '/news/delete',
|
||||
'url_params_data_paths' => ['News.id'],
|
||||
'class' => 'modal-open',
|
||||
'icon' => 'trash',
|
||||
'title' => __('Delete news'),
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
|
@ -1,61 +1,54 @@
|
|||
<?php
|
||||
<div class="index">
|
||||
<h2><?= __("Latest news") ?></h2>
|
||||
|
||||
$this->set('menuData', ['menuList' => 'news', 'menuItem' => 'index']);
|
||||
<?php if ($hasUnreadNews): ?>
|
||||
<div class="alert alert-success">
|
||||
<p><?= __('You have unread news.') ?></p>
|
||||
<a class="btn btn-success" href="<?= $homepage ?>"><?= __('Continue to homepage') ?></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
echo $this->element('genericElements/IndexTable/scaffold', [
|
||||
'scaffold_data' => [
|
||||
'data' => [
|
||||
'data' => $newsItems,
|
||||
'fields' => [
|
||||
[
|
||||
'name' => __('Id'),
|
||||
'sort' => 'id',
|
||||
'data_path' => 'News.id'
|
||||
],
|
||||
[
|
||||
'name' => __('User'),
|
||||
'sort' => 'email',
|
||||
'data_path' => 'User.email'
|
||||
],
|
||||
[
|
||||
'name' => __('Title'),
|
||||
'sort' => 'title',
|
||||
'data_path' => 'News.title'
|
||||
],
|
||||
[
|
||||
'name' => __('Message'),
|
||||
'sort' => 'message',
|
||||
'data_path' => 'News.message'
|
||||
],
|
||||
[
|
||||
'name' => __('Created at'),
|
||||
'sort' => 'date_created',
|
||||
'data_path' => 'News.date_created',
|
||||
'element' => 'datetime'
|
||||
],
|
||||
<div class="pagination">
|
||||
<ul>
|
||||
<?php
|
||||
$pagination = $this->Paginator->prev('« ' . __('previous'), array('tag' => 'li', 'escape' => false), null, array('tag' => 'li', 'class' => 'prev disabled', 'escape' => false, 'disabledTag' => 'span'));
|
||||
$pagination .= $this->Paginator->numbers(array('modulus' => 20, 'separator' => '', 'tag' => 'li', 'currentClass' => 'active', 'currentTag' => 'span'));
|
||||
$pagination .= $this->Paginator->next(__('next') . ' »', array('tag' => 'li', 'escape' => false), null, array('tag' => 'li', 'class' => 'next disabled', 'escape' => false, 'disabledTag' => 'span'));
|
||||
echo $pagination;
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
],
|
||||
'title' => empty($ajax) ? __('News') : false,
|
||||
'pull' => 'right',
|
||||
'actions' => [
|
||||
[
|
||||
'url' => $baseurl . '/news/edit',
|
||||
'url_params_data_paths' => [
|
||||
'News.id'
|
||||
],
|
||||
'icon' => 'edit',
|
||||
'title' => 'Edit News',
|
||||
],
|
||||
[
|
||||
'onclick' => sprintf(
|
||||
'openGenericModal(\'%s/news/delete/[onclick_params_data_path]\');',
|
||||
$baseurl
|
||||
),
|
||||
'onclick_params_data_path' => 'News.id',
|
||||
'icon' => 'trash',
|
||||
'title' => __('Delete news'),
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
<?php foreach ($newsItems as $news): ?>
|
||||
<h3 style="margin-bottom: 5px; font-size: 22px"><?php if ($news['News']['new']): ?><span class="label label-warning"><?= __('New') ?></span><?php endif; ?> <?= h($news['News']['title']) ?></h3>
|
||||
<p><?= __('Published at %s%s', $this->Time->time($news['News']['date_created']), $news['User']['email'] ? __(' by %s', $news['User']['email']) : '') ?></p>
|
||||
<div class="md" style="font-size: 14px; margin-bottom: 32px; "><?= h($news['News']['message']) ?></div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<p>
|
||||
<?= $this->Paginator->counter(array(
|
||||
'format' => __('Page {:page} of {:pages}, showing {:current} articles out of {:count} total, starting on article {:start}, ending on {:end}')
|
||||
));
|
||||
?>
|
||||
</p>
|
||||
<div class="pagination">
|
||||
<ul>
|
||||
<?= $pagination ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?= $this->element('genericElements/assetLoader', [
|
||||
'js' => [
|
||||
'markdown-it',
|
||||
],
|
||||
]);
|
||||
?>
|
||||
<script>
|
||||
var md = window.markdownit('default');
|
||||
md.disable(['image'])
|
||||
$('.md').each(function (_, el) {
|
||||
var $el = $(el);
|
||||
$el.html(md.render($el.text()));
|
||||
});
|
||||
</script>
|
||||
<?= $this->element('/genericElements/SideMenu/side_menu', ['menuList' => 'news', 'menuItem' => 'index']);
|
Loading…
Reference in New Issue