adm_program/modules/announcements/announcements.php
<?php
/**
***********************************************************************************************
* Show a list of all announcements
*
* @copyright The Admidio Team
* @see https://www.admidio.org/
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2.0 only
*
* Parameters:
*
* start - Position of query recordset where the visual output should start
* cat_uuid - Show only announcements of this category, if UUID is not set than show all announcements.
* ann_uuid - Uuid of a single announcement that should be shown.
* date_from - is set to 01.01.1970,
* if no date information is delivered
* date_to - is set to actual date,
* if no date information is delivered
***********************************************************************************************
*/
use Admidio\Exception;
use Admidio\UserInterface\Form;
try {
require_once(__DIR__ . '/../../system/common.php');
// Initialize and check the parameters
$getStart = admFuncVariableIsValid($_GET, 'start', 'int');
$getCatUuid = admFuncVariableIsValid($_GET, 'cat_uuid', 'uuid');
$getAnnUuid = admFuncVariableIsValid($_GET, 'ann_uuid', 'uuid');
$getDateFrom = admFuncVariableIsValid($_GET, 'date_from', 'date');
$getDateTo = admFuncVariableIsValid($_GET, 'date_to', 'date');
// check if module is enabled
if ((int)$gSettingsManager->get('announcements_module_enabled') === 0) {
// module is disabled
throw new Exception('SYS_MODULE_DISABLED');
} elseif ((int)$gSettingsManager->get('announcements_module_enabled') === 2) {
// Access only with valid login
require(__DIR__ . '/../../system/login_valid.php');
}
$headline = $gL10n->get('SYS_ANNOUNCEMENTS');
$category = new TableCategory($gDb);
if ($getCatUuid !== '') {
$category->readDataByUuid($getCatUuid);
$headline .= ' - ' . $category->getValue('cat_name');
}
// create object for announcements
$announcements = new ModuleAnnouncements();
$announcements->setParameter('ann_uuid', $getAnnUuid);
$announcements->setParameter('cat_id', $category->getValue('cat_id'));
$announcements->setDateRange($getDateFrom, $getDateTo);
// get parameters and number of data records
$announcementsCount = $announcements->getDataSetCount();
// add url to navigation stack
if ($getAnnUuid !== '') {
$gNavigation->addUrl(CURRENT_URL, $headline);
} else {
$gNavigation->addStartUrl(CURRENT_URL, $headline, 'bi-newspaper');
}
// create html page object
$page = new HtmlPage('admidio-announcements', $headline);
// add rss feed to announcements
if ($gSettingsManager->getBool('enable_rss')) {
$page->addRssFile(
ADMIDIO_URL . FOLDER_MODULES . '/announcements/rss_announcements.php?organization_short_name=' . $gCurrentOrganization->getValue('org_shortname'),
$gL10n->get('SYS_RSS_FEED_FOR_VAR', array($gCurrentOrganization->getValue('org_longname') . ' - ' . $headline))
);
}
// number of announcements per page
if ($gSettingsManager->getInt('announcements_per_page') > 0) {
$announcementsPerPage = $gSettingsManager->getInt('announcements_per_page');
} else {
$announcementsPerPage = $announcementsCount;
}
// create module specific functions menu
if (count($gCurrentUser->getAllEditableCategories('ANN')) > 0) {
// show link to create new announcement
$page->addPageFunctionsMenuItem(
'menu_item_announcement_add',
$gL10n->get('SYS_CREATE_ENTRY'),
ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements_new.php',
'bi-plus-circle-fill'
);
}
if ($gCurrentUser->editAnnouncements()) {
$page->addPageFunctionsMenuItem(
'menu_item_announcement_categories',
$gL10n->get('SYS_EDIT_CATEGORIES'),
SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES . '/categories/categories.php', array('type' => 'ANN')),
'bi-hdd-stack-fill'
);
}
// add filter navbar
$page->addJavascript(
'
$("#cat_uuid").change(function() {
$("#navbar_filter_form").submit();
});',
true
);
if ($getAnnUuid === '') {
// create filter menu with elements for category
$form = new Form(
'navbar_filter_form',
'sys-template-parts/form.filter.tpl',
ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements.php',
$page,
array('type' => 'navbar', 'setFocus' => false)
);
$form->addSelectBoxForCategories(
'cat_uuid',
$gL10n->get('SYS_CATEGORY'),
$gDb,
'ANN',
Form::SELECT_BOX_MODUS_FILTER,
array('defaultValue' => $getCatUuid)
);
$form->addToHtmlPage();
}
if ($announcementsCount === 0) {
// no announcements found
if ($getAnnUuid !== '') {
$page->addHtml('<p>' . $gL10n->get('SYS_NO_ENTRY') . '</p>');
} else {
$page->addHtml('<p>' . $gL10n->get('SYS_NO_ENTRIES') . '</p>');
}
} else {
// get all data records
$announcementsArray = $announcements->getDataSet($getStart, $announcementsPerPage);
$announcement = new TableAnnouncement($gDb);
// show all announcements
foreach ($announcementsArray['recordset'] as $row) {
$announcement->clear();
$announcement->setArray($row);
$annUuid = $announcement->getValue('ann_uuid');
$page->addHtml('
<div class="card admidio-blog" id="ann_' . $annUuid . '">
<div class="card-header">
<i class="bi bi-newspaper"></i>' . $announcement->getValue('ann_headline'));
// check if the user could edit this announcement
if ($announcement->isEditable()) {
$page->addHtml('
<div class="dropdown float-end">
<a class="admidio-icon-link" href="#" role="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="bi bi-three-dots" data-bs-toggle="tooltip"></i></a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="' . SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements_new.php', array('ann_uuid' => $annUuid, 'copy' => '1')) . '">
<i class="bi bi-copy" data-bs-toggle="tooltip"></i> ' . $gL10n->get('SYS_COPY') . '</a>
</li>
<li><a class="dropdown-item" href="' . SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements_new.php', array('ann_uuid' => $annUuid)) . '">
<i class="bi bi-pencil-square" data-bs-toggle="tooltip"></i> ' . $gL10n->get('SYS_EDIT') . '</a>
</li>
<li><a class="dropdown-item openPopup" href="javascript:void(0);"
data-href="' . SecurityUtils::encodeUrl(ADMIDIO_URL . '/adm_program/system/popup_message.php', array('type' => 'ann', 'element_id' => 'ann_' . $annUuid, 'name' => $announcement->getValue('ann_headline', 'database'), 'database_id' => $annUuid)) . '">
<i class="bi bi-trash" data-bs-toggle="tooltip"></i> ' . $gL10n->get('SYS_DELETE') . '</a>
</li>
</ul>
</div>');
}
$page->addHtml('</div>
<div class="card-body">' .
$announcement->getValue('ann_description') .
'</div>
<div class="card-footer">' .
// show information about user who creates the recordset and changed it
admFuncShowCreateChangeInfoByName(
$row['create_name'],
$announcement->getValue('ann_timestamp_create'),
(string)$row['change_name'],
$announcement->getValue('ann_timestamp_change'),
$row['create_uuid'],
(string)$row['change_uuid']
) .
'<div class="admidio-info-category">' .
$gL10n->get('SYS_CATEGORY') .
' <a href="' . SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements.php', array('cat_uuid' => $announcement->getValue('cat_uuid'))) . '">' . $announcement->getValue('cat_name') . '</a>
</div>
</div>
</div>');
} // Ende foreach
// If necessary show links to navigate to next and previous data records of the query
$baseUrl = SecurityUtils::encodeUrl(ADMIDIO_URL . FOLDER_MODULES . '/announcements/announcements.php', array('cat_uuid' => $getCatUuid));
$page->addHtml(admFuncGeneratePagination($baseUrl, $announcementsCount, $announcementsPerPage, $getStart));
}
// show html of complete page
$page->show();
} catch (Exception $e) {
$gMessage->show($e->getMessage());
}