display_news_cat_form();
} else {
$this->display_news_cat_listing();
}
}
/**
* Displays News Category Form
*/
private function display_news_cat_form() {
if (isset($_POST['cancel'])) {
redirect(FUSION_SELF.fusion_get_aidlink()."§ion=news_category");
}
/**
* Delete category images
*/
if ((isset($_GET['action']) && $_GET['action'] == "delete") && (isset($_GET['cat_id']) && isnum($_GET['cat_id']))) {
$result = dbcount("(news_cat)", DB_NEWS, "news_cat='".$_GET['cat_id']."'") || dbcount("(news_cat_id)", DB_NEWS_CATS, "news_cat_parent='".$_GET['cat_id']."'");
if (!empty($result)) {
addNotice("success", self::$locale['news_0152'].self::$locale['news_0153']);
} else {
dbquery("DELETE FROM ".DB_NEWS_CATS." WHERE news_cat_id='".$_GET['cat_id']."'");
addNotice("success", self::$locale['news_0154']);
}
// FUSION_REQUEST without the "action" gets
redirect(clean_request("", ["action", "ref", "cat_id"], FALSE));
}
$data = [
"news_cat_id" => 0,
"news_cat_name" => "",
"news_cat_hidden" => [],
"news_cat_parent" => 0,
"news_cat_image" => "",
"news_cat_draft" => FALSE,
"news_cat_visibility" => iGUEST,
"news_cat_sticky" => FALSE,
"news_cat_featured" => FALSE,
"news_cat_language" => LANGUAGE,
];
$formAction = FUSION_REQUEST;
$formTitle = self::$locale['news_0022'];
// if edit, override $data
if ((isset($_POST['save_cat'])) or (isset($_POST['save_cat_and_close']))) {
$inputArray = [
"news_cat_id" => form_sanitizer($_POST['news_cat_id'], "", "news_cat_id"),
"news_cat_name" => form_sanitizer($_POST['news_cat_name'], "", "news_cat_name"),
"news_cat_parent" => form_sanitizer($_POST['news_cat_parent'], 0, "news_cat_parent"),
"news_cat_visibility" => form_sanitizer($_POST['news_cat_visibility'], 0, "news_cat_visibility"),
"news_cat_draft" => isset($_POST['news_cat_draft']) ? 1 : 0,
"news_cat_sticky" => isset($_POST['news_cat_sticky']) ? 1 : 0,
"news_cat_image" => form_sanitizer($_POST['news_cat_image'], "", "news_cat_image"),
"news_cat_language" => form_sanitizer($_POST['news_cat_language'], LANGUAGE, "news_cat_language"),
];
$categoryNameCheck = [
"when_updating" => "news_cat_name='".$inputArray['news_cat_name']."' and news_cat_id !='".$inputArray['news_cat_id']."' ".(multilang_table("NS") ? "and ".in_group('news_cat_language', LANGUAGE) : ""),
"when_saving" => "news_cat_name='".$inputArray['news_cat_name']."' ".(multilang_table("NS") ? "and ".in_group('news_cat_language', LANGUAGE) : ""),
];
if (\defender::safe()) {
// check category name is unique when updating
if (dbcount("(news_cat_id)", DB_NEWS_CATS, "news_cat_id='".$inputArray['news_cat_id']."'")) {
if (!dbcount("(news_cat_id)", DB_NEWS_CATS, $categoryNameCheck['when_updating'])) {
dbquery_insert(DB_NEWS_CATS, $inputArray, "update");
addNotice("success", self::$locale['news_0151']);
if (isset($_POST['save_cat_and_close'])) {
redirect(clean_request("", ["action", "ref"], FALSE));
} else {
redirect(FUSION_REQUEST);
}
} else {
addNotice('danger', self::$locale['news_0352']);
}
} else {
// check category name is unique when saving new
if (!dbcount("(news_cat_id)", DB_NEWS_CATS, $categoryNameCheck['when_saving'])) {
dbquery_insert(DB_NEWS_CATS, $inputArray, "save");
addNotice("success", self::$locale['news_0150']);
if (isset($_POST['save_cat_and_close'])) {
redirect(clean_request("", ["action", "ref"], FALSE));
} else {
redirect(FUSION_REQUEST);
}
} else {
addNotice('danger', self::$locale['news_0352']);
}
}
}
} else if ((isset($_GET['action']) && $_GET['action'] == "edit") && (isset($_GET['cat_id']) && isnum($_GET['cat_id']))) {
$result = dbquery("SELECT * FROM ".DB_NEWS_CATS." ".(multilang_table("NS") ? "WHERE ".in_group('news_cat_language', LANGUAGE)." AND" : "WHERE")." news_cat_id='".$_GET['cat_id']."'");
if (dbrows($result)) {
$data = dbarray($result);
$data['news_cat_hidden'] = [$data['news_cat_id']];
$formTitle = self::$locale['news_0021'];
} else {
// FUSION_REQUEST without the "action" gets
redirect(clean_request("", ["action"], FALSE));
}
}
BreadCrumbs::getInstance()->addBreadCrumb(['link' => FUSION_REQUEST, 'title' => $formTitle]);
echo "
\n";
echo openform("addcat", "post", $formAction);
?>
TRUE,
"inline" => TRUE,
"error_text" => self::$locale['news_0351']
]);
echo form_select_tree("news_cat_parent", self::$locale['news_0305'], $data['news_cat_parent'], [
"inline" => TRUE,
"disable_opts" => $data['news_cat_hidden'],
"hide_disabled" => TRUE,
"query" => (multilang_table("NS") ? "WHERE ".in_group('news_cat_language', LANGUAGE) : "")
], DB_NEWS_CATS, "news_cat_name", "news_cat_id", "news_cat_parent");
echo form_select("news_cat_image", self::$locale['news_0301'], $data['news_cat_image'], [
"inline" => TRUE,
"options" => $this->newsCatImageOpts(),
]);
echo form_select('news_cat_visibility', self::$locale['news_0209'], $data['news_cat_visibility'], [
'options' => fusion_get_groups(),
'placeholder' => self::$locale['choose'],
"inline" => TRUE,
]);
?>
TRUE,
"options" => fusion_get_enabled_languages(),
"placeholder" => self::$locale['choose'],
'multiple' => TRUE,
'delimeter' => '.'
]);
} else {
echo form_hidden("news_cat_language", "", $data['news_cat_language']);
}
openside("");
echo form_checkbox("news_cat_draft", self::$locale['news_0306'], $data['news_cat_draft'], ["reverse_label" => TRUE]);
echo form_checkbox("news_cat_sticky", self::$locale['news_0307'], $data['news_cat_sticky'],
["reverse_label" => TRUE]);
echo form_button("cancel", self::$locale['cancel'], self::$locale['cancel'], ["class" => "btn-default", 'icon' => 'fa fa-times']);
echo form_button("save_cat", self::$locale['news_0302'], self::$locale['news_0302'], ["class" => "btn-success m-l-10", 'icon' => 'fa fa-hdd-o']);
echo form_button("save_cat_and_close", self::$locale['save_and_close'], self::$locale['save_and_close'],
["class" => "btn-primary", 'icon' => 'fa fa-hdd-o']);
closeside();
?>
"btn-default", 'icon' => 'fa fa-times']);
echo form_button("save_cat", self::$locale['news_0302'], self::$locale['news_0302'], ["class" => "btn-success m-l-10", 'icon' => 'fa fa-hdd-o']);
echo form_button("save_cat_and_close", self::$locale['save_and_close'], self::$locale['save_and_close'], ["input_id" => 's2', "class" => "btn-primary m-l-10", 'icon' => 'fa fa-hdd-o']);
echo "
\n";
}
private function newsCatImageOpts() {
$image_files = makefilelist(IMAGES_NC, ".|..|index.php", TRUE);
$image_list = [];
foreach ($image_files as $image) {
$image_list[$image] = $image;
}
return $image_list;
}
/**
* Displays News Category Listing
*/
private function display_news_cat_listing() {
$_GET['rowstart'] = isset(
$_GET['rowstart']) && isnum($_GET['rowstart']) &&
$_GET['rowstart'] <= dbcount("(news_cat_id)", DB_NEWS_CATS, ""
) ? intval($_GET['rowstart']) : 0;
// Run functions
$allowed_actions = array_flip(["publish", "unpublish", "sticky", "unsticky", "delete"]);
if (isset($_POST['table_action']) && isset($allowed_actions[$_POST['table_action']])) {
$input = explode(",", form_sanitizer($_POST['news_cat_id'], "", "news_cat_id"));
if (!empty($input)) {
foreach ($input as $news_cat_id) {
// check input table
if (dbcount("('news_cat_id')", DB_NEWS_CATS,
"news_cat_id='".intval($news_cat_id)."'") && \defender::safe()
) {
switch ($_POST['table_action']) {
case "publish":
dbquery("UPDATE ".DB_NEWS_CATS." SET news_cat_draft='0' WHERE news_cat_id='".intval($news_cat_id)."'");
break;
case "unpublish":
dbquery("UPDATE ".DB_NEWS_CATS." SET news_cat_draft='1' WHERE news_cat_id='".intval($news_cat_id)."'");
break;
case "sticky":
dbquery("UPDATE ".DB_NEWS_CATS." SET news_cat_sticky='1' WHERE news_cat_id='".intval($news_cat_id)."'");
break;
case "unsticky":
dbquery("UPDATE ".DB_NEWS_CATS." SET news_cat_sticky='0' WHERE news_cat_id='".intval($news_cat_id)."'");
break;
case "delete":
if (!dbcount("('news_id')", DB_NEWS, "news_cat='".$news_cat_id."'")) {
$result = dbquery("SELECT news_cat_image FROM ".DB_NEWS_CATS." WHERE news_cat_id='".intval($news_cat_id)."'");
if (dbrows($result) > 0) {
$photo = dbarray($result);
if (!empty($photo['news_cat_image']) && file_exists(IMAGES_NC.$photo['news_cat_image'])) {
unlink(IMAGES_NC.$photo['news_cat_image']);
}
}
dbquery("DELETE FROM ".DB_NEWS_CATS." WHERE news_cat_id='".intval($news_cat_id)."'");
} else {
addNotice("warning", self::$locale['news_0153']);
}
break;
default:
// Not valid id
redirect(FUSION_REQUEST);
}
}
}
addNotice("success", self::$locale['news_0151']);
redirect(FUSION_REQUEST);
}
addNotice("warning", self::$locale['news_0155']);
redirect(FUSION_REQUEST);
}
if (isset($_POST['news_clear'])) {
redirect(FUSION_SELF.fusion_get_aidlink());
}
// Switch to post
$sql_condition = "";
$search_string = [];
if (isset($_POST['p-submit-news_cat_name'])) {
$search_string['news_cat_name'] = [
"input" => form_sanitizer($_POST['news_cat_name'], "", "news_cat_name"), "operator" => "LIKE"
];
}
if (!empty($_POST['news_cat_status']) && isnum($_POST['news_cat_status'])) {
switch ($_POST['news_cat_status']) {
case 1: // is a draft
$search_string['news_cat_draft'] = ["input" => 1, "operator" => "="];
break;
case 2: // is a sticky
$search_string['news_cat_sticky'] = ["input" => 1, "operator" => "="];
break;
}
}
if (!empty($_POST['news_cat_visibility'])) {
$search_string['news_cat_visibility'] = [
"input" => form_sanitizer($_POST['news_cat_visibility'], "", "news_cat_visibility"), "operator" => "="
];
}
if (multilang_table("NS")) {
$sql_condition = in_group('news_cat_language', LANGUAGE);
}
if (!empty($search_string)) {
foreach ($search_string as $key => $values) {
if ($sql_condition) $sql_condition .= " AND ";
$sql_condition .= "`$key` ".$values['operator'].($values['operator'] == "LIKE" ? "'%" : "'").$values['input'].($values['operator'] == "LIKE" ? "%'" : "'");
}
}
$result = dbquery_tree_full(DB_NEWS_CATS, "news_cat_id", "news_cat_parent", "",
// Replacement Query
"SELECT nc.*,
count(n1.news_id) 'news_published',
count(n2.news_id) 'news_draft',
count(n3.news_id) 'news_sticky'
FROM ".DB_NEWS_CATS." nc
LEFT JOIN ".DB_NEWS." n1 ON n1.news_id=nc.news_cat_id AND n1.news_draft='0' AND (n1.news_start='0'|| n1.news_start<=NOW()) AND (n1.news_end='0'|| n1.news_end>=NOW())
LEFT JOIN ".DB_NEWS." n2 ON n2.news_id=nc.news_cat_id AND n2.news_draft='1'
LEFT JOIN ".DB_NEWS." n3 ON n2.news_id=nc.news_cat_id AND n3.news_sticky='1' AND (n3.news_start='0'|| n3.news_start<=NOW()) AND (n3.news_end='0'|| n3.news_end>=NOW())
".($sql_condition ? " WHERE ".$sql_condition : "")."
GROUP BY news_cat_id
ORDER BY news_cat_parent ASC, news_cat_id ASC LIMIT ".intval($_GET['rowstart']).", 20"
);
?>
\n";
echo "
\n";
echo "
".self::$locale['news_0022']."";
echo "
";
echo "
";
echo "
";
echo "
";
echo "
";
echo "
\n";
$filter_values = [
"news_cat_name" => !empty($_POST['news_cat_name']) ? form_sanitizer($_POST['news_cat_name'], "", "news_cat_name") : "",
"news_cat_status" => !empty($_POST['news_cat_status']) ? form_sanitizer($_POST['news_cat_status'], "", "news_cat_status") : "",
"news_cat_visibility" => !empty($_POST['news_cat_visibility']) ? form_sanitizer($_POST['news_cat_visibility'], "", "news_cat_visibility") : ""
];
$filter_empty = TRUE;
foreach ($filter_values as $val) {
if ($val) {
$filter_empty = FALSE;
}
}
echo "
\n";
echo form_text("news_cat_name", '', $filter_values['news_cat_name'], [
"placeholder" => self::$locale['news_0300'],
"append_button" => TRUE,
"append_value" => " ".self::$locale['search'],
"append_form_value" => "search_news",
"width" => "170px",
'group_size' => 'sm'
]);
echo "
\n";
echo "
\n";
echo "
\n";
add_to_jquery("
$('#toggle_options').bind('click', function(e) {
e.preventDefault();
$('#news_filter_options').slideToggle();
var caret_status = $('#filter_caret').hasClass('fa-caret-down');
if (caret_status == 1) {
$('#filter_caret').removeClass('fa-caret-down').addClass('fa-caret-up');
$(this).removeClass('btn-default').addClass('btn-info');
} else {
$('#filter_caret').removeClass('fa-caret-up').addClass('fa-caret-down');
$(this).removeClass('btn-info').addClass('btn-default');
}
});
// Select change
$('#news_status, #news_visibility, #news_category, #news_author').bind('change', function(e){
$(this).closest('form').submit();
});
");
unset($filter_values['news_text']);
echo "\n";
echo "
\n";
echo form_select("news_cat_status", "", $filter_values['news_cat_status'], [
"allowclear" => TRUE, "placeholder" => "- ".self::$locale['news_0244']." -", "options" => [
0 => self::$locale['news_0245'],
1 => self::$locale['news_0215'],
2 => self::$locale['sticky'],
]
]);
echo "
\n";
echo "
\n";
echo form_select("news_cat_visibility", "", $filter_values['news_cat_visibility'], [
"allowclear" => TRUE, "placeholder" => "- ".self::$locale['news_0246']." -", "options" => fusion_get_groups()
]);
echo "
\n";
echo "
\n";
echo closeform();
?>
display_news_category($result);
echo closeform();
echo "\n";
}
/**
* Recursive function to display administration table
*
* @param $data
* @param int $id
*/
private function display_news_category($data, $id = 0) {
if (!$id) :
?>
|
|
|
|
|
|
|
$cdata) :
$edit_link = clean_request("section=news_category&ref=news_cat_form&action=edit&cat_id=".$cat_id, ["section", "ref", "action", "cat_id"], FALSE);
$delete_link = clean_request("section=news_category&ref=news_cat_form&action=delete&cat_id=".$cat_id, ["section", "ref", "action", "cat_id"], FALSE);
?>
$cat_id, "input_id" => "checkbox".$cat_id, "class" => "m-b-0"]);
add_to_jquery('$("#checkbox'.$cat_id.'").click(function() {
if ($(this).prop("checked")) {
$("#cat'.$cat_id.'").addClass("active");
} else {
$("#cat'.$cat_id.'").removeClass("active");
}
});');
?> |
" alt=""/> |
|
|
|
|
|
display_news_category($data, $cdata['news_cat_id']);
}
?>
|