engelsystem/includes/pages/user_news.php

248 lines
7.0 KiB
PHP
Raw Normal View History

2011-06-02 01:45:46 +02:00
<?php
use Engelsystem\Models\News;
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function user_news_comments_title()
{
return __('News comments');
2013-11-25 21:56:56 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function news_title()
{
return __('News');
2013-11-25 21:04:58 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function meetings_title()
{
return __('Meetings');
2013-11-25 21:04:58 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function user_meetings()
{
$display_news = config('display_news');
2019-12-14 10:35:42 +01:00
$html = '<div class="container">';
$html .= '<h1>' . meetings_title() . '</h1>' . msg();
$request = request();
2017-01-02 15:43:36 +01:00
2017-08-28 16:21:10 +02:00
if (preg_match('/^\d{1,}$/', $request->input('page', 0))) {
$page = $request->input('page', 0);
} else {
2017-01-02 03:57:23 +01:00
$page = 0;
}
2017-01-02 15:43:36 +01:00
$news = News::whereIsMeeting(true)
2019-10-31 20:02:34 +01:00
->orderBy('created_at', 'DESC')
->limit($display_news)
->offset($page * $display_news)
->get();
2017-01-02 03:57:23 +01:00
foreach ($news as $entry) {
$html .= display_news($entry);
}
2017-01-02 15:43:36 +01:00
$dis_rows = ceil(News::whereIsMeeting(true)->count() / $display_news);
2017-01-02 03:57:23 +01:00
$html .= '<div class="text-center">' . '<ul class="pagination">';
2017-01-02 15:43:36 +01:00
for ($i = 0; $i < $dis_rows; $i++) {
2017-08-28 16:21:10 +02:00
if ($request->has('page') && $i == $request->input('page', 0)) {
2017-01-02 03:57:23 +01:00
$html .= '<li class="active">';
} elseif (!$request->has('page') && $i == 0) {
2017-01-02 03:57:23 +01:00
$html .= '<li class="active">';
} else {
$html .= '<li>';
}
2017-08-28 16:21:10 +02:00
$html .= '<a href="' . page_link_to('user_meetings', ['page' => $i]) . '">' . ($i + 1) . '</a></li>';
}
2017-01-02 03:57:23 +01:00
$html .= '</ul></div></div>';
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return $html;
2011-06-03 06:47:35 +02:00
}
/**
* Renders the text content of a news entry
2017-12-25 23:12:52 +01:00
*
2019-10-31 20:02:34 +01:00
* @param News $news
* @return string HTML
*/
2019-10-31 20:02:34 +01:00
function news_text(News $news): string
2017-12-25 23:12:52 +01:00
{
2020-03-01 02:36:54 +01:00
$text = preg_replace("/\r\n\r\n/m", '<br><br>', $news->text);
return $text;
}
2017-01-03 03:22:48 +01:00
/**
2019-10-31 20:02:34 +01:00
* @param News $news
2017-01-03 03:22:48 +01:00
* @return string
*/
2019-10-31 20:02:34 +01:00
function display_news(News $news): string
2017-01-02 03:57:23 +01:00
{
$html = '';
2019-10-31 20:02:34 +01:00
$html .= '<div class="panel' . ($news->is_meeting ? ' panel-info' : ' panel-default') . '">';
2017-01-02 03:57:23 +01:00
$html .= '<div class="panel-heading">';
2020-03-01 02:36:54 +01:00
$html .= '<h3 class="panel-title">' . ($news->is_meeting ? '[Meeting] ' : '') . $news->title . '</h3>';
2017-01-02 03:57:23 +01:00
$html .= '</div>';
$html .= '<div class="panel-body">' . news_text($news) . '</div>';
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$html .= '<div class="panel-footer text-muted">';
if (auth()->can('admin_news')) {
2017-01-02 15:43:36 +01:00
$html .= '<div class="pull-right">'
2017-12-25 23:12:52 +01:00
. button_glyph(
2019-10-31 20:02:34 +01:00
page_link_to('admin_news', ['action' => 'edit', 'id' => $news->id]),
2017-12-25 23:12:52 +01:00
'edit',
'btn-xs'
)
2017-01-02 15:43:36 +01:00
. '</div>';
2017-01-02 03:57:23 +01:00
}
2020-04-03 10:40:23 +02:00
$html .= '<span class="glyphicon glyphicon-time"></span> ' . $news->created_at->format(__('Y-m-d H:i')) . '&emsp;';
2017-01-02 15:43:36 +01:00
$html .= User_Nick_render($news->user);
2019-11-26 20:12:43 +01:00
if (current_page() != 'news_comments') {
2019-10-31 20:02:34 +01:00
$html .= '&emsp;<a href="' . page_link_to('news_comments', ['nid' => $news->id]) . '">'
2017-01-03 03:22:48 +01:00
. '<span class="glyphicon glyphicon-comment"></span> '
. __('Comments') . ' &raquo;</a> '
2017-01-03 03:22:48 +01:00
. '<span class="badge">'
2019-11-12 21:49:56 +01:00
. $news->comments()->count()
2017-01-03 03:22:48 +01:00
. '</span>';
2017-01-02 03:57:23 +01:00
}
$html .= '</div>';
$html .= '</div>';
return $html;
2011-06-02 01:45:46 +02:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function user_news_comments()
{
2018-10-31 12:48:22 +01:00
$user = auth()->user();
$request = request();
2019-12-14 10:35:42 +01:00
$html = '<div class="container">';
$html .= '<h1>' . user_news_comments_title() . '</h1>';
2019-10-31 20:02:34 +01:00
$nid = $request->input('nid');
2017-01-02 15:43:36 +01:00
if (
$request->has('nid')
2019-10-31 20:02:34 +01:00
&& preg_match('/^\d{1,}$/', $nid)
&& $news = News::find($nid)
2017-01-02 15:43:36 +01:00
) {
if ($request->hasPostData('submit') && $request->has('text')) {
$text = $request->input('text');
2019-11-12 21:49:56 +01:00
$news->comments()->create([
'text' => $text,
'user_id' => $user->id,
]);
2019-05-31 04:03:19 +02:00
engelsystem_log('Created news_comment: ' . $text);
$html .= success(__('Entry saved.'), true);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$html .= display_news($news);
2017-01-02 15:43:36 +01:00
2019-11-12 21:49:56 +01:00
foreach ($news->comments as $comment) {
2017-01-02 03:57:23 +01:00
$html .= '<div class="panel panel-default">';
2019-11-12 21:49:56 +01:00
$html .= '<div class="panel-body">' . nl2br(htmlspecialchars($comment->text)) . '</div>';
2017-01-02 03:57:23 +01:00
$html .= '<div class="panel-footer text-muted">';
2020-04-03 10:40:23 +02:00
$html .= '<span class="glyphicon glyphicon-time"></span> ' . $comment->created_at->format(__('Y-m-d H:i')) . '&emsp;';
2019-11-12 21:49:56 +01:00
$html .= User_Nick_render($comment->user);
2017-01-02 03:57:23 +01:00
$html .= '</div>';
$html .= '</div>';
}
2017-01-02 15:43:36 +01:00
$html .= '<hr /><h2>' . __('New Comment:') . '</h2>';
2017-01-02 03:57:23 +01:00
$html .= form([
form_textarea('text', __('Message'), ''),
form_submit('submit', __('Save'))
], page_link_to('news_comments', ['nid' => $news->id]));
2017-01-02 03:57:23 +01:00
} else {
$html .= __('Invalid request.');
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return $html . '</div>';
2011-06-03 05:12:50 +02:00
}
2011-06-02 01:45:46 +02:00
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function user_news()
{
2018-10-31 12:48:22 +01:00
$user = auth()->user();
$display_news = config('display_news');
$request = request();
2017-01-02 15:43:36 +01:00
2019-12-14 10:35:42 +01:00
$html = '<div class="container">';
$html .= '<h1>' . news_title() . '</h1>' . msg();
2017-01-02 15:43:36 +01:00
$isMeeting = $request->postData('treffen', false);
if ($request->has('text') && $request->has('betreff') && auth()->can('admin_news')) {
$text = $request->postData('text');
if (!auth()->can('admin_news_html')) {
$text = strip_tags($text);
}
$news = News::create([
2019-10-31 20:02:34 +01:00
'title' => strip_tags($request->postData('betreff')),
'text' => $text,
'user_id' => $user->id,
'is_meeting' => (bool)$isMeeting,
2019-10-31 20:02:34 +01:00
]);
engelsystem_log('Created news: ' . $news->title . ', is meeting: ' . ($news->is_meeting ? 'yes' : 'no'));
success(__('Entry saved.'));
2019-09-08 02:25:49 +02:00
throw_redirect(page_link_to('news'));
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-08-28 16:21:10 +02:00
if (preg_match('/^\d{1,}$/', $request->input('page', 0))) {
$page = $request->input('page', 0);
2017-01-02 03:57:23 +01:00
} else {
$page = 0;
}
2017-01-02 15:43:36 +01:00
2019-10-31 20:02:34 +01:00
$news = News::query()
->orderBy('created_at', 'DESC')
->limit($display_news)
->offset($page * $display_news)
->get();
2017-01-02 03:57:23 +01:00
foreach ($news as $entry) {
$html .= display_news($entry);
}
2017-01-02 15:43:36 +01:00
2019-10-31 20:02:34 +01:00
$dis_rows = ceil(News::query()->count() / $display_news);
2017-01-02 03:57:23 +01:00
$html .= '<div class="text-center">' . '<ul class="pagination">';
2017-01-02 15:43:36 +01:00
for ($i = 0; $i < $dis_rows; $i++) {
2017-08-28 16:21:10 +02:00
if ($request->has('page') && $i == $request->input('page', 0)) {
2017-01-02 03:57:23 +01:00
$html .= '<li class="active">';
} elseif (!$request->has('page') && $i == 0) {
2017-01-02 03:57:23 +01:00
$html .= '<li class="active">';
} else {
$html .= '<li>';
}
2017-08-28 16:21:10 +02:00
$html .= '<a href="' . page_link_to('news', ['page' => $i]) . '">' . ($i + 1) . '</a></li>';
}
2017-01-02 03:57:23 +01:00
$html .= '</ul></div>';
2017-01-02 15:43:36 +01:00
if (auth()->can('admin_news')) {
2017-01-02 03:57:23 +01:00
$html .= '<hr />';
$html .= '<h2>' . __('Create news:') . '</h2>';
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$html .= form([
form_text('betreff', __('Subject'), ''),
form_textarea('text', __('Message'), ''),
form_checkbox('treffen', __('Meeting'), false, 1),
form_submit('submit', __('Save'))
2017-01-02 15:43:36 +01:00
]);
2017-01-02 03:57:23 +01:00
}
return $html . '</div>';
2011-06-02 01:45:46 +02:00
}